久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 19744|回復: 22
收起左側

STM32控制無刷直流電機BLDC速度環PID源碼

  [復制鏈接]
ID:287661 發表于 2018-3-13 08:55 | 顯示全部樓層 |閱讀模式
用的是timer1高級定時器控制無刷直流電機
此程序只有轉速PID 速度通過程序Set_Point調節 調節范圍在100到12000之間
KEY2控制無刷電機啟動
KEY3控制無刷電機停止

電路原理圖如下:
Capture.PNG

單片機源程序如下:
pid.c
  1. /*====================================================================================================
  2.                                                 增量式PID
  3. The PID (比例、積分、微分) function is used in mainly
  4. control applications. PIDCalc performs one iteration of the PID
  5. algorithm.
  6. While the PID function works, main is just a dummy program showing
  7. a typical usage.
  8. =====================================================================================================*/
  9. #define Set_Point        1000         //100 10000
  10. #define PWM_Max                1400
  11. #define PWM_Min     50  
  12. typedef struct PID
  13. {
  14.         int Target;     //設定目標 Desired Value
  15.         int Uk;                        //Uk
  16.         int Udk;                //Udk增量
  17.         int Uk_1;                 //Uk-1
  18.         double P;                 //比例常數 Proportional Const
  19.         double I;                 //積分常數 Integral Const
  20.         int    b;
  21.         double D;                 //微分常數 Derivative Const
  22.         int ek_0;                //ek
  23.         int ek_1;                 //ek-1
  24.         int ek_2;                 //ek-2
  25. }PID;
  26. static PID Speed_PID;
  27. static PID *Speed_Point = &Speed_PID;
  28. /*====================================================================================================
  29. Initialize PID Structure PID參數初始化
  30. =====================================================================================================*/
  31. void Speed_PIDInit(void)
  32. {
  33.         Speed_Point->Target = Set_Point;
  34.         Speed_Point->Uk                = 0;
  35.         Speed_Point->Udk    = 0;
  36.         Speed_Point->Uk_1   = PWM_Min;
  37.         Speed_Point->ek_0         = 0;         //ek=0
  38.         Speed_Point->ek_1         = 0;         //ek-1=0
  39.         Speed_Point->ek_2         = 0;          //ek-2=0
  40.         Speed_Point->P                 = 4;  //比例常數 Proportional Const
  41.         Speed_Point->I                 = 0.084;          //積分常數Integral Const
  42.         Speed_Point->b      = 1;
  43.         Speed_Point->D                 = 1.8;          //微分常數 Derivative Const
  44. }
  45. /*====================================================================================================
  46. 增量式PID計算部分
  47. =====================================================================================================*/
  48. int Speed_PIDAdjust(int Next_Point)
  49. {
  50.         Speed_Point->ek_0= Speed_Point->Target - Next_Point;         //增量計算
  51.         /*遇限削弱積分即控制量Uk進入飽和區,便停止進行增大的積分項運算,而只進行使積分減少的運算*/
  52.         if(((Speed_Point->Uk_1>=PWM_Max)&&(Speed_Point->ek_0>=0))||((Speed_Point->Uk_1<=PWM_Min)&&(Speed_Point->ek_0<=0)))
  53.         {
  54.             Speed_Point->b=0;
  55.         }
  56.         else
  57.         {
  58.                 Speed_Point->b=1;
  59.         }
  60.         Speed_Point->Udk=Speed_Point->P*(Speed_Point->ek_0-Speed_Point->ek_1) + Speed_Point->b*Speed_Point->I*Speed_Point->ek_0
  61.                 + Speed_Point->D*(Speed_Point->ek_0-2*Speed_Point->ek_1+Speed_Point->ek_2);
  62.     /* 存儲誤差,用于下次計算 */
  63.         Speed_Point->Uk = Speed_Point->Uk_1 + Speed_Point->Udk;

  64.         Speed_Point->ek_2 =        Speed_Point->ek_1;
  65.         Speed_Point->ek_1 = Speed_Point->ek_0;
  66.         Speed_Point->Uk_1 = Speed_Point->Uk;
  67.     if(Speed_Point->Uk >= PWM_Max)
  68.         {
  69.                 return PWM_Max;
  70.         }
  71.         else if(Speed_Point->Uk <= PWM_Min)
  72.         {
  73.                 return PWM_Min;
  74.         }
  75.         return(Speed_Point->Uk);
  76. }
復制代碼

  1. #include "includes.h"
  2. /********************CoOS變量**********************/
  3. #define TASK_STK_SIZE         128

  4. #define TASK0_PRIO        2
  5. #define TASK1_PRIO  3

  6. OS_STK STK_TASK0[TASK_STK_SIZE];
  7. OS_STK STK_TASK1[TASK_STK_SIZE];


  8. void TASK0(void *param);
  9. void TASK1(void *param);

  10. /*************************************************/

  11. /*********************一般變量********************/
  12. extern uint32_t Speed_count;
  13. uint8_t USART_Flag = 0;

  14. /*************************************************/
  15. int main(void)
  16. {
  17.         /* 片內外設初始化 */        
  18.         Periph_Init();
  19.         
  20.         /* 操作系統初始化 */
  21.     CoInitOS();

  22.         CoCreateTask( TASK0, (void*)0, TASK0_PRIO, &STK_TASK0[TASK_STK_SIZE - 1], TASK_STK_SIZE);
  23.         CoCreateTask( TASK1, (void*)0, TASK1_PRIO, &STK_TASK1[TASK_STK_SIZE - 1], TASK_STK_SIZE);
  24.         CoStartOS();
  25.     while(1);
  26. }

  27. void TASK0(void *param)
  28. {
  29.   uint16_t data;
  30.   KEY_Init();
  31.   Speed_PIDInit();                        
  32.   for(;;)
  33.   {
  34.     if(KEY_Read(KEY1))
  35.         {
  36.                 CoTickDelay(5);
  37.                 if(KEY_Read(KEY1))
  38.                 {
  39.                    BLDC_Start();        
  40.                 }
  41.         }
  42.         if(KEY_Read(KEY2))
  43.         {
  44.                 CoTickDelay(5);
  45.                 if(KEY_Read(KEY2))
  46.                 {
  47.                    BLDC_Stop();
  48.                 }
  49.         }
  50.         if(USART_Flag)
  51.         {
  52.             data = 1000000/(6*Speed_count);
  53.                 USART_SendData( USART2, data);
  54.                 USART_Flag = 0;
  55.         }
  56.         CoTickDelay(5);
  57.   }                        
  58. }
  59. void TASK1(void *param)
  60. {        
  61.   for(;;)
  62.   {
  63.            LED_On();
  64.            CoTickDelay(200);
  65.            LED_Off();
  66.            CoTickDelay(200);
  67.   }
  68. }
復制代碼
0.png

所有資料51hei提供下載:
速度環PID.rar (390.88 KB, 下載次數: 575)


回復

使用道具 舉報

ID:316065 發表于 2018-5-25 13:43 | 顯示全部樓層
代碼能不能用
回復

使用道具 舉報

ID:228452 發表于 2018-5-26 04:45 | 顯示全部樓層
Thank you for code list
回復

使用道具 舉報

ID:382987 發表于 2018-8-4 22:19 | 顯示全部樓層
學習一下
回復

使用道具 舉報

ID:229981 發表于 2018-8-7 14:07 | 顯示全部樓層
嗯,看一看,硬件電路OK。留個記號,有時間仔細看看
回復

使用道具 舉報

ID:407899 發表于 2018-10-13 14:41 | 顯示全部樓層
先MARK一下,以備使用,謝謝樓主
回復

使用道具 舉報

ID:340228 發表于 2018-11-5 09:37 | 顯示全部樓層
看起來好像不錯,下載下來看看
回復

使用道具 舉報

ID:427504 發表于 2018-11-17 10:27 | 顯示全部樓層
樓主硬件上是怎么搭建的,可以傳授些經驗嗎?
回復

使用道具 舉報

ID:317479 發表于 2019-4-18 12:01 | 顯示全部樓層
MARK看看
回復

使用道具 舉報

ID:423385 發表于 2019-4-20 22:10 | 顯示全部樓層
很好,很強大。
回復

使用道具 舉報

ID:518540 發表于 2019-4-22 14:30 | 顯示全部樓層
MARK,驅動電路學習了!
回復

使用道具 舉報

ID:99570 發表于 2019-9-10 23:23 | 顯示全部樓層
很好,學習一下看看怎么閉環。
回復

使用道具 舉報

ID:324611 發表于 2019-9-18 14:31 | 顯示全部樓層
學習高手。
回復

使用道具 舉報

ID:99570 發表于 2019-9-21 17:29 | 顯示全部樓層
不錯哦,學習中。
回復

使用道具 舉報

ID:669414 發表于 2019-12-21 08:32 | 顯示全部樓層
看起來好像不錯,下載下來看看
回復

使用道具 舉報

16#
無效樓層,該帖已經被刪除
ID:285946 發表于 2020-6-20 14:39 | 顯示全部樓層
學習前輩的經驗
回復

使用道具 舉報

18#
無效樓層,該帖已經被刪除
ID:135281 發表于 2020-8-25 17:22 | 顯示全部樓層
電路保護是怎么處理的,采樣看不出來
回復

使用道具 舉報

ID:323651 發表于 2020-9-28 09:28 | 顯示全部樓層
不錯的代碼,學到了,謝謝
回復

使用道具 舉報

21#
無效樓層,該帖已經被刪除
ID:95059 發表于 2020-11-11 16:45 | 顯示全部樓層
代碼能用,想知道τ 寶能買到實體嗎? 給個鏈接
回復

使用道具 舉報

ID:884849 發表于 2021-3-17 23:37 | 顯示全部樓層
非常好的教程
回復

使用道具 舉報

ID:319585 發表于 2021-7-16 20:36 | 顯示全部樓層
看了一下應該是單電阻采樣,如果能三電阻采樣就好了。
回復

使用道具 舉報

25#
無效樓層,該帖已經被刪除
26#
無效樓層,該帖已經被刪除
ID:555044 發表于 2022-7-1 18:00 | 顯示全部樓層
學習一下,對P、I、D三個參數的校定有好的方法不
回復

使用道具 舉報

ID:137171 發表于 2022-7-26 10:52 | 顯示全部樓層
這個應該是有霍爾傳感器的控制代碼吧,如果沒有霍爾的話,有沒有控制code
回復

使用道具 舉報

29#
無效樓層,該帖已經被刪除
30#
無效樓層,該帖已經被刪除
31#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 高清国产午夜精品久久久久久 | 天天玩天天干天天操 | 亚洲日韩中文字幕一区 | 国产视频一二三区 | 亚洲精品日韩一区二区电影 | 欧美精品一区二区在线观看 | 成人免费观看男女羞羞视频 | 91精品国产综合久久久久久首页 | 中文字幕av网 | 国产精品揄拍一区二区 | 夜夜骚视频 | 国产成人免费视频 | 亚洲国产精品日韩av不卡在线 | 久久中文字幕电影 | 国产一区二区免费在线 | 中文字幕av中文字幕 | 国内精品久久久久 | 久久99精品国产99久久6男男 | 精品免费国产一区二区三区 | 久久91| 国产精品国产精品国产专区不蜜 | 日韩精品在线看 | 日韩欧美国产一区二区 | 天堂中文在线观看 | 久久99精品久久久久久噜噜 | 欧美一区二 | 日韩精品一区二区三区免费视频 | 亚洲精品久久久一区二区三区 | 97国产精品视频人人做人人爱 | 国产激情精品视频 | 一本一道久久a久久精品综合蜜臀 | 日韩在线91 | 欧美a区| a级黄色网 | 国产一区二区精品在线观看 | 91在线观看免费 | 国产免费一区 | 最新av在线播放 | 黄a免费看| 国产91成人 | 99re在线视频 |