亚洲春色中文字幕久久久-三上亚,91精品国产亚一区二区三区,久久久九色综合亚洲成色777,涩涩视频下载,国产午夜亚洲精品午夜鲁丝片,国产精品A一区二区三区腾讯导航,影音先锋色情AV在线看片,蜜臀国产在线视频,极品少妇高潮啪啪无码吴梦梦 ,精品人妻无码一区二区三区手机版

標(biāo)題: stm32電機(jī)速度閉環(huán)控制(代碼詳細(xì)注釋) [打印本頁(yè)]

作者: kaka_ning    時(shí)間: 2018-7-27 09:56
標(biāo)題: stm32電機(jī)速度閉環(huán)控制(代碼詳細(xì)注釋)
PID 源碼,大家可以看看,討論討論。

單片機(jī)源程序如下:
  1. #include "sys.h"
  2. u8 Flag_Stop=1;            //停止標(biāo)志位
  3. int Encoder;               //編碼器的脈沖計(jì)數(shù)
  4. int Moto1;                 //電機(jī)PWM變量 應(yīng)是Motor的 向Moto致敬       

  5. int main(void)
  6. {
  7.         Stm32_Clock_Init(9);            //系統(tǒng)時(shí)鐘設(shè)置
  8.         delay_init(72);                 //延時(shí)初始化
  9.         LED_Init();                     //初始化與 LED 連接的硬件接口
  10.         uart_init(72,115200);           //初始化串口1
  11.         MiniBalance_PWM_Init(7199,0);   //=====初始化PWM 10KHZ 高頻可以防止電機(jī)低頻時(shí)的尖叫聲
  12.         Encoder_Init_TIM2();            //初始化編碼器
  13.   Timer3_Init(99,7199);           //=====10MS進(jìn)一次中斷服務(wù)函數(shù),中斷服務(wù)函數(shù)在control.c
  14.         while(1)
  15.                 {
  16.                         printf("%d\r\n",Encoder);       
  17.                 }
  18. }
復(fù)制代碼
  1. #include "motor.h"
  2. void MiniBalance_Motor_Init(void)
  3. {
  4.         RCC->APB2ENR|=1<<3;       //PORTB時(shí)鐘使能   
  5.         GPIOB->CRH&=0X0000FFFF;   //PORTB12 13 14 15推挽輸出
  6.         GPIOB->CRH|=0X22220000;   //PORTB12 13 14 15推挽輸出
  7. }
  8. void MiniBalance_PWM_Init(u16 arr,u16 psc)
  9. {                                                          
  10.         MiniBalance_Motor_Init();  //初始化電機(jī)控制所需IO
  11.         RCC->APB2ENR|=1<<11;       //使能TIM1時(shí)鐘   
  12.         RCC->APB2ENR|=1<<2;        //PORTA時(shí)鐘使能     
  13.         GPIOA->CRH&=0XFFFF0FF0;    //PORTA8 11復(fù)用輸出
  14.         GPIOA->CRH|=0X0000B00B;    //PORTA8 11復(fù)用輸出
  15.         TIM1->ARR=arr;             //設(shè)定計(jì)數(shù)器自動(dòng)重裝值
  16.         TIM1->PSC=psc;             //預(yù)分頻器不分頻
  17.         TIM1->CCMR2|=6<<12;        //CH4 PWM1模式       
  18.         TIM1->CCMR1|=6<<4;         //CH1 PWM1模式       
  19.         TIM1->CCMR2|=1<<11;        //CH4預(yù)裝載使能         
  20.         TIM1->CCMR1|=1<<3;         //CH1預(yù)裝載使能          
  21.         TIM1->CCER|=1<<12;         //CH4輸出使能          
  22.         TIM1->CCER|=1<<0;          //CH1輸出使能       
  23.         TIM1->BDTR |= 1<<15;       //TIM1必須要這句話才能輸出PWM
  24.         TIM1->CR1=0x8000;          //ARPE使能
  25.         TIM1->CR1|=0x01;          //使能定時(shí)器1                                                                                           
  26. }

復(fù)制代碼
  1. #include "encoder.h"

  2. /**************************************************************************
  3. 函數(shù)功能:把TIM2初始化為編碼器接口模式
  4. 入口參數(shù):無(wú)
  5. 返回  值:無(wú)
  6. **************************************************************************/
  7. void Encoder_Init_TIM2(void)
  8. {
  9.         RCC->APB1ENR|=1<<0;     //TIM2時(shí)鐘使能
  10.         RCC->APB2ENR|=1<<2;    //使能PORTA時(shí)鐘
  11.         GPIOA->CRL&=0XFFFFFF00;//PA0 PA1
  12.         GPIOA->CRL|=0X00000044;//浮空輸入
  13.         /* 把定時(shí)器初始化為編碼器模式 */
  14.         TIM2->PSC = 0x0;//預(yù)分頻器
  15.         TIM2->ARR = ENCODER_TIM_PERIOD-1;//設(shè)定計(jì)數(shù)器自動(dòng)重裝值
  16.   TIM2->CCMR1 |= 1<<0;          //輸入模式,IC1FP1映射到TI1上
  17.   TIM2->CCMR1 |= 1<<8;          //輸入模式,IC2FP2映射到TI2上
  18.   TIM2->CCER |= 0<<1;           //IC1不反向
  19.   TIM2->CCER |= 0<<5;           //IC2不反向
  20.         TIM2->SMCR |= 3<<0;                  //SMS='011' 所有的輸入均在上升沿和下降沿有效
  21.         TIM2->CR1 |= 0x01;    //CEN=1,使能定時(shí)器
  22. }
  23. /**************************************************************************
  24. 函數(shù)功能:把TIM4初始化為編碼器接口模式
  25. 入口參數(shù):無(wú)
  26. 返回  值:無(wú)
  27. **************************************************************************/
  28. void Encoder_Init_TIM4(void)
  29. {
  30.         RCC->APB1ENR|=1<<2;     //TIM4時(shí)鐘使能
  31.         RCC->APB2ENR|=1<<3;    //使能PORTb時(shí)鐘
  32.         GPIOB->CRL&=0X00FFFFFF;//PB6 PB7
  33.         GPIOB->CRL|=0X44000000;//浮空輸入
  34.         /* 把定時(shí)器初始化為編碼器模式 */
  35.         TIM4->PSC = 0x0;//預(yù)分頻器
  36.         TIM4->ARR = ENCODER_TIM_PERIOD-1;//設(shè)定計(jì)數(shù)器自動(dòng)重裝值
  37.   TIM4->CCMR1 |= 1<<0;          //輸入模式,IC1FP1映射到TI1上
  38.   TIM4->CCMR1 |= 1<<8;          //輸入模式,IC2FP2映射到TI2上
  39.   TIM4->CCER |= 0<<1;           //IC1不反向
  40.   TIM4->CCER |= 0<<5;           //IC2不反向
  41.         TIM4->SMCR |= 3<<0;                  //SMS='011' 所有的輸入均在上升沿和下降沿有效
  42.         TIM4->CR1 |= 0x01;    //CEN=1,使能定時(shí)器
  43. }
  44. /**************************************************************************
  45. 函數(shù)功能:?jiǎn)挝粫r(shí)間讀取編碼器計(jì)數(shù)
  46. 入口參數(shù):定時(shí)器
  47. 返回  值:速度值
  48. **************************************************************************/
  49. int Read_Encoder(u8 TIMX)
  50. {
  51.     int Encoder_TIM;   
  52.    switch(TIMX)
  53.          {
  54.            case 2:  Encoder_TIM= (short)TIM2 -> CNT;  TIM2 -> CNT=0;break;
  55.                  case 3:  Encoder_TIM= (short)TIM3 -> CNT;  TIM3 -> CNT=0;break;       
  56.                  case 4:  Encoder_TIM= (short)TIM4 -> CNT;  TIM4 -> CNT=0;break;       
  57.                  default:  Encoder_TIM=0;
  58.          }
  59.                 return Encoder_TIM;
  60. }


復(fù)制代碼



所有資料51hei提供下載:
電機(jī)速度閉環(huán)控制(代碼詳細(xì)注釋).rar (177.07 KB, 下載次數(shù): 238)



作者: wdliming    時(shí)間: 2018-10-2 14:06
謝謝分享、、、
作者: angst    時(shí)間: 2019-1-20 13:33
很不錯(cuò)

作者: newopen1    時(shí)間: 2019-5-15 16:20
沒(méi)看懂。。。

作者: 1286452520    時(shí)間: 2019-5-16 23:40
謝謝樓主,編程不容易
作者: newhada    時(shí)間: 2019-5-17 13:57
謝謝分享!
作者: h505459004    時(shí)間: 2019-7-25 09:46
謝謝樓主分享
作者: 黎黎呀    時(shí)間: 2019-8-5 15:32
謝謝分享,下來(lái)學(xué)習(xí),感覺(jué)講的很詳細(xì)
作者: witp1    時(shí)間: 2019-10-8 00:06

謝謝樓主,編程不容易
作者: 660022    時(shí)間: 2019-10-8 09:17

很不錯(cuò)
作者: joy2020    時(shí)間: 2020-6-20 11:09
感謝分享




歡迎光臨 (http://www.denmoz.com/bbs/) Powered by Discuz! X3.1