Added PID
This commit is contained in:
parent
06aae3981e
commit
e65857ca6f
3 changed files with 65 additions and 2 deletions
|
@ -17,7 +17,9 @@ enum {
|
|||
foc_id = 1,
|
||||
angl = 2,
|
||||
vel = 3,
|
||||
kp_id = 4
|
||||
pid_p = 4,
|
||||
pid_i,
|
||||
pid_d
|
||||
};
|
||||
|
||||
#define FLASH_RECORD_SIZE sizeof(FLASH_RECORD) //size flash struct
|
||||
|
|
|
@ -215,6 +215,32 @@ void send_motor_torque() {
|
|||
Can.write(CAN_TX_msg);
|
||||
}
|
||||
|
||||
|
||||
void send_pid(uint8_t param_pid, float data){
|
||||
flash_rec = load_params();
|
||||
if (flash_rec == nullptr) { // Проверка на NULL
|
||||
return;
|
||||
}
|
||||
uint8_t id = flash_rec[addr_id].value;
|
||||
uint8_t d = flash_rec[param_pid].value;
|
||||
uint8_t data_send = 0;
|
||||
int l = 0;
|
||||
while(d /= 10)
|
||||
l++;
|
||||
if(l >= 2)
|
||||
data_send = (float)d;
|
||||
|
||||
else if(l == 1)
|
||||
data_send = (float)(d * 10);
|
||||
|
||||
else
|
||||
data_send = (float)(d * 100);
|
||||
if(param_pid == pid_p)param_pid = REG_MOTOR_POSPID_Kp;
|
||||
else if(param_pid == pid_i)param_pid = REG_MOTOR_POSPID_Ki;
|
||||
else if(param_pid == pid_d)param_pid = REG_MOTOR_POSPID_Kd;
|
||||
send_can_with_id_crc(id,param_pid,&data,sizeof(data));
|
||||
}
|
||||
|
||||
void setup_id(uint8_t my_id) {
|
||||
write_param(addr_id,my_id);
|
||||
// send_id();
|
||||
|
@ -227,6 +253,40 @@ void setup_angle(float target_angle) {
|
|||
motor.move(target_angle);
|
||||
}
|
||||
|
||||
void setup_pid_angle(uint8_t param_pid, float data){
|
||||
switch (param_pid)
|
||||
{
|
||||
case pid_p:
|
||||
motor.P_angle.P = data;
|
||||
break;
|
||||
|
||||
case pid_i:
|
||||
motor.P_angle.I = data;
|
||||
break;
|
||||
|
||||
case pid_d:
|
||||
motor.P_angle.D = data;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
uint8_t check = uint8_t(data);
|
||||
uint8_t data_save = 0;
|
||||
if(check != 0)
|
||||
if(check /= 10)
|
||||
data_save = check;
|
||||
|
||||
else
|
||||
data_save = (uint8_t)(data * 10);
|
||||
|
||||
else
|
||||
data_save = (uint8_t)(data * 100);
|
||||
|
||||
write_param(param_pid,data_save);
|
||||
}
|
||||
|
||||
|
||||
void listen_can(const CAN_message_t &msg) {
|
||||
msg_id = msg.id;
|
||||
|
||||
|
|
|
@ -75,7 +75,7 @@ send_can_message(bus, (OLD_DEVICE_ID << 4) | REG_WRITE, packet_write)
|
|||
|
||||
time.sleep(0.5)
|
||||
|
||||
# ======= 2. Запрашиваем текущий ID (используем новы й адрес) =======
|
||||
# ======= 2. Запрашиваем текущий ID (используем новый адрес) =======
|
||||
|
||||
# Теперь для запроса используем **уже новый id**
|
||||
NEW_WITH_REG = (NEW_DEVICE_ID << 4) | REG_READ
|
||||
|
@ -99,6 +99,7 @@ if response:
|
|||
print("Ответ слишком короткий")
|
||||
else:
|
||||
received_crc = int.from_bytes(data[-2:], byteorder='little')
|
||||
print("Полученный CRC: ", received_crc)
|
||||
# Расчет CRC по всему пакету без CRC
|
||||
calc_crc = validate_crc16(data[:-2])
|
||||
if received_crc == calc_crc:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue