STM32小車 PWM電機調速

2021-09-25 18:34:49 字數 2963 閱讀 3106

一、定時器的兩路通道產生兩路pwm

這裡我用的是定時器3通道1通道3,主要步驟如下:

1、開啟 tim3 時鐘,配置 pb0和pa0 為復用輸出

要使用 tim3,我們必須先開啟 tim3 的時鐘(通過 apb1enr 設定),這裡我們還要配置 pb0和pa6為復用輸出,這是因為 tim3_ch1 通道將對映到 pb0上,tim3-ch3對映到pa6上此時, pb0和pa6屬於復用功能輸出。

2、設定 tim3 的 arr 和 psc

在開啟了 tim3 的時鐘之後,我們要設定 arr 和 psc 兩個暫存器的值來控制輸出 pwm 的週期。當 pwm 週期太慢(低於 50hz)的時候,我們就會明顯感覺到閃爍了。因此, pwm 週期在這裡不宜設定的太小。

3、設定 tim3_ch1和tim3_ch3 的 pwm 模式

接下來,我們要設定 tim3_ch1 和tim3_ch3為 pwm 模式(預設是凍結的),因為我們的電機是低電平轉的快,而我們希望當 ccr1 和ccr3的值小的時候, 就暗, ccr1和ccr2值大的時候,電機的轉速就快,所以我們要通過配置tim3_ccmr1的相關位來控制tim3_ch1的模式,通過tim_ccmr2的相關位來控制tim3_ch3的模式。

4、使能 tim3 的 ch2 輸出,使能 tim3

在完成以上設定了之後,我們需要開啟tim3 的通道 1和通道3輸出以及 tim3。前者通過tim3_ccer1和tim_ccmr2 來設定,是單個通道的開關,而後者則通過 tim3_cr1 來設定,是整個 tim3 的總開關。只有設定了這兩個暫存器,這樣我們才能在 tim3 的通道1和通道3 上看到 pwm 波輸出。

5、修改 tim3_ccr1和tim_ccr3 來控制占空比。

最後,在經過以上設定之後, pwm 其實已經開始輸出了,只是其占空比和頻率都是固定的,而我們通過修改 tim3_ccr1和tim_ccr3則可以控制 ch1和ch2的輸出占空比。繼而控制 兩個電機的速度。

通過以上 65個步驟,我們就可以控制 tim3 的 ch1ch3輸出 pwm 波了。 這裡特別提醒一下大家,高階定時器雖然和通用定時器類似,但是高階定時器要想輸出 pwm,必須還要設定乙個moe 位(timx_bdtr 的第 15 位),以使能主輸出,否則不會輸出 pwm!!

兩路pwm**片:

1、配置定時器3

在該工程下新建乙個資料夾命名為timer,裡面包括兩個檔案:timer.c和timer.h.

timer.c主要包括以下兩段**定時器3的初始化和pwm的初始化。

(1)定時器3初識化

void tim3_int_init(u16 arr,u16 psc)

(2)tim3 pwm初始化:

void tim3_pwm_init(u16 arr,u16 psc)

timer.h**如下:

#ifndef __timer_h

#define __timer_h

#include "sys.h"

//1,增加tim3_pwm_init函式。

//2,增加left和right巨集定義,控制tim3_ch1脈寬

//通過改變tim3->ccr1和tim->cr3的值來改變占空比,從而控制電機的速度

#define left tim3->ccr1

#define right tim3->ccr3

void tim3_int_init(u16 arr,u16 psc);

void tim3_pwm_init(u16 arr,u16 psc);

#endif

2.電機模組io口初識化:

在該工程下新建乙個資料夾命名為moter,裡面包括兩個檔案:moter.c和moter.h,moter.c**如下

#include "moter.h"

void moter_init(void)

moter.h**如下:

#ifndef __moter_h

#define __moter_h

#include "sys.h"

//電機埠定義(pwma pb0 pwmb pa6)

#define ain2 pbout(1)

#define ain1 pbout(2)

#define stby pbout(3)

#define bin2 pcout(5)

#define bin1 pcout(4)

void moter_init(void); //初始化

#endif

3.test.c

主要包括小車前進、後退、左右的一些函式,然後再通過改變left和right的值來改變tim3->ccr1和tim3->cr3的值來改變電機的速度:

#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "moter.h"

#include "timer.h"

void hou(void)//定義後退函式

void stop(void)//停

void you(void)//右拐

void zuo(void)//左拐

void go(void)//前進

int main(void)

}

通過以上的程式可以實現電機前進調速。希望對大家有所幫助。

STM32小車篇之電機轉動

首先,我們要明白 電機轉動的實質其實是對pwm波的控制輸出 庫函式直接呼叫封裝好的函式 tim setcompare1 或者用ccr調節占空比 pwm波輸出的原理圖如下 然後,進行 的編寫,可以引用正點原子的例程 在此基礎上進行 的編寫。我小車是直接控制兩個電機,四個電機分成兩組。讓其中一側電機的狀...

STM32伺服電機PWM

這篇文章是關於在stm32 stm32f103c 微控制器中使用pwm 脈衝寬度調製 的詳細教程。脈寬調變 pwm 用於控制數碼訊號的幅度,以控制需要電源的裝置和應用。這是有關pwm生成的高階教程。我們將學習如何使用stm32系列 stm32f103c 微控制器生成可變pwm訊號。可變pwm訊號用於...

STM32 電機PWM控制

2.1.1 實現工具 stm32微控制器 直流減速電機 tb6612雙路電機驅動器 keil5 2.1.2 電機實物接線 具體到我們的電機,我們可以看看電機後面的 中間的四根線 紅綠白黑 是編碼器的線,只是用於測速,和直流電機本身沒有聯絡。綜上所述,我們只需控制施加在黃線和棕色線兩端的直流電壓大小和...