书接上回按键控制舵机,这次是不同按键发送不同pwm来设置电调的油门行程。
先放上我使用的电调样式和部分说明
pwm频率是50HZ,周期是20ms,脉宽范围是 0.8ms~2.2ms,占空比是4%~11%。
我需要设置正反转,双向模式,又担心速度太快,于是我取9.5%为最高点,7.5%为中立点。
下面展示一下部分代码:
tim.c
# include "tim.h"
void TIM2CH2_init(void)
{
//使能GPIO时钟、定时器时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能 GPIO时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能 外设时钟
//配置GPIO引脚为复用功能,即用于定时器
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //选择引脚为复用推挽功能
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //选择引脚速度
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化GPIO
//配置定时器
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period=(arr-1); //定时器周期
TIM_TimeBaseStructure.TIM_Prescaler=(psc-1); //预分频器
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //计数模式:向上计数
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //初始化定时器
//配置定时器的通道
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //打开脉冲输出
TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //有效电平设置为高状态
TIM_OC2Init(TIM2,&TIM_OCInitStructure); //初始化定时器通道1
//使能预装载
TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
//开启定时器
TIM_Cmd(TIM2,ENABLE);
}
tim.h
#ifndef __TIM_H
#define __TIM_H
#include "stm32f10x.h"
#define arr 2000 //计数周期
#define psc 720 //分频
void TIM2CH2_init(void);
#endif /* __TIM_H */
main.c
#include "stm32f10x.h"
#include "delay.h"
#include "key.h"
#include "led.h"
# include "tim.h"
int main(void)
{
// 初始化
delay_init();
key_init();
led_init();
TIM2CH2_init();
delay_ms(100);
TIM_SetCompare2(TIM2,arr*0.095);
while (1)
{
if(Key_Scan(KEY1_PORT, KEY1_PIN) == 1)
{
GPIO_SetBits(LED_PORT,LED_PIN);
TIM_SetCompare2(TIM2,arr*0.075);
}
if(Key_Scan(KEY2_PORT, KEY2_PIN) == 1)
{
GPIO_ResetBits(LED_PORT,LED_PIN);
TIM_SetCompare2(TIM2,arr*0.055);
}
}
}
/*********************************************END OF FILE**********************/
操作步骤:
1.将电调和推进器或马达相连;
2.电调的pwm三根细线与stm32相连,此时pwm为最高点(按照说明书来的);
3.电调的电源线即两根粗的线连接电源,等待三秒(按照说明书来的);
4.听到滴滴两声后,按下按键1,将pwm转为中立点信号(按照说明书来的);
5.再次听到滴滴两声就设置完成了;
6.按下按键2,推进器或马达快速旋转,证明设置成功了;
7.正常使用时,需要把电调,马达,stm32,电源,全部连接,然后stm32发送pwm,电调就会对应的旋转了。