新概念:积分限幅。在物理量达到期望值之前防止误差积分越来越大使得没有稳定的反而作用相反了。而有了积分限幅之后在积分误差达到幅值的时候将会保持不变,其目的是让PID控制函数不会输出一个很大的值,这样就能让物理量稳定下来。
从机
uint8_t start_flag = 0;
uint8_t finish_flag = 0;
uint8_t cnt = 0;
uint8_t data_to_receive[2];
void UART4_IRQHandler(void)
{
//接收数据帧
if(start_flag == 1 && finish_flag == 0) {
if (cnt < 2)
data_to_receive[cnt++] = USART_ReceiveData(UART4);
if (cnt == 2)
finish_flag = 1;
}
//检测是否为帧头
if (start_flag == 0) {
uint8_t start_byte = USART_ReceiveData(UART4);
if (start_byte == 0xAA)
start_flag = 1;
}
//检测帧尾
if (finish_flag == 1) {
uint8_t finish_byte = USART_ReceiveData(UART4);
if (finish_byte == 0x11 && cnt == 2) {
finish_flag = 0;
start_flag = 0;
cnt = 0;
int16_t data = *((int16_t *)data_to_receive);
int pwm = (int)((data + 36.705882) / 2.111569);
MotorRun(data, data);
}
}
}
主机
- 增加了速度方向的显示。
- 检测标志位来判断方向不稳定,会有毛刺出现。
通过一个现实不可能达到的阈值来检测方向,效果不错。
开环测试PWM占空比与转速的关系
初始图像
提取的数据
x(非占空量) | y(rps * 100) |
---|---|
100 | 168 |
125 | 225 |
150 | 273 |
175 | 331 |
200 | 388 |
225 | 437 |
250 | 495 |
275 | 552 |
300 | 600 |
325 | 658 |
350 | 706 |
375 | 760 |
400 | 811 |
425 | 860 |
450 | 911 |
475 | 965 |
500 | 1005 |
进行线性拟合
函数方程表达式为:
F
(
x
)
=
2.11156862745098
∗
x
−
36.70588235294107
F(x) = 2.11156862745098*x-36.70588235294107
F(x)=2.11156862745098∗x−36.70588235294107
拟合误差:
0.9995420363644586
0.9995420363644586
0.9995420363644586
PID调节(速度采样和控制间隔均为20ms)
kp = 0.80, ki = 2.50, kd = 0.00, SetSpeed = 6.0