PID控制电机转速简单测试

新概念:积分限幅。在物理量达到期望值之前防止误差积分越来越大使得没有稳定的反而作用相反了。而有了积分限幅之后在积分误差达到幅值的时候将会保持不变,其目的是让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);
  }
 }
 
}

主机

  1. 增加了速度方向的显示。
  2. 检测标志位来判断方向不稳定,会有毛刺出现。 通过一个现实不可能达到的阈值来检测方向,效果不错。

开环测试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

经验分享 程序员 微信小程序 职场和发展