首先,我們要明白:電機轉動的實質其實是對pwm波的控制輸出;
( 庫函式直接呼叫封裝好的函式 tim_setcompare1()或者用ccr調節占空比)
pwm波輸出的原理圖如下:
然後,進行**的編寫,可以引用正點原子的例程**,在此基礎上進行**的編寫。
我小車是直接控制兩個電機,四個電機分成兩組。讓其中一側電機的狀態相同,另乙個狀態相同,,沒有分別單獨控制。
通過下圖可以參考:in1 in2 in3 in4
1 0 1 0 實現電機的正轉 小車前進
0 1 0 1 實現電機的反轉 小車後退
1 0 0 1 小車右轉
0 1 1 0 小車左轉
但所有的前提是要先學會時鐘實驗和gpio的初始化,這個時候就要補上上次stm32學習的內容了。
先進行stm32時鐘和gpio的學習
附上電機初始化**
void
motor_init
(void){
gpio_inittypedef gpio_initstruct;
rcc_apb2periphclockcmd
(rcc_apb2periph_gpioa |rcc_apb2periph_gpiob,enable)
;//使能gpioa和gpiob
gpio_initstruct.gpio_mode=gpio_mode_out_pp;
//推挽輸出
gpio_initstruct.gpio_pin=gpio_pin_6 |gpio_pin_7 ;
gpio_initstruct.gpio_speed=gpio_speed_50mhz;
gpio_init
(gpioa,
&gpio_initstruct)
;gpio_resetbits
(gpioa,gpio_pin_6 |gpio_pin_7)
;//引腳先輸出高電平
gpio_initstruct.gpio_mode=gpio_mode_out_pp;
gpio_initstruct.gpio_pin=gpio_pin_0 |gpio_pin_1 ;
gpio_initstruct.gpio_speed=gpio_speed_50mhz;
gpio_init
(gpiob,
&gpio_initstruct)
;gpio_resetbits
(gpiob,gpio_pin_0 |gpio_pin_1)
;//引腳輸出高電平
之後,還需要自己寫函式實現小車的前進,後退,左轉和右轉
需要注意的是pwm時鐘輸出的arr和psc的關係:
系統時鐘設定為72mhz;
pwmfre=sys/(arr+1)(psc+1)
tim1_pwm_init(999,71);//分頻。pwm頻率=72000/(999+1)*(71+1)=1khz
週期為:1/1khz;
STM32小車 PWM電機調速
一 定時器的兩路通道產生兩路pwm 這裡我用的是定時器3的通道1和通道3,主要步驟如下 1 開啟 tim3 時鐘,配置 pb0和pa0 為復用輸出 要使用 tim3,我們必須先開啟 tim3 的時鐘 通過 apb1enr 設定 這裡我們還要配置 pb0和pa6為復用輸出,這是因為 tim3 ch1 ...
STM32 小車2個步進電機運動控制
使用stm32作為小車控制器,控制小車2個步進電機運動,pwm波頻率調節小車速度,2個io控制小車方向 標頭檔案部分 ifndef motorcontrol h define motorcontrol h include sys.h 電機抱閘驅動器控制程式 全域性變數 int motion 電機停止...
STM32 除錯步進電機初級篇
採用驅動器 假設細分數為16細分 步距角為1.8 則每個脈衝產生的電機轉動角度為 1.8 16 0.1125 電機轉 一圈所需的脈衝數量為 s 360 0.1125 3200個脈衝。同理求得64細分 為12800個脈衝 128細分為25600個脈衝。如果步距角為0.9 則在1.8 求得資料上 2倍。...