STM32小車篇之電機轉動

2021-10-09 05:56:46 字數 1709 閱讀 7279

首先,我們要明白:電機轉動的實質其實是對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倍。...