pwm模拟遥控器驱动电调控制无刷电机

目录

1.前言

2.操作全程

2.1输出pwm信号

2.2硬件部分

2.3电调校准

3.启动

4.总结

1.前言

我们小伙伴是不是都遇到到过我们的无刷电机买回来,上电,并且给了正确的pwm超,但是电机就是不转动。我也遇到了这个问题,不过最后还是让我蒙对了,哈哈。下面开始我们的操作。本人学识尚浅,如果有什么不对的地方,还望各位大佬们指导。(还有就是我对文章使用功能还不是很了解,往各位小伙伴多多包涵)

2.操作全程

2.1输出pwm

我们需要关注两个关键词:

1.pwm的频率、周期。

2.输出最大、最小pwm信号脉冲宽度。

一般电调频率50hz左右(20ms),最大脉冲宽度4%-11%(0.8ms-2.2ms)。(这个是我设置的参数)

(因为我们是模拟遥控器来控制无刷电机,所以最大最小脉冲宽度的设置是为了电调确定pwm的量程)

那么现在我们进行第一步生成一个50hz(20ms)的pwm先,下面生成代码部分(大家可以自己写):

void PWM_Init(void)
{
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	TIM_InternalClockConfig(TIM2);
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 1000 - 1;		//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 1440 - 1;		//PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;		//CCR	0-ARR
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;		//CCR	
	TIM_OC2Init(TIM2, &TIM_OCInitStructure);
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;		//CCR	
	TIM_OC3Init(TIM2, &TIM_OCInitStructure);
	
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;		//CCR	
	TIM_OC4Init(TIM2, &TIM_OCInitStructure);
	
	TIM_Cmd(TIM2, ENABLE);
	
}


void PWM_SetCompare1(uint16_t Compare)
{
	TIM_SetCompare1(TIM2, Compare);
}

到第二步,把最大、最小脉冲宽度先确定好,并用三个按键(两个按键也行)控制mcu输出最大脉冲宽度、最小脉冲宽度和增加脉冲宽度的pwm信号,下面生成代码部分(大家可以自己写):

//按键部分
void Key_Init(void)
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 |GPIO_Pin_9 | GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}

//主函数部分
void main(void)
{
    while(1)
    {
        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_8) == 0)
        {
	        PWM_SetCompare1(110);//输出最大脉冲宽度
        }
        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9) == 0)
        {
	        PWM_SetCompare1(40);//输出最小脉冲宽度
        }
        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_10) == 0)
        {
        	PWM_SetCompare1(40+i);
	        i=i+10;
        }
    }
}

如果条件允许还可以拿示波器先看看自己输出的波形对不对先,再进行下面的步骤,下面是我上电前测试的图片:

最小脉冲宽度:

最大脉冲宽度:

2.2硬件部分

第三步接线:

注意:一定要电调跟单片机共地(你可以拿电调给单片机供电).

现在开始连线,注意不要接反就行。

一般电调

输入有两根电源线(大大的那两根),接电调允许内的电压。(可以问商家,几s的)

还有三根小小的线,黄色一般为pwm信号线,中间那根红色线为输出5v电源线(注意是输出5v),最后那根是地线一般是棕色或者黑色(注意是输出)。 

还有另外三根接无刷电机,任意接,如果发现无刷电机转动方向反了可以把任意两条调换位置。

2.3电调校准

第四步:

注意:不要带桨叶测试,非常危险。

1.先让单片机输出最大脉冲宽度的pwm。

2.然后给电调上电,注意听声音,如果电调发出嘀嘀两声(那么油门最高点确认成功)。

3.再用按键输出最小脉冲宽度的pwm。

4.然后听声音,听到嘀嘀嘀三声(那么油门最低点确认成功,2S二声,3S三声)。

5.最后就是按按键让pwm脉冲宽度逐渐增大,无刷电机转速对应的增大了。

(然后以后上电只需要从最小油门开始启动电机就行了)

4.总结

1.保证输出pwm信号的mcu与电调的地线要共地,因为需要mcu和电调要有基准电压。

2.电调如果一直有规律的滴滴滴,那么说明pwm输入的频率不对,或者没有给pwm。(当然也有可能给的pwm是正确的,但是单片机跟电调没有共地)

还有就是不要带桨叶测试,非常危险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值