PID调试最麻烦的是参数调整,需要花费大量时间,如果每调整一次都要修改代码重新编译烧录,效率很低,推荐串口示波器与rt-thead finsh进行调试
推荐使用FireWater数据引擎
定时上报数据,rt_kprintf不支持浮点数据打印,fractional_to_int是一个将浮点数小数放大100倍后取整函数,实现2位小数精度的数据打印
static void pcr_refresh_timeout(void *parameter)
{
rt_kprintf("temp:%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,\
%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d\n",\
(int)temp_tec_get()->fTemp[0],fractional_to_int(temp_tec_get()->fTemp[0]),\
(int)temp_tec_get()->fTemp[1],fractional_to_int(temp_tec_get()->fTemp[1]),\
(int)temp_tec_get()->fTemp[2],fractional_to_int(temp_tec_get()->fTemp[2]),\
(int)temp_tec_get()->fTemp[3],fractional_to_int(temp_tec_get()->fTemp[3]),\
(int)temp_tec_get()->fTemp[4],fractional_to_int(temp_tec_get()->fTemp[4]),\
(int)temp_tec_get()->fTemp[5],fractional_to_int(temp_tec_get()->fTemp[5]),\
(int)temp_tec_get()->fTemp[6],fractional_to_int(temp_tec_get()->fTemp[6]),\
(int)temp_tec_get()->fTemp[7],fractional_to_int(temp_tec_get()->fTemp[7]),\
(int)temp_hot_get()->fTemp[0],fractional_to_int(temp_hot_get()->fTemp[0]),\
(int)temp_hot_get()->fTemp[1],fractional_to_int(temp_hot_get()->fTemp[1]),\
(int)temp_hot_get()->fTemp[2],fractional_to_int(temp_hot_get()->fTemp[2]),\
(int)temp_hot_get()->fTemp[3],fractional_to_int(temp_hot_get()->fTemp[3]),\
(int)temp_hot_get()->fTemp[4],fractional_to_int(temp_hot_get()->fTemp[4]),\
(int)temp_hot_get()->fTemp[5],fractional_to_int(temp_hot_get()->fTemp[5]),\
(int)temp_hot_get()->fTemp[6],fractional_to_int(temp_hot_get()->fTemp[6]),\
tec_driver_get_ptr(1)->u8Duty);
}
波形图控件拖动到页面,上传后数据显示的数据的波形图方便观察数据变化
参数调整下发,数据上报与参数下发都是使用finsh 命令行串口,在rt-thread下设定一些参数修改的调试命令
temp_pid_debug list cnt[0-100]
temp_pid_debug hot chn[0-6] temp[23-120] speed[0-3]
temp_pid_debug tec chn[0-6] temp[0-120] speed[0-4]
temp_pid_debug enable [tec|hot] chn[0-6] en[0-1]
temp_pid_debug pid hot p [k]
temp_pid_debug pid hot i [k]
temp_pid_debug pid hot d [k]
temp_pid_debug pid warm p [k]
temp_pid_debug pid warm i [k]
temp_pid_debug pid coola p [k]
temp_pid_debug pid coola i [k]
temp_pid_debug pid coolb p [k]
temp_pid_debug pid coolb i [k]
配置串口示波器命令
拖一个参数设置控件到页面并绑定命令
使用这个软件设置PID参数与查询升降温曲线波形图示例
升降温曲线实现