標題:
直流電機的變速轉(zhuǎn)動及正反轉(zhuǎn)單片機程序
[打印本頁]
作者:
天甄
時間:
2019-8-1 19:06
標題:
直流電機的變速轉(zhuǎn)動及正反轉(zhuǎn)單片機程序
今天嘗試了小車里面的直流電機部分,嘗試了用pwm控制的變速轉(zhuǎn)動及用改變IO口電平的正反轉(zhuǎn)。
在控制變速轉(zhuǎn)動中,拿之前的呼吸燈來做成功了。main.c中主函數(shù)如下:
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
delay_init(); //延時函數(shù)初始化
LED_Init(); //初始化與LED連接的硬件接口
TIM1_PWM_Init(899,0);//不分頻。PWM頻率=72000/(899+1)=80Khz
while(1)
{
delay_ms(10);
if(dir)led0pwmval++;
else led0pwmval–;
if(led0pwmval>300)dir=0;
if(led0pwmval==0)dir=1;
TIM_SetCompare1(TIM1,led0pwmval);
}
}
經(jīng)過相應(yīng)的定義和初始化之后,TIM1_PWM_Init(899,0);按我的理解通俗來說這句話可以控制一個循環(huán)周期的時長!899”代表了arr的值,會決定周期時長;而“0”即psc的值會決定是否時鐘預分頻。
led0pwmval的值即直接控制了PWM的占空比。另外在這個實驗中在配置 AFIO 相關(guān)寄存器的時候,必須先開啟輔助功能時鐘。 (之前兩天的當中有什么情況需要用的IO的復位(AFIO))。
在while循環(huán)里面,先消抖,而后led0pwmval 即PWM 比較值,通過他的改變控制PWM的占空比。在每一個循環(huán)中,因為led0pwmval值的不同,燈的亮度會發(fā)生改變,同樣的電機的轉(zhuǎn)速也會發(fā)生改變。
另外在改變PWM的占空比的時候,改變值“300”,會發(fā)現(xiàn)當改變值超過300后,燈的亮度的改變將看不出來,只有時間的變化。是燈的原因與程序無關(guān)。
在直流電機的正反轉(zhuǎn)當中,開始直接想的是在上一個轉(zhuǎn)速上面直接改變IO口電平的狀態(tài)來改變電機兩個引腳的高低,達到正反轉(zhuǎn)的目的,結(jié)果沒能實現(xiàn)。具體原因還不知道。
然后單獨嘗試直流電機的正反轉(zhuǎn),即通過配置高低電平來實現(xiàn)控制電機的正反轉(zhuǎn)。具體程序參照“
https://blog.csdn.net/teavamc/article/details/77429519
”
自己在開始寫這個的時候遇到的問題是不知道怎么來表示,原理很簡單,
#define IN1(a) if (a) \ GPIO_SetBits(GPIOA,GPIO_Pin_2);\else \ GPIO_ResetBits(GPIOA,GPIO_Pin_2) 但像這樣的宏定義自己之前沒有想到,在這句話中要注意:1,這句話最后不需要;來結(jié)尾;2,\代表的是連接前后兩句話。
---------------------
作者:天甄
來源:CSDN
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1