单片机(STM32)驱动无刷电调

单片机(STM32)驱动无刷电调

本文为记录个人学习过程中的心得,方便未来复习,同时也是为其他小伙伴学习提供便利,本人由于精力有限,留言不回复,请见谅。如有侵权,联系本人进行删除。

做过一个小的课题,需要用到单片机驱动无刷电调,对无刷电机进行调速。目前手头上材料为新西达30A电调+新西达A2212电机+STM32F103。

硬件

无刷电调

电调又叫电子调速器,输入是直流(两线,红正,黑负),可以接稳压电源,或者锂电池。一般的供电都在2-6节锂电池左右。输出是三相脉动直流,直接与电机的三相输入端相连。

如果上电后你的电机反转,你只需要把这三根线中间的任意两根对换位置即可。

电调还有一根信号线连出,用来与接收机连接,控制电机的运转,连接信号线得共地。红线接5V,棕色线接GND,橙色线接信号线,PWM信号周期20ms即50HZ。

单片机(STM32)驱动无刷电调_第1张图片
我用的此款电调商家给的介绍输入4-16V,输入电压超过18伏不予启动,自动保护,同时发出急促的“哔哔”告警音。

软件

使用的是STM32单片机,用STM32cube MX生成的PWM信号,这里有个小细节,用定时器生成PWM信号时用PWM1方式,极性高。确保当定时器开始生成PWM波时先出现高电平。

单片机(STM32)驱动无刷电调_第2张图片
单片机(STM32)驱动无刷电调_第3张图片
因为生成50HZ(20ms)方波信号。定时器PSC为71,ARR为20000-1,向上计数,详情见上图。

在MAIN函数进行定时器初始化完成后,使用下面代码进行电调解锁

	HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);//开启PWM
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4,2000);//BB响两声
	HAL_Delay(4000);//延时4S
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4,1000);//BBB响三声
	HAL_Delay(4000);
	
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4,1049);//起飞
	HAL_Delay(2000);
// An highlighted block
	HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4,2000);//BB
	HAL_Delay(4000);
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4,1000);//BBB
	HAL_Delay(4000);
	
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4,1049);//起飞
	HAL_Delay(2000);

开启PWM,产生信号,设置PWM高电平时间为2MS(占空比10%,2000 X 10%=2000),此处为电调检测油门最大的地方。等待4S,给电调读取接收信号的时间,延时过短的话,电调不能正常的接收信号,不能解锁。然后设置PWM高电平时间为1MS(占空比5%,20000 X 5%=1000),延时4s,此时电调BBB响,这时候电调就解锁了,占空比不要设太大,很危险,亲身体会,我实验发现我设为1049,占空比1049/20000,电机才转动。

总结一下,信号周期20ms,高电平2ms,BB响,延时4S,高电平1ms,延时4S,BBB,解锁起飞,设置1049电机才开始转动

你可能感兴趣的:(单片机,stm32,嵌入式)