找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4482|回復: 1
打印 上一主題 下一主題
收起左側

STM32智能小車編碼器源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:349706 發(fā)表于 2018-6-11 19:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
小車電池被拆了沒法調(diào)試,有錯請指正!
待修好再上傳更完善的,求大佬點評指正!

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

  4. int Target_velocity=50;                                                                   //設定速度控制的目標速度為50個脈沖每10ms

  5. /**************************************************************************
  6. 函數(shù)功能:TIM3中斷
  7. 入口參數(shù):無
  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中斷發(fā)生與否: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. 函數(shù)功能:增量PI控制器
  32. 入口參數(shù):編碼器測量值,目標速度
  33. 返回  值:電機PWM
  34. 根據(jù)增量式離散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. 在我們的速度控制閉環(huán)系統(tǒng)里面,只使用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. 函數(shù)功能:限制PWM賦值
  53. 入口參數(shù):無
  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. 函數(shù)功能:絕對值函數(shù)
  64. 入口參數(shù):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. 函數(shù)功能:賦值給PWM寄存器
  76. 入口參數(shù):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, 下載次數(shù): 54)



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:423055 發(fā)表于 2018-11-24 22:46 | 只看該作者
謝謝樓主分享
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表