买了一个fvt无刷电调,一个N5065电机,用STM32的PWM驱动。
按说明书中设置油门行程:
***************************************
首先关闭电调开关,连接电池,再打开您的车用发射机电源,将油门通道方向设置为(REV),油门微调设置为(0),油门通
道的 EPA/ATV 正反向均设置为最大,油门在自然位。
按下 SET 键不松开,将电调开关打到 ON 位,等待 1 秒左右,电调红色 LED 闪烁并且马达发出‘滴.滴’的连续响声,这时把
SET 键松开,同时把发射机油门拉杆置自然位后按一下 SET 键会听到马达‘滴’的一声响,再把您的发射机油门拉杆拉最大
后并且按一下 SET 键会听到马达‘滴滴’的二声响,再把油门拉杆推到最小后并且按一下 SET 键会听到马达‘滴滴滴’的三
声响,红色 LED 、 绿色 LED 同时灭掉,马达滴滴滴三声响后,表示油门行程设定 OK,2 秒后开始进入电池节数检测模式。
************************************************
*号之间的为说明书中内容。
我的思路:
用PWM产生50HZ频率,通过改变占空比从而改变高电平时间。
TIM3_PWM_Init(799,1800);//PWM频率为(72000000/1800/800=50HZ)。
占空比的理解:
TIM3_PWM_Init中799,则x/800就是占空比,其中x为TIM_SetCompare2(TIM3,x);中第二个变量
网上查资料说电调最高油门为2.1ms,最低油门为0.9ms,中间油门为1.5ms,分别对应设置占空比函数:
TIM_SetCompare2(TIM3,84);
TIM_SetCompare2(TIM3,36);
TIM_SetCompare2(TIM3,60);
我在程序中这样设置:
初始化时TIM_SetCompare2(TIM3,60);即对应说明书中油门自然位。
然后有一个触发中断的按键,第一次按键后,TIM_SetCompare2(TIM3,60)中第二个参数从60逐渐增加到84(对应说明书中最大油门),第二次按键时从84减小到36,即对应说明书中最小油门。
这个过程中按说明书中顺序按set键,但是在按键调到最大油门和最小油门时都没有听到‘滴滴’的二声响和‘滴滴滴’的三声响,说明设置行程没有成功。
/*
jishu初始化为0,第一次按键,变为1,再按键变为2。
*/
int main(void)
{
u16 led0pwmval=0;
u8 dir=1;
u8 flag=0;
u8 flag2=0;
u8 flag3=0;
u8 flag4=0;
led0pwmval=36;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为115200
LED_Init(); //LED端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
TIM3_Int_Init(799,1800);
EXTIX_Init(); //外部中断初始化
LED1=0;
TIM3_PWM_Init(799,1800);//PWM频率为(72000000/1800/800=50HZ)
TIM_SetCompare2(TIM3,60);
USART_SendData(USART3,0x55);
while(1)
{
if(jishu==1)//高60-84
{
if(flag2==0)
{
while(1)
{
if(flag_20ms==1)
{
flag_20ms=0;
if(led0pwmval<84)led0pwmval++;
TIM_SetCompare2(TIM3,led0pwmval);
if(led0pwmval==84)
{
flag2=1;
USART_SendData(USART3,jishu);
break;
}
}
}
}
}
if(jishu==2)//低84-36
{
if(flag3==0)
{
while(1)
{
if(flag_20ms==1)
{
flag_20ms=0;
if(led0pwmval>36)led0pwmval--;
TIM_SetCompare2(TIM3,led0pwmval);
if(led0pwmval==36)
{
flag3=1;
USART_SendData(USART3,jishu);
break;
}
}
}
}
}
}
}