|
這是一個電機(jī)位置閉環(huán)控制(代碼詳細(xì)注釋),很適合做伺服電機(jī)控制入門的同志們學(xué)習(xí)借鑒
單片機(jī)源程序如下:
- #include "sys.h"
- u8 Flag_Stop=1; //停止標(biāo)志位
- int Encoder,Position=10000; //編碼器的脈沖計數(shù)
- long SHOW;
- int Moto1; //電機(jī)PWM變量 應(yīng)是Motor的 向Moto致敬
- int main(void)
- {
- Stm32_Clock_Init(9); //系統(tǒng)時鐘設(shè)置
- delay_init(72); //延時初始化
- LED_Init(); //初始化與 LED 連接的硬件接口
- uart_init(72,115200); //初始化串口1
- MiniBalance_PWM_Init(7199,0); //=====初始化PWM 10KHZ 高頻可以防止電機(jī)低頻時的尖叫聲
- Encoder_Init_TIM2(); //初始化編碼器
- Timer3_Init(99,7199); //=====10MS進(jìn)一次中斷服務(wù)函數(shù),中斷服務(wù)函數(shù)在control.c
- while(1)
- {
- printf("Encoder:%d Position:%d \r\n",Encoder,Position);
- }
- }
復(fù)制代碼- #include "motor.h"
- void MiniBalance_Motor_Init(void)
- {
- RCC->APB2ENR|=1<<3; //PORTB時鐘使能
- GPIOB->CRH&=0X0000FFFF; //PORTB12 13 14 15推挽輸出
- GPIOB->CRH|=0X22220000; //PORTB12 13 14 15推挽輸出
- }
- void MiniBalance_PWM_Init(u16 arr,u16 psc)
- {
- MiniBalance_Motor_Init(); //初始化電機(jī)控制所需IO
- RCC->APB2ENR|=1<<11; //使能TIM1時鐘
- RCC->APB2ENR|=1<<2; //PORTA時鐘使能
- GPIOA->CRH&=0XFFFF0FF0; //PORTA8 11復(fù)用輸出
- GPIOA->CRH|=0X0000B00B; //PORTA8 11復(fù)用輸出
- TIM1->ARR=arr; //設(shè)定計數(shù)器自動重裝值
- TIM1->PSC=psc; //預(yù)分頻器不分頻
- TIM1->CCMR2|=6<<12; //CH4 PWM1模式
- TIM1->CCMR1|=6<<4; //CH1 PWM1模式
- TIM1->CCMR2|=1<<11; //CH4預(yù)裝載使能
- TIM1->CCMR1|=1<<3; //CH1預(yù)裝載使能
- TIM1->CCER|=1<<12; //CH4輸出使能
- TIM1->CCER|=1<<0; //CH1輸出使能
- TIM1->BDTR |= 1<<15; //TIM1必須要這句話才能輸出PWM
- TIM1->CR1=0x8000; //ARPE使能
- TIM1->CR1|=0x01; //使能定時器1
- }
復(fù)制代碼
所有資料51hei提供下載:
電機(jī)位置閉環(huán)控制(代碼詳細(xì)注釋).7z
(122.31 KB, 下載次數(shù): 361)
2019-5-7 15:57 上傳
點擊文件名下載附件
電機(jī)位置閉環(huán)控制(代碼詳細(xì)注釋) 下載積分: 黑幣 -5
|
評分
-
查看全部評分
|