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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 19531|回復(fù): 22
收起左側(cè)

STM32控制無刷直流電機(jī)BLDC速度環(huán)PID源碼

  [復(fù)制鏈接]
ID:287661 發(fā)表于 2018-3-13 08:55 | 顯示全部樓層 |閱讀模式
用的是timer1高級(jí)定時(shí)器控制無刷直流電機(jī)
此程序只有轉(zhuǎn)速PID 速度通過程序Set_Point調(diào)節(jié) 調(diào)節(jié)范圍在100到12000之間
KEY2控制無刷電機(jī)啟動(dòng)
KEY3控制無刷電機(jī)停止

電路原理圖如下:
Capture.PNG

單片機(jī)源程序如下:
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;     //設(shè)定目標(biāo) Desired Value
  15.         int Uk;                        //Uk
  16.         int Udk;                //Udk增量
  17.         int Uk_1;                 //Uk-1
  18.         double P;                 //比例常數(shù) Proportional Const
  19.         double I;                 //積分常數(shù) Integral Const
  20.         int    b;
  21.         double D;                 //微分常數(shù) 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參數(shù)初始化
  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;  //比例常數(shù) Proportional Const
  41.         Speed_Point->I                 = 0.084;          //積分常數(shù)Integral Const
  42.         Speed_Point->b      = 1;
  43.         Speed_Point->D                 = 1.8;          //微分常數(shù) Derivative Const
  44. }
  45. /*====================================================================================================
  46. 增量式PID計(jì)算部分
  47. =====================================================================================================*/
  48. int Speed_PIDAdjust(int Next_Point)
  49. {
  50.         Speed_Point->ek_0= Speed_Point->Target - Next_Point;         //增量計(jì)算
  51.         /*遇限削弱積分即控制量Uk進(jìn)入飽和區(qū),便停止進(jìn)行增大的積分項(xiàng)運(yùn)算,而只進(jìn)行使積分減少的運(yùn)算*/
  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.     /* 存儲(chǔ)誤差,用于下次計(jì)算 */
  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. }
復(fù)制代碼

  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.         /* 片內(nèi)外設(shè)初始化 */        
  18.         Periph_Init();
  19.         
  20.         /* 操作系統(tǒng)初始化 */
  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. }
復(fù)制代碼
0.png

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


回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:382987 發(fā)表于 2018-8-4 22:19 | 顯示全部樓層
學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:229981 發(fā)表于 2018-8-7 14:07 | 顯示全部樓層
嗯,看一看,硬件電路OK。留個(gè)記號(hào),有時(shí)間仔細(xì)看看
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:427504 發(fā)表于 2018-11-17 10:27 | 顯示全部樓層
樓主硬件上是怎么搭建的,可以傳授些經(jīng)驗(yàn)嗎?
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:423385 發(fā)表于 2019-4-20 22:10 | 顯示全部樓層
很好,很強(qiáng)大。
回復(fù)

使用道具 舉報(bào)

ID:518540 發(fā)表于 2019-4-22 14:30 | 顯示全部樓層
MARK,驅(qū)動(dòng)電路學(xué)習(xí)了!
回復(fù)

使用道具 舉報(bào)

ID:99570 發(fā)表于 2019-9-10 23:23 | 顯示全部樓層
很好,學(xué)習(xí)一下看看怎么閉環(huán)。
回復(fù)

使用道具 舉報(bào)

ID:324611 發(fā)表于 2019-9-18 14:31 | 顯示全部樓層
學(xué)習(xí)高手。
回復(fù)

使用道具 舉報(bào)

ID:99570 發(fā)表于 2019-9-21 17:29 | 顯示全部樓層
不錯(cuò)哦,學(xué)習(xí)中。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:285946 發(fā)表于 2020-6-20 14:39 | 顯示全部樓層
學(xué)習(xí)前輩的經(jīng)驗(yàn)
回復(fù)

使用道具 舉報(bào)

ID:135281 發(fā)表于 2020-8-25 17:22 | 顯示全部樓層
電路保護(hù)是怎么處理的,采樣看不出來
回復(fù)

使用道具 舉報(bào)

ID:323651 發(fā)表于 2020-9-28 09:28 | 顯示全部樓層
不錯(cuò)的代碼,學(xué)到了,謝謝
回復(fù)

使用道具 舉報(bào)

ID:95059 發(fā)表于 2020-11-11 16:45 | 顯示全部樓層
代碼能用,想知道τ 寶能買到實(shí)體嗎? 給個(gè)鏈接
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:555044 發(fā)表于 2022-7-1 18:00 | 顯示全部樓層
學(xué)習(xí)一下,對(duì)P、I、D三個(gè)參數(shù)的校定有好的方法不
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品国产乱码久久久久久图片 | 亚洲三级视频 | 免费黄色大片 | 色婷婷久久久亚洲一区二区三区 | 亚洲一区国产精品 | 欧美日本韩国一区二区 | 精品国产一区二区三区免费 | 精品视频在线一区 | 成人综合视频在线 | 日本久草| 一区二区三区四区国产 | 69性欧美高清影院 | 成人免费在线电影 | 黄色av免费网站 | 欧美精品一区二区三区在线播放 | 一区二区三区国产 | 亚洲在线 | 中文字幕日韩欧美一区二区三区 | 一区二区免费看 | 色www精品视频在线观看 | 青青草原精品99久久精品66 | 国产一级在线观看 | 国产2区 | 欧美日韩国产一区二区三区 | 99视频在线免费观看 | 久久国产精品偷 | 精品影视 | 五月激情六月婷婷 | 久久se精品一区精品二区 | 黄色大片免费网站 | 色橹橹欧美在线观看视频高清 | 久久精品网 | 亚洲国产精品一区二区第一页 | 欧洲在线视频 | 日本一区二区三区在线观看 | 日本a v在线播放 | 欧美午夜视频 | 亚州精品天堂中文字幕 | 欧美欧美欧美 | 先锋资源在线 | 日韩欧美综合在线视频 |