STM32:利用PWM波控制電調(diào)過(guò)程和注意事項(xiàng)
在進(jìn)行模型控制的過(guò)程中,如四旋翼無(wú)人機(jī)等,需要用到電機(jī),這些電機(jī)需要通過(guò)電調(diào)來(lái)控制電機(jī)的轉(zhuǎn)速。在電調(diào)模塊中帶有的說(shuō)明書一般都是利用遙控器進(jìn)行控制,有些情況需要自己通過(guò)信號(hào)控制電調(diào),而非遙控器,這個(gè)時(shí)候需要用到單片機(jī)生成PWM波。
總體思路
電調(diào)的型號(hào)和種類繁多,但是大部分的原理應(yīng)該相同,這里面采用FLYCOLOR家的多旋翼無(wú)刷電子調(diào)速器進(jìn)行實(shí)驗(yàn),單片機(jī)選擇的是正點(diǎn)原子的stm32 MINI 開發(fā)版,芯片信號(hào)為stm32f103rct6。
為了快速控制電調(diào),首先需要一個(gè)生成PWM波形的程序,這里面采用的是正點(diǎn)原子中的例程。
例程中的程序是利用TIMER1 定時(shí)器生成PWM波來(lái)控制指示燈DS0的亮暗過(guò)程,首先下載程序可以看出指示燈在逐漸亮滅。因?yàn)椴捎玫腜A8作為IO口的輸出,電調(diào)的控制信號(hào)可以接在此端口上。這樣就有了一個(gè)可以生成PWM波形的程序。
1. 電調(diào)說(shuō)明注意事項(xiàng)
看電調(diào)的說(shuō)明書,說(shuō)明書中會(huì)有參數(shù)和連接方式等介紹,這些需要注意一下,重點(diǎn)看的是工作過(guò)程提示音,
這個(gè)圖是在進(jìn)行油門校準(zhǔn)和正常工作的過(guò)程通過(guò)提示音判斷每個(gè)過(guò)程是否成功,在實(shí)際使用的時(shí)候具有很好的提示作用。
注意以下問(wèn)題:
- 在電調(diào)上電的過(guò)程中會(huì)有整成工作過(guò)的提示音。
- 在進(jìn)行油門校準(zhǔn)的過(guò)程中,如果輸出上電的油門處于大油門,那么將會(huì)進(jìn)行大油門的量程設(shè)定,然后在聽到提示音過(guò)后,需要進(jìn)行小油門的設(shè)定,最終聽到油門校準(zhǔn)成功的設(shè)定之后,就可以正常使用了。
- 如果上電開始時(shí)處于最小油門,則不需要設(shè)定,直接就能工作。
2. STM32生成PWM波注意事項(xiàng)
在了解了油門校準(zhǔn)的過(guò)程后,那么如果對(duì)應(yīng)成PWM波形的控制,注意以下幾點(diǎn):
- 在控制電調(diào)的過(guò)程中,PWM的頻率50Hz,即20ms,占空比越高,轉(zhuǎn)速越快,占空比的范圍為0.8ms-2.2ms。
- 在進(jìn)行校準(zhǔn)的過(guò)程中,需要對(duì)占空比的波形進(jìn)行延時(shí),先校準(zhǔn)大油門,再校準(zhǔn)小油門,保證聽到校準(zhǔn)成功的提示音聽到再進(jìn)行下一步,在兩個(gè)油門校準(zhǔn)的過(guò)程中留好時(shí)間。
3. 程序代碼
接下來(lái)是程序代碼:
pwm.c文件
#include "pwm.h"
#include "led.h"
//
// PWM 輸出初始化
// arr 自動(dòng)重裝值 psc 時(shí)鐘預(yù)分頻數(shù)
void TIM1_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); //
//引腳復(fù)用,PA8輸出TIM1_CH1波形
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //TIM_CH1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = arr; //
TIM_TimeBaseStructure.TIM_Prescaler =psc; //
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 這個(gè)模式需要選擇PWM1 模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //
TIM_OCInitStructure.TIM_Pulse = 0; //
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //
TIM_OC1Init(TIM1, &TIM_OCInitStructure); //
TIM_CtrlPWMOutputs(TIM1,ENABLE);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //
TIM_ARRPreloadConfig(TIM1, ENABLE); //
TIM_Cmd(TIM1, ENABLE); //
}
main.c
#include "led.h"
#include "delay.h"
#include "sys.h"
#include "pwm.h"
//ALIENTEK Mini STM32?a·¢°?·?ày′ú??8
//PWMê?3?êμ?é
//??ê??§3?£owww.openedv.com
//1??YêDD?òíμ?×ó????óD?T1???
int main(void)
{
u16 led0pwmval=2900;
u8 dir=1;
delay_init(); //
//LED_Init(); //
TIM1_PWM_Init(57599,25);//=72000/(57599+1)/25=50hz 50Hz
TIM_SetCompare1(TIM1,5760);
TIM_SetCompare1(TIM1,5760);
delay_ms(1500); //
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
TIM_SetCompare1(TIM1,2880); //
TIM_SetCompare1(TIM1,2880);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
delay_ms(1500);
// TIM_SetCompare1(TIM1,2900);
while(1)
{
// delay_ms(1000);
if(dir)led0pwmval++;
else led0pwmval--;
if(led0pwmval>5760)
{
dir=0;
led0pwmval = 2900;
}
if(led0pwmval==2900)dir=1;
TIM_SetCompare1(TIM1,led0pwmval);
}
}
注意代碼中的輸出PWM1模式,然后占空比的大小為led0pwmval/57600,設(shè)定中間添加延時(shí),先可以時(shí)間長(zhǎng)一點(diǎn),然后根據(jù)校準(zhǔn)需要的時(shí)間進(jìn)行調(diào)整。
4. 波形驗(yàn)證
按照上述慚怍,這樣就可以產(chǎn)生所需要的PWM波形。
校準(zhǔn)大占空比,即大油門波形。
設(shè)定小占空比,即小油門波形。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-566325.html
最后連接上電調(diào),既可以工作,可以看到校準(zhǔn)完油門之后,根據(jù)程序轉(zhuǎn)速在逐漸變化。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-566325.html
到了這里,關(guān)于STM32:利用PWM波控制飛盈電調(diào)過(guò)程和注意事項(xiàng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!