本文大略先容在舵机中的直流电机掌握事理和方法。下图是掌握器事理图,单片机选择stm32f030,驱动选择fm116b,ldo为lp2992,这个可以任意选择兼容的芯片,电压反馈端用tl431进行分流稳压,确保反馈电阻器供电电压的稳定。
舵机的事情事理很大略,处理器实时获取电阻器的ADC值来打算获得当前的角度,如果与预期的角度同等,就不做任何操作,保持当前状态;如果与预期角度不同,就打算出当前角度与预期角度的差值,然后通过PID算法打算出掌握量,根据掌握量输出PWM掌握电机旋转,随着电机旋转,实时角度会越来越靠近预期值,掌握输出也会越来越小,直到末了为0,就转到了预期的位置。

本方案通过I2C接口获取掌握命令,可以实现比传统仿照办法更多的功能。
PWM1和PWM2掌握电机转速和方向,当PWM1输出高电平而PWM2输出低电平便是正转,反之便是反转,如果二者都输出低电平就停滞。
ADC值须要标定,确定舵机角度为0和180时的ADC采样值,这样才能通过比例打算出任意ADC值对应的角度。
PID这里,ADC得到的角度减去预期角度便是角度差,乘以比例系数构成比例项;角度差的和乘以积分系数构成积分项,积分项要设置上限,防止该值过大影响相应速率;本次角度差与上一次的角度差的差乘以微分系数构成微分项(这里用固定的韶光采样,dt固定,故不须要打算变革率了)。三者之和便是预期的输出值,再根据输出限定得到终极的输出值,该值可正可负,把稳变量选取要得当。
详细的代码可以查看:
https://github.com/gcrisis/ElectronBot/tree/trans_blocking/2.Firmware/ServoDrive-fw-ll









