今天還是想控制直流電機的正反轉及轉速,嘗試了很多辦法。首先先看一下用控制電平的方法改變正反轉及轉速的程式。
main.c如下:
int main(void)
if(key == wkup_pres)
delay_ms(10);
tim_setcompare2(tim3,pwmval);
tim_setcompare3(tim3,pwmval);
in1 = m1;
in2 = m2;
}這個主函式很簡單也沒有發現語法或者程式的問題,但會出現:**c(95): error: at end of source: #67: expected a 「}」 site:blog.csdn.net。查了之後發現在整個程式的最後直接再加乙個「}」就好了。**這個是利用按鍵key1進行加速,key_up進行轉動方向的改變。但是變速效果並不明顯,可能是察覺不出來。對此可以改變 按鍵按下後pwmva的取值。
這個函式是利用兩個pwm波來控制。通過pwm占空比來控制轉速,利用變數的取反來控io口的電平。如果要驅動兩路直流電機直接定義相應的串列埠就可以了。在主函式中也可以直接加上「 in1 = m1; in2= m2; in3 = m3; in4 = m4;」就可以了。
在相應的pwm.c中對於兩個通道channel2和 channel3的pwm波直接如下就可以:
//初始化tim3 channel2 pwm模式
tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm2; //選擇定時器模式:tim脈衝寬度調製模式2
tim_ocinitstructure.tim_outputstate = tim_outputstate_enable; //比較輸出使能
tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high; //輸出極性:tim輸出比較極性高
tim_oc2init(tim3, &tim_ocinitstructure); //根據t指定的引數初始化外設tim3 oc2
tim_oc2preloadconfig(tim3, tim_ocpreload_enable); //使能tim3在ccr2上的預裝載暫存器
//初始化tim3 channel3 pwm模式
tim_ocinitstructure.tim_ocmode = tim_ocmode_pwm2; //選擇定時器模式:tim脈衝寬度調製模式2
tim_ocinitstructure.tim_outputstate = tim_outputstate_enable; //比較輸出使能
tim_ocinitstructure.tim_ocpolarity = tim_ocpolarity_high; //輸出極性:tim輸出比較極性高
tim_oc3init(tim3, &tim_ocinitstructure); //根據t指定的引數初始化外設tim3 oc3
tim_oc3preloadconfig(tim3, tim_ocpreload_enable);使能tim3在ccr3上的預裝載暫存器
tim_cmd(tim3, enable); //使能tim3
後來在嘗試把昨天的直流電機緩慢變速與今天的正反轉結合的時候,嘗試著把緩慢變速的程式放入乙個定義的函式裡面然後在主函式中運用,結果發現不行。改變了相對於的串列埠等等,具體原因現在還不知道。。。明天繼續嘗試嘗試。
stm32電機控制之控制兩路直流電機!看完你會了嗎
小車使用的電機是12v供電的直流電機,帶編碼器反饋,這樣就可以採用閉環速度控制,這裡電機使用pwm驅動,速度控制框圖如下 由以上框圖可知,stm32通過定時器模組輸出pwm波來控制兩個直流電機的轉動,通過改變pwm占空比的大小可以改變電機的轉速,由於我們的控制目標是實現電機執行在速度範圍內任意給定的...
stm32電機控制之控制兩路直流電機!看完你會了嗎
手頭上有乙個差分驅動的小車,使用兩個直流電機驅動,要實現小車的在給定速度下運動,完成直線行駛,轉向,加速,剎車等複雜運動。使用的電機是12v供電的直流電機,帶編碼器反饋,這樣就可以採用閉環速度控制,這裡電機使用pwm驅動,速度控制框圖如下 由以上框圖可知,stm32通過定時器模組輸出pwm波來控制兩...
直流電機pwm 直流電機的調速方法
直流電機的調速方法 一 概述 一是調節電樞電壓,二是調節勵磁電流,1 常見的微型直流電機,其磁場都是固定的,不可調的永磁體,所以只好調節電樞電壓。調節電樞電壓方法 常用的一是可控矽調壓法,再就是脈寬調變法 pwm pwm的h型屬於調壓調速。pwm的h橋只能實現大功率調速。國內的超大功率調速還要依靠可...