本文简单介绍在舵机中的直流电机控制原理和方法下图是控制器原理图,单片机选择stm32f030,驱动选择fm116b,ldo为lp2992,这个可以任意选择兼容的芯片,电压反馈端用tl431进行分流稳压,确保反馈电阻器供电电压的稳定,下面我们就来聊聊关于舵机驱动模块原理?接下来我们就一起去了解一下吧!
舵机驱动模块原理
本文简单介绍在舵机中的直流电机控制原理和方法。下图是控制器原理图,单片机选择stm32f030,驱动选择fm116b,ldo为lp2992,这个可以任意选择兼容的芯片,电压反馈端用tl431进行分流稳压,确保反馈电阻器供电电压的稳定。
舵机的工作原理很简单,处理器实时获取电阻器的ADC值来计算获得当前的角度,如果与预期的角度一致,就不做任何操作,保持当前状态;如果与预期角度不同,就计算出当前角度与预期角度的差值,然后通过PID算法计算出控制量,根据控制量输出PWM控制电机旋转,随着电机旋转,实时角度会越来越接近预期值,控制输出也会越来越小,直到最后为0,就转到了预期的位置。
本方案通过I2C接口获取控制命令,可以实现比传统模拟方式更多的功能。
PWM1和PWM2控制电机转速和方向,当PWM1输出高电平而PWM2输出低电平就是正转,反之就是反转,如果二者都输出低电平就停止。
ADC值需要标定,确定舵机角度为0和180时的ADC采样值,这样才能通过比例计算出任意ADC值对应的角度。
PID这里,ADC得到的角度减去预期角度就是角度差,乘以比例系数构成比例项;角度差的和乘以积分系数构成积分项,积分项要设置上限,防止该值过大影响响应速度;本次角度差与上一次的角度差的差乘以微分系数构成微分项(这里用固定的时间采样,dt固定,故不需要计算变化率了)。三者之和就是预期的输出值,再根据输出限制得到最终的输出值,该值可正可负,注意变量选取要合适。
具体的代码可以查看:
http://github.com/gcrisis/ElectronBot/tree/trans_blocking/2.Firmware/ServoDrive-fw-ll