找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32智能小车编码器源码

[复制链接]
跳转到指定楼层
楼主
ID:349706 发表于 2018-6-11 19:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小车电池被拆了没法调试,有错请指正!
待修好再上传更完善的,求大佬点评指正!

单片机源程序如下:
  1. #include "contral.h"
  2. #include "stm32f10x.h"
  3. #include "motor.h"

  4. int Target_velocity=50;                                                                   //设定速度控制的目标速度为50个脉冲每10ms

  5. /**************************************************************************
  6. 函数功能:TIM3中断
  7. 入口参数:无
  8. 返回  值:无
  9. **************************************************************************/
  10. void TIM3_IRQHandler(void)
  11. {                
  12.         static int time=0;
  13.         time ++;
  14.         if(time==10)
  15.         {
  16.                 if (TIM_GetITStatus(TIM3, TIM_IT_Update)!= RESET)  //检查指定的TIM中断发生与否:TIM 中断源
  17.                         {
  18.                         Encoder=transfer(encoder);
  19.                         Led_Flash(100);                                //LED闪烁;指示单片机正常运行       
  20.                                
  21.                         Moto=Incremental_PI(Encoder,Target_velocity);  //===速度PI控制器
  22.                         Xianfu_Pwm();                                  //===PWM限幅
  23.                         Set_Pwm(Moto);
  24.                                
  25.                         TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
  26.                         }
  27.                 time=0;
  28.         }
  29. }
  30. /**************************************************************************
  31. 函数功能:增量PI控制器
  32. 入口参数:编码器测量值,目标速度
  33. 返回  值:电机PWM
  34. 根据增量式离散PID公式
  35. pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
  36. e(k)代表本次偏差
  37. e(k-1)代表上一次的偏差  以此类推
  38. pwm代表增量输出
  39. 在我们的速度控制闭环系统里面,只使用PI控制
  40. pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)
  41. **************************************************************************/
  42. int Incremental_PI (int Encoder,int Target)                //Target是目标值
  43. {        
  44.          float Kp=20,Ki=30;       
  45.          static int Bias,Pwm,Last_bias;
  46.          Bias=Encoder-Target;                //计算偏差
  47.          Pwm+=Kp*(Bias-Last_bias)+Ki*Bias;   //增量式PI控制器
  48.          Last_bias=Bias;                           //保存上一次偏差
  49.          return Pwm;                         //增量输出
  50. }

  51. /**************************************************************************
  52. 函数功能:限制PWM赋值
  53. 入口参数:无
  54. 返回  值:无
  55. **************************************************************************/
  56. void Xianfu_Pwm(void)
  57. {       
  58.         int Amplitude=7100;    /*PWM满幅是7200 限制在7100*/
  59.     if(Moto<-Amplitude) Moto=-Amplitude;       
  60.         if(Moto>Amplitude)  Moto=Amplitude;       
  61. }

  62. /**************************************************************************
  63. 函数功能:绝对值函数
  64. 入口参数:int
  65. 返回  值:unsigned int
  66. **************************************************************************/
  67. int myabs(int a)
  68. {                   
  69.           int temp;
  70.                 if(a<0)  temp=-a;  
  71.           else temp=a;
  72.           return temp;
  73. }

  74. /**************************************************************************
  75. 函数功能:赋值给PWM寄存器
  76. 入口参数:PWM
  77. 返回  值:无
  78. **************************************************************************/
  79. void Set_Pwm(int moto)
  80. {
  81.                         if(moto>0)                AIN2=1,                        AIN1=0;
  82.                         else                 AIN2=0,                        AIN1=1;
  83.                         PWM1=myabs(moto);
  84. }

复制代码

所有资料51hei提供下载:
小车.rar (406.8 KB, 下载次数: 54)



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

使用道具 举报

沙发
ID:423055 发表于 2018-11-24 22:46 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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