Add save data_type CAN
This commit is contained in:
parent
58a051b217
commit
28ce1bb556
3 changed files with 41 additions and 3 deletions
|
@ -22,7 +22,8 @@ enum {
|
|||
firmw,
|
||||
foc_id,
|
||||
angl,
|
||||
vel
|
||||
vel,
|
||||
torq
|
||||
};
|
||||
|
||||
/* for saved in FLASH float data*/
|
||||
|
|
|
@ -1,5 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
|
||||
enum{
|
||||
error_foc = 0,
|
||||
error_canRX,
|
||||
error_canTX
|
||||
};
|
||||
|
||||
#define APP_ADDR 0x0800400 // 16KB - Application
|
||||
#define ADDR_VAR 0x8040000
|
||||
|
||||
|
|
|
@ -87,6 +87,11 @@ void send_id() {
|
|||
send_can_with_id_crc(id,'I',&id);
|
||||
}
|
||||
|
||||
void send_error(uint8_t error_code){
|
||||
uint8_t id = flash_rec[addr_id].value;
|
||||
send_can_with_id_crc(id,'P',&error_code);
|
||||
}
|
||||
|
||||
void send_pid_angle(uint8_t param_pid){
|
||||
if (flash_rec == nullptr) { // Null check
|
||||
return;
|
||||
|
@ -137,6 +142,11 @@ void setup_velocity(float target_velocity) {
|
|||
motor_control_inputs.target_velocity = target_velocity;
|
||||
}
|
||||
|
||||
void send_data_type(uint8_t type_d){
|
||||
uint8_t id = flash_rec[addr_id].value;
|
||||
send_can_with_id_crc(id,'D',&type_d);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Function for process data from CAN
|
||||
* @details Function check your ID deviceю. Compare receive and calculated CRC.
|
||||
|
@ -151,7 +161,7 @@ void listen_can(const CAN_message_t &msg) {
|
|||
msg_id = msg.id;
|
||||
msg_ch = msg_id & 0xF; // Extract message channel
|
||||
uint16_t id_x = (msg_id >> 4) & 0x7FF; // Extract device address
|
||||
|
||||
uint8_t data_type = 1; //type for work with foc
|
||||
/* CRC Calculation */
|
||||
uint16_t received_crc = (msg.buf[msg.len - 2]) | (msg.buf[msg.len - 1] << 8);
|
||||
uint8_t data[10] = {0}; // Message buffer for CRC verification
|
||||
|
@ -210,6 +220,18 @@ void listen_can(const CAN_message_t &msg) {
|
|||
write_param(pid_d,conv_float_to_int.i);
|
||||
break;
|
||||
|
||||
case DATA_TYPE_ANGLE:
|
||||
data_type = DATA_TYPE_ANGLE;
|
||||
break;
|
||||
|
||||
case DATA_TYPE_VELOCITY:
|
||||
data_type = DATA_TYPE_VELOCITY;
|
||||
break;
|
||||
|
||||
case DATA_TYPE_TORQUE:
|
||||
data_type = DATA_TYPE_TORQUE;
|
||||
break;
|
||||
|
||||
case FIRMWARE_UPDATE:
|
||||
firmware_update();
|
||||
break;
|
||||
|
@ -232,6 +254,9 @@ void listen_can(const CAN_message_t &msg) {
|
|||
case MOTOR_VELOCITY: send_velocity(); break;
|
||||
case MOTOR_ANGLE: send_angle(); break;
|
||||
case MOTOR_ENABLED: send_motor_enabled(); break;
|
||||
case DATA_TYPE_ANGLE: send_data_type(uint8_t(DATA_TYPE_ANGLE)); break;
|
||||
case DATA_TYPE_VELOCITY: send_data_type(uint8_t(DATA_TYPE_VELOCITY)); break;
|
||||
case DATA_TYPE_TORQUE: send_data_type(uint8_t(DATA_TYPE_TORQUE)); break;
|
||||
// case MOTOR_TORQUE: send_motor_torque(); break;
|
||||
// case FOC_STATE: send_foc_state(); break;
|
||||
case REG_MOTOR_POSPID_Kp: send_pid_angle(pid_p); break;
|
||||
|
@ -243,7 +268,7 @@ void listen_can(const CAN_message_t &msg) {
|
|||
|
||||
/* If msg_ch != REG_WRITE or REG_READ, then SimpleFOC*/
|
||||
else{
|
||||
switch(msg.buf[0]) {
|
||||
switch(data_type) {
|
||||
/* Read after write*/
|
||||
case DATA_TYPE_ANGLE:
|
||||
send_angle();
|
||||
|
@ -262,6 +287,11 @@ void listen_can(const CAN_message_t &msg) {
|
|||
case DATA_TYPE_TORQUE:
|
||||
send_torque();
|
||||
break;
|
||||
|
||||
default:
|
||||
send_error(error_foc);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue