心血來潮買了幾個(gè)BLDC電機(jī),準(zhǔn)備這次就使用蘋果派這塊板子試一下BLDC電機(jī)的控制。
蘋果派這塊板子的書籍和例程很多,要驅(qū)動(dòng)電機(jī)首先要配置定時(shí)器,產(chǎn)生可控的PWM脈沖。
趁快遞還沒到,先學(xué)習(xí)一下PWM的生成方式:
static void ConfigTimer2(unsigned short arr, unsigned short psc)
{
timer_parameter_struct timer_initpara; //timer_initpara用于存放定時(shí)器的參數(shù)
//使能RCU相關(guān)時(shí)鐘
rcu_periph_clock_enable(RCU_TIMER2); //使能TIMER2的時(shí)鐘
timer_deinit(TIMER2); //設(shè)置TIMER2參數(shù)恢復(fù)默認(rèn)值
timer_struct_para_init(&timer_initpara); //初始化timer_initpara
//配置TIMER2
timer_initpara.prescaler = psc; //設(shè)置預(yù)分頻器值
timer_initpara.counterdirection = TIMER_COUNTER_UP; //設(shè)置向上計(jì)數(shù)模式
timer_initpara.period = arr; //設(shè)置自動(dòng)重裝載值
timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //設(shè)置時(shí)鐘分割
timer_init(TIMER2, &timer_initpara); //根據(jù)參數(shù)初始化定時(shí)器
timer_interrupt_enable(TIMER2, TIMER_INT_UP); //使能定時(shí)器的更新中斷
nvic_irq_enable(TIMER2_IRQn, 1, 0); //配置NVIC設(shè)置優(yōu)先級(jí)
timer_enable(TIMER2); //使能定時(shí)器
}
配置PWM輸出模式:
static void ConfigTIMER1ForPWMPB10(unsigned short arr, unsigned short psc)
{
//定義初始化結(jié)構(gòu)體變量
timer_oc_parameter_struct timer_ocinitpara;
timer_parameter_struct timer_initpara;
rcu_periph_clock_enable(RCU_GPIOB); //使能GPIOB時(shí)鐘
rcu_periph_clock_enable(RCU_TIMER1); //使能TIMER1時(shí)鐘
rcu_periph_clock_enable(RCU_AF); //使能TIMER1時(shí)鐘
gpio_pin_remap_config(GPIO_TIMER1_PARTIAL_REMAP1, ENABLE); //TIMER1部分重映射TIMER1_CH2- >PB10
gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10); //設(shè)置GPIO輸出模式及速度
timer_deinit(TIMER1); //將TIMER1配置為默認(rèn)值
timer_struct_para_init(&timer_initpara); //timer_initpara配置為默認(rèn)值
timer_initpara.prescaler = psc; //設(shè)置預(yù)分頻值
timer_initpara.alignedmode = TIMER_COUNTER_EDGE; //設(shè)置對(duì)齊模式
timer_initpara.counterdirection = TIMER_COUNTER_UP; //設(shè)置向上計(jì)數(shù)
timer_initpara.period = arr; //設(shè)置重裝載值
timer_initpara.clockdivision = TIMER_CKDIV_DIV1; //設(shè)置時(shí)鐘分頻因子
timer_initpara.repetitioncounter = 0; //設(shè)置重復(fù)計(jì)數(shù)值
timer_init(TIMER1, &timer_initpara); //初始化定時(shí)器
//將結(jié)構(gòu)體參數(shù)初始化為默認(rèn)值
timer_channel_output_struct_para_init(&timer_ocinitpara);
timer_ocinitpara.outputstate = TIMER_CCX_ENABLE; //設(shè)置通道輸出狀態(tài)
timer_ocinitpara.outputnstate = TIMER_CCXN_DISABLE; //設(shè)置互補(bǔ)通道輸出狀態(tài)
timer_ocinitpara.ocpolarity = TIMER_OC_POLARITY_HIGH; //設(shè)置通道輸出極性
timer_ocinitpara.ocnpolarity = TIMER_OCN_POLARITY_HIGH; //設(shè)置互補(bǔ)通道輸出極性
timer_ocinitpara.ocidlestate = TIMER_OC_IDLE_STATE_LOW; //設(shè)置空閑狀態(tài)下通道輸出極性
timer_ocinitpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW; //設(shè)置空閑狀態(tài)下互補(bǔ)通道輸出極性
timer_channel_output_config(TIMER1, TIMER_CH_2, &timer_ocinitpara); //初始化結(jié)構(gòu)體
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_2, 0); //設(shè)置占空比
timer_channel_output_mode_config(TIMER1, TIMER_CH_2, TIMER_OC_MODE_PWM0); //設(shè)置通道比較模式
timer_channel_output_shadow_config(TIMER1, TIMER_CH_2, TIMER_OC_SHADOW_DISABLE); //失能比較影子寄存器
timer_auto_reload_shadow_enable(TIMER1); //自動(dòng)重載影子使能
timer_enable(TIMER1); //使能定時(shí)器
}
void InitPWM(void)
{
ConfigTIMER1ForPWMPB10(599, 999); //配置TIMER1,120000000/(999+1)/(599+1)=200Hz
}
void SetPWM(signed short val)
{
s_iDutyCycle = val; //獲取占空比的值
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_2, s_iDutyCycle); //設(shè)置占空比
}
設(shè)置主函數(shù):
#include "Main.h"
#include "gd32f30x_conf.h"
#include "SysTick.h"
#include "RCU.h"
#include "NVIC.h"
#include "Timer.h"
#include "PWM.h"
int main(void)
{
SystemInit();
InitRCU();
InitNVIC();
InitTimer();
InitSysTick();
InitPWM();
SetPWM(100);
while(1)
{
}
}
在KEIL中編寫好代碼后,連接板子上的GD-LINK接口
由于使用GDlink燒錄,故在"Target"標(biāo)簽頁選擇"DEBUG"為“CMSIS-DAP Debugger”
經(jīng)實(shí)測GDLINK的燒錄速度較慢,這里可以把時(shí)鐘頻率調(diào)整為10MHZ以增快燒錄速度


燒錄完成后用示波器的探頭連接PB10引腳,如圖,可以看到清晰的PWM波型

有了PWM之后,控制電機(jī)就顯得極其簡單了。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報(bào)投訴
-
PWM
+關(guān)注
關(guān)注
116文章
5869瀏覽量
225586 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3368瀏覽量
123580 -
FreeRTOS
+關(guān)注
關(guān)注
14文章
499瀏覽量
66922 -
BLDC電機(jī)
+關(guān)注
關(guān)注
7文章
237瀏覽量
22565 -
gd32f303
+關(guān)注
關(guān)注
4文章
38瀏覽量
4211
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
熱點(diǎn)推薦
基于GD32 MCU的電機(jī)驅(qū)動(dòng)方案詳解
兆易創(chuàng)新 GD32 MCU 在電機(jī)驅(qū)動(dòng)應(yīng)用上,經(jīng)過多年技術(shù)沉淀,在無刷電機(jī)和步進(jìn)電機(jī)的應(yīng)用中,形成自身完整可靠的解決方案,愿能為用戶提供更多
發(fā)表于 07-03 16:43
?8264次閱讀
電機(jī)控制基礎(chǔ)知識(shí)1—定時(shí)器基礎(chǔ)知識(shí)與PWM輸出原理
單片機(jī)開發(fā)中,電機(jī)的控制與定時(shí)器有著密不可分的關(guān)系,無論是直流電機(jī),步進(jìn)電機(jī)還是舵機(jī),都會(huì)用到定時(shí)器,比如最常用的有刷直流
GD32對(duì)Timer定時(shí)器原理的詳細(xì)講解
GD32 Timr定時(shí)器看起來比較復(fù)雜啊。一看GD32E10x 的SPEC:一個(gè)高級(jí)定時(shí)器,三個(gè)通用定時(shí)器,還有一個(gè)基本
STM32F103定時(shí)器PWM驅(qū)動(dòng)步進(jìn)電機(jī)加減速
之前學(xué)習(xí)了定時(shí)器的一些基本知識(shí),實(shí)現(xiàn)了1ms的定時(shí),本次學(xué)習(xí)定時(shí)器的PWM功能,用定時(shí)器產(chǎn)生的
GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第7章 定時(shí)器
系統(tǒng)滴答定時(shí)器一般用來提供“心跳”作用,而GD32定時(shí)器最基本功能也是定時(shí),可以設(shè)置不同時(shí)間長度的定時(shí)。
GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第8章 定時(shí)器
Modulation” 的縮寫,簡稱脈寬調(diào)制,是利用微處理器的數(shù)字輸出來對(duì)模擬電路進(jìn)行控制的一種非常有效的技術(shù)。簡單一點(diǎn),就是對(duì)脈沖寬度的控制。 GD32 的定時(shí)器除了 TIMER5 和 6(基本
GD32E230C8T6高級(jí)定時(shí)器timer0無法正常輸出PWM波形的原因?
原本想用高級(jí)定時(shí)器的中央對(duì)齊計(jì)數(shù)模式來輸出SPWM波,但是TIMER0的CH0,CH1等口,都無法正常輸出PWM波形,換成普通定時(shí)器就可以了,STM32里對(duì)于高級(jí)
發(fā)表于 07-26 06:34
GD電機(jī)驅(qū)動(dòng)底層配置—永磁同步電機(jī)控制
,可使GD32F310系列廣泛應(yīng)用于永磁同步電機(jī)控制領(lǐng)域。本文將介紹應(yīng)用于電機(jī)控制時(shí),高級(jí)定時(shí)器和ADC的配置過程。 底層驅(qū)動(dòng)配置
發(fā)表于 10-13 14:29
GD32-Colibri-F207實(shí)驗(yàn)板定時(shí)器1停止
GD32-Colibri-F207實(shí)驗(yàn)板定時(shí)器1停止,很好的GD32資料,快來學(xué)習(xí)吧。
發(fā)表于 04-21 14:24
?11次下載
電機(jī)控制基礎(chǔ)——定時(shí)器基礎(chǔ)知識(shí)與PWM輸出原理
單片機(jī)開發(fā)中,電機(jī)的控制與定時(shí)器有著密不可分的關(guān)系,無論是直流電機(jī),步進(jìn)電機(jī)還是舵機(jī),都會(huì)用到定時(shí)器,比如最常用的有刷直流
發(fā)表于 11-30 14:21
?38次下載
普通定時(shí)器輸出互補(bǔ)PWM帶死區(qū)
無刷電機(jī)。這下就需要用到互補(bǔ)PWM了。然后選型的單片機(jī)只有一路高級(jí)定時(shí)器tim1,另外一個(gè)電機(jī)的PWM
發(fā)表于 12-16 16:59
?26次下載
GD32F303固件庫開發(fā)(13)----定時(shí)器TIM捕獲PWM測量頻率與占空比
本章配置GD32F303輸出PWM,同時(shí)使用TIM測量PWM頻率和正占空比。 查閱手冊可以得知,PB11為定時(shí)器1的通道3,讓其輸出
GD32103系列電機(jī)驅(qū)動(dòng)項(xiàng)目總結(jié)
這次使用的GD系列的芯片來做電機(jī)的驅(qū)動(dòng)。然后對(duì)使用GD芯片做個(gè)總結(jié)。這次做的是一個(gè)光伏機(jī)器人項(xiàng)目。主要用在光伏板上的機(jī)器人,通過驅(qū)動(dòng)
發(fā)表于 03-17 16:21
?0次下載
利用通用定時(shí)器輸出PWM(附示例驅(qū)動(dòng)直流電機(jī))
上一節(jié)講述了時(shí)鐘樹和基本定時(shí)器的配置方法,本節(jié)先介紹通用定時(shí)器和基本定時(shí)器的差異,然后粗略講述PWM波原理,然后講述如何配置通用定時(shí)器,最后
發(fā)表于 04-03 14:56
?0次下載
基于GD32驅(qū)動(dòng)BLDC電機(jī)(1)定時(shí)器和PWM
評(píng)論