找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9121|回复: 9
打印 上一主题 下一主题
收起左侧

STM32电机PID算法实现程序

  [复制链接]
跳转到指定楼层
楼主
ID:574745 发表于 2019-6-29 20:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
增量式PID的算法实现,带详细注释

单片机源程序如下:
  1. #include "control.h"       
  2. int Target_velocity=1;  //设定速度控制的目标速度为50个脉冲每10ms
  3. int TIM3_IRQHandler(void)  
  4. {   
  5.         if(TIM3->SR&0X0001)//10ms定时中断
  6.         {   
  7.                   TIM3->SR&=~(1<<0);                                       //===清除定时器1中断标志位                 
  8.                   Encoder=Read_Encoder(2);                                 //===读取编码器的值,M法测速,输出为每10ms的脉冲数
  9. //                  Led_Flash(100);                                          //===LED闪烁;指示单片机正常运行       
  10.                   Motor=Incremental_PI(Encoder*100,Target_velocity);           //===速度PI控制器
  11.                   Xianfu_Pwm();                                            //===PWM限幅
  12.             Set_Pwm(Motor);                                          //===赋值给PWM寄存器  
  13.         }              
  14.          return 0;          
  15. }

  16. /**************************************************************************
  17. 函数功能:赋值给PWM寄存器
  18. 入口参数:PWM
  19. 返回  值:无
  20. **************************************************************************/
  21. void Set_Pwm(int motor)
  22. {
  23.                         if(motor>0)                        AIN2=1,                        AIN1=0;
  24.                         else                   AIN2=0,                        AIN1=1;
  25.                         PWMA=myabs(motor);
  26. }

  27. /**************************************************************************
  28. 函数功能:限制PWM赋值
  29. 入口参数:无
  30. 返回  值:无
  31. **************************************************************************/
  32. void Xianfu_Pwm(void)
  33. {       
  34.           int Amplitude=7100;    //===PWM满幅是7200 限制在7100
  35.     if(Motor<-Amplitude) Motor=-Amplitude;       
  36.                 if(Motor>Amplitude)  Motor=Amplitude;       
  37. }

  38. /**************************************************************************
  39. 函数功能:绝对值函数
  40. 入口参数:int
  41. 返回  值:unsigned int
  42. **************************************************************************/
  43. int myabs(int a)
  44. {                   
  45.           int temp;
  46.                 if(a<0)  temp=-a;  
  47.           else temp=a;
  48.           return temp;
  49. }
  50. /**************************************************************************
  51. 函数功能:增量PI控制器
  52. 入口参数:编码器测量值,目标速度
  53. 返回  值:电机PWM
  54. 根据增量式离散PID公式
  55. pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
  56. e(k)代表本次偏差
  57. e(k-1)代表上一次的偏差  以此类推
  58. pwm代表增量输出
  59. 在我们的速度控制闭环系统里面,只使用PI控制
  60. pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)
  61. **************************************************************************/
  62. int Incremental_PI (int Encoder,int Target)
  63. {        
  64.    float Kp=20,Ki=30;       
  65.          static int Bias,Pwm,Last_bias;
  66.          Bias=Encoder-Target;                //计算偏差
  67.          Pwm+=Kp*(Bias-Last_bias)+Ki*Bias;   //增量式PI控制器
  68.          Last_bias=Bias;                           //保存上一次偏差
  69.          return Pwm;                         //增量输出
  70. }
复制代码

所有资料51hei提供下载:
电机速度闭环控制V1.7z (188.4 KB, 下载次数: 330)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏13 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:574843 发表于 2019-6-30 00:04 | 只看该作者
楼主厉害
回复

使用道具 举报

板凳
ID:13442 发表于 2019-6-30 08:11 | 只看该作者
      谢谢分享
回复

使用道具 举报

地板
ID:463265 发表于 2019-7-1 16:53 | 只看该作者
这个真的厉害了
回复

使用道具 举报

5#
ID:83422 发表于 2019-7-2 14:16 | 只看该作者
谢谢分享,比较典型的pi调节方式
回复

使用道具 举报

6#
ID:423971 发表于 2020-4-16 23:25 | 只看该作者
感谢楼主分享
回复

使用道具 举报

7#
ID:811987 发表于 2021-7-24 16:44 | 只看该作者
这个源码好像没有设置电机的目标速度具体是多少,请问应该怎么去写呢?
回复

使用道具 举报

8#
ID:745413 发表于 2021-7-28 19:25 | 只看该作者
FEAramd 发表于 2021-7-24 16:44
这个源码好像没有设置电机的目标速度具体是多少,请问应该怎么去写呢?

同问
回复

使用道具 举报

9#
ID:604514 发表于 2021-8-3 16:52 | 只看该作者
这个电机是什么电机?
回复

使用道具 举报

10#
ID:959454 发表于 2021-8-8 11:11 | 只看该作者
这个是步进电机吧?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表