Added PID

This commit is contained in:
lulko 2025-04-17 16:49:39 +03:00
parent 06aae3981e
commit e65857ca6f
3 changed files with 65 additions and 2 deletions

View file

@ -17,7 +17,9 @@ enum {
foc_id = 1, foc_id = 1,
angl = 2, angl = 2,
vel = 3, vel = 3,
kp_id = 4 pid_p = 4,
pid_i,
pid_d
}; };
#define FLASH_RECORD_SIZE sizeof(FLASH_RECORD) //size flash struct #define FLASH_RECORD_SIZE sizeof(FLASH_RECORD) //size flash struct

View file

@ -215,6 +215,32 @@ void send_motor_torque() {
Can.write(CAN_TX_msg); 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) { void setup_id(uint8_t my_id) {
write_param(addr_id,my_id); write_param(addr_id,my_id);
// send_id(); // send_id();
@ -227,6 +253,40 @@ void setup_angle(float target_angle) {
motor.move(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) { void listen_can(const CAN_message_t &msg) {
msg_id = msg.id; msg_id = msg.id;

View file

@ -75,7 +75,7 @@ send_can_message(bus, (OLD_DEVICE_ID << 4) | REG_WRITE, packet_write)
time.sleep(0.5) time.sleep(0.5)
# ======= 2. Запрашиваем текущий ID (используем новы й адрес) ======= # ======= 2. Запрашиваем текущий ID (используем новый адрес) =======
# Теперь для запроса используем **уже новый id** # Теперь для запроса используем **уже новый id**
NEW_WITH_REG = (NEW_DEVICE_ID << 4) | REG_READ NEW_WITH_REG = (NEW_DEVICE_ID << 4) | REG_READ
@ -99,6 +99,7 @@ if response:
print("Ответ слишком короткий") print("Ответ слишком короткий")
else: else:
received_crc = int.from_bytes(data[-2:], byteorder='little') received_crc = int.from_bytes(data[-2:], byteorder='little')
print("Полученный CRC: ", received_crc)
# Расчет CRC по всему пакету без CRC # Расчет CRC по всему пакету без CRC
calc_crc = validate_crc16(data[:-2]) calc_crc = validate_crc16(data[:-2])
if received_crc == calc_crc: if received_crc == calc_crc: