心血來潮買了幾個(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í)測(cè)GDLINK的燒錄速度較慢,這里可以把時(shí)鐘頻率調(diào)整為10MHZ以增快燒錄速度
燒錄完成后用示波器的探頭連接PB10引腳,如圖,可以看到清晰的PWM波型
有了PWM之后,控制電機(jī)就顯得極其簡(jiǎn)單了。
-
PWM
+關(guān)注
關(guān)注
114文章
5201瀏覽量
214987 -
定時(shí)器
+關(guān)注
關(guān)注
23文章
3256瀏覽量
115461 -
FreeRTOS
+關(guān)注
關(guān)注
12文章
484瀏覽量
62422 -
BLDC電機(jī)
+關(guān)注
關(guān)注
7文章
215瀏覽量
21619 -
gd32f303
+關(guān)注
關(guān)注
4文章
38瀏覽量
3728
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于GD32 MCU的電機(jī)驅(qū)動(dòng)方案詳解
電機(jī)控制基礎(chǔ)知識(shí)1—定時(shí)器基礎(chǔ)知識(shí)與PWM輸出原理
![<b class='flag-5'>電機(jī)</b>控制基礎(chǔ)知識(shí)<b class='flag-5'>1</b>—<b class='flag-5'>定時(shí)器</b>基礎(chǔ)知識(shí)與<b class='flag-5'>PWM</b>輸出原理](https://file.elecfans.com//web2/M00/01/E5/poYBAGDKIj6Ac7_nAAC0P4eA0lg510.png)
GD32對(duì)Timer定時(shí)器原理的詳細(xì)講解
![<b class='flag-5'>GD32</b>對(duì)Timer<b class='flag-5'>定時(shí)器</b>原理的詳細(xì)講解](https://file.elecfans.com//web2/M00/3E/B6/pYYBAGJibymAOYSEAAECqMLvlv8677.png)
STM32F103定時(shí)器PWM驅(qū)動(dòng)步進(jìn)電機(jī)加減速
![STM32F103<b class='flag-5'>定時(shí)器</b><b class='flag-5'>PWM</b><b class='flag-5'>驅(qū)動(dòng)</b>步進(jìn)<b class='flag-5'>電機(jī)</b>加減速](https://file.elecfans.com/web2/M00/94/E8/pYYBAGP9nS-AAiafAAONtKFmKoY674.png)
GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第7章 定時(shí)器
GD32開發(fā)實(shí)戰(zhàn)指南(基礎(chǔ)篇) 第8章 定時(shí)器
GD32E230C8T6高級(jí)定時(shí)器timer0無法正常輸出PWM波形的原因?
GD電機(jī)驅(qū)動(dòng)底層配置—永磁同步電機(jī)控制
GD32-Colibri-F207實(shí)驗(yàn)板定時(shí)器1停止
電機(jī)控制基礎(chǔ)——定時(shí)器基礎(chǔ)知識(shí)與PWM輸出原理
![<b class='flag-5'>電機(jī)</b>控制基礎(chǔ)——<b class='flag-5'>定時(shí)器</b>基礎(chǔ)知識(shí)與<b class='flag-5'>PWM</b>輸出原理](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
普通定時(shí)器輸出互補(bǔ)PWM帶死區(qū)
![普通<b class='flag-5'>定時(shí)器</b>輸出互補(bǔ)<b class='flag-5'>PWM</b>帶死區(qū)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
GD32F303固件庫開發(fā)(13)----定時(shí)器TIM捕獲PWM測(cè)量頻率與占空比
![<b class='flag-5'>GD</b>32F303固件庫開發(fā)(13)----<b class='flag-5'>定時(shí)器</b>TIM捕獲<b class='flag-5'>PWM</b>測(cè)量頻率與占空比](https://file.elecfans.com/web2/M00/7F/44/pYYBAGOG-mCABL1OAABYRteGsss251.png)
GD32103系列電機(jī)驅(qū)動(dòng)項(xiàng)目總結(jié)
![<b class='flag-5'>GD</b>32103系列<b class='flag-5'>電機(jī)</b><b class='flag-5'>驅(qū)動(dòng)</b>項(xiàng)目總結(jié)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
利用通用定時(shí)器輸出PWM(附示例驅(qū)動(dòng)直流電機(jī))
![利用通用<b class='flag-5'>定時(shí)器</b>輸出<b class='flag-5'>PWM</b>(附示例<b class='flag-5'>驅(qū)動(dòng)</b>直流<b class='flag-5'>電機(jī)</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論