五线接口舵机

 

§01 众号留言


  留言1:卓老师,我是带着感情来指导学生参加这个比赛。

  我对于博思宇的越野车模被怼,感到

  留言2:卓大大,能不能出一个K车舵机电机讲解呀!新手上手K车有点难欸。

  留言3:卓大大你好,能不能和K车厂家沟通一下,让他们出售舵机单品,舵机坏了就要换车代价太大了。

▲ 三种不同的舵机
 

 

§02 机接口


  今年参加室外越野组比赛的队伍,部分选择了广东博思公司提供的K车模。K车模体积大,速度快,但是它的转向舵机与常见到的三线舵机不同,它的接口是五根线。普通的三线舵机接口包括电源线,底线以及控制信号线,工作电压一般在4.56V之间。输出转角与控制信号脉冲宽度(10002000us)成正比。

  舵机的驱动和位置反馈电路都已经集成在舵机内部。

▲ 普通的三线舵机是依靠脉冲宽度控制输出转角
 

  K车模舵机的接口是五根线,其中包括有驱动马达两根引线,位置电位器三根引线。内部就不再包括有驱动控制电路。

▲ K车模的五线接口
 

  下面是将K车模舵机拆开以后的内部结构。最后面的电路板上仅仅承载着马达和位置电位器,没有其他的电路元器件。

▲ K车模内部结构
 

  如果不拆开舵机,如何判断接口的五根连线的功能定义呢?

  可以通过万用表测量端口各引线之间的电阻判断引线的功能定义。

  根据这五根连线之间的连通关系,可以将它们分成两组。一组是黄线和黑线,之间的电阻大约为2.6欧姆左右。这应该是连接马达的两根引线。

▲ 测量舵机五根连线之间的电阻
 

  另外一组引线之间的阻抗在4.8K以内,根据它们的电阻数值关系,可以分辨出它们连接到位置电位器的三个接头的关系。

▲ K车模接口定义
 

  舵机内部马达的输出通过减速齿轮控制舵机的输出轴,同时经过另外过渡齿轮驱动位置电位器。电位器转动有机械极限位置,这也决定了舵机输出转角有机械机械位置。

  如果电机在控制过程中,力矩过大,并且没有进行位置反馈,则容易将位置电位器拧坏。

  将舵机位置电位器的三个引线接入直流电压源,使用测量滑动端的电压变化,可以知道位置的反馈信息。

▲ 连接位置电位器引线
 

  控制舵机中马达两端的电压(正负1V),可以观察到舵机输出轴的转动,同时位置传感器上的电压随着转动角度线性变化。

  当输出角度到达机械极限的时候,舵机就会被位置传感器卡住,停止转动。

▲ 舵机转动与位置传感器滑动端的电压变化
 

  电机在5V电压驱动下,转动时的电流大约为75mA,功率很小。

  但是当电机转动到极限位置,被卡住之后,电机的堵转电流就会超过500mA。这个电流会随着工作电压的升高而变大。

▲ 观察舵机工作电流和堵转电流
 

  使用五线引脚的K车模舵机,需要自行制作驱动电路。这虽然增加了制作的难度,但也给如何提高舵机性能留出了设计空间。

  舵机控制一个典型的位置反馈的运动控制问题。对于初学自动控制专业的同学来讲,实现五线舵机的位置控制可以将经典的PID理论认识清楚。这个控制问题和智能车的方向控制、速度的控制原理都是一样的。

  根据前面测量,舵机马达工作电流较小,设计舵机控制电路中的马达驱动芯片可以选用体积较小的电机驱动芯片。

▲ A4950电机驱动芯片
 

  手边正好有A4960电机驱动芯片。它的输出峰值电流可以允许3.5A,工作电压范围7.5~40V。如果车模使用镍镉电池(7.2V),驱动它有点困难。考虑到外部越野车膜大都是用高压的锂电池,所以它比较适合K舵机驱动电路设计。

▲ A4950芯片管脚定义
 

  为了达到A4950输出功率范围,在它的数据文件中还给出了PCB的参考设计方案,A4950消耗的功率所产生的热量可以通过芯片底部金属衬底引至电路板上的铜层进行散热,保证了芯片工作的热稳定性。

  A4950参考PCB参考设计

  A4950可以通过一组互补的PWM波形完成对于电机的正反转控制。数据手册中给出了为了抑制EMC,芯片工作电源上所需要的滤波电容的参数。

  A4950另外一个优点就是提供输出电流保护以及热保护。通过LSS端口的电流采样电阻,可以设置芯片输出的最大电流值。比如在VREF = 5V的情况下, 电流采样电阻Rs=0.25欧姆,最大输出电流就被限制在2A左右。

▲ A4950驱动电机的电路
 

  最大输出电流的限制对于舵机工作的安全非常重要。不论是舵机输出转角超过的机械极限被卡住,还是舵机的负载过重都会造成马达工作电流过大,如果没有电路的保护,则容易造成舵机马达烧毁。

  对于舵机位置控制,可以使用经典的PID反馈控制完成。可以利用车模上MCU富余的PWM端口,AD端口,配合MCU软件算法完成舵机的位置控制。

▲ 测试电路以及控制舵机的转动
 

  下面利用一个STM32F030单片机制作了一个简单的控制电路,完成对于舵机的位置控制实验。

  使用PID控制舵机,需要对于PID参数进行整定。这部分可以根据控制对象的近似线性模型通过优化的方式获得。也可以根据舵机转动通过手动方式逐步确定。

  通常情况下先确定PID控制中的比例系数P。下面动图显示了P参数从0.01变化到2.0过程中,输入指令为阶跃给定(从500跳变到2000)舵机中位置电位器输出电压的采集曲线。

▲ P参数对于舵机控制影响
 

  从上面实验过程可以看到,当比例参数大约0.3.之后,位置输出就会出现一定的过冲。随着P增大到一定程度,输出就会出现明显的振荡过程。这个震荡是有马达转子的惯性引起的。

  舵机的控制电压决定的输出转角的速度,与输出位置之间是积分关系。本质上讲,只是用比例控制,就可以达到位置无偏控制。但是考虑到马达转子电枢的电阻(2.5欧姆)的影响,再加上驱动电路的限流,所以在舵机负载比较大的情况下,在比例P参数比较小的时候,输出位置会有一定的误差。

  所以增大P,使得控制有一定的过冲可以减少最后位置输出的误差。

  如果PID中,只是引入积分控制,此时控制系统形成两阶的积分关系。负反馈就会引起系统输出振荡。

▲ 只在积分反馈下舵机在周期振荡
 

  为了抑制振荡,所以反馈控制中的比例项不能够为0。下图显示当PID控制中的P=0.5,积分项的系数从0增加到0.003的时候,舵机的阶跃响应。

  随着积分系数增加,系统的振荡越来越严重,阶跃响应的上升速度并没有增加。

▲ 在PI控制下舵机的阶跃响应
 

  因此,提高舵机的响应速度,减少输出振荡,不能够使用PI控制。

  引入位置的微分反馈量,可以有效抑制输出振荡。下面的实验显示了在P= 1.0的情况下,引入位置反馈的微分项,微分D参数从0变化到10, 输出振荡就会大大减小。

▲ 舵机在PD控制下的阶跃响应
 

  实验中,当微分系数大于10之后,由于位置模拟量中存在着噪声,在微分项的作用下,舵机中产生了较大的高频噪声,同时静态工作电流也会增加。

  根据前面实验结果,PID中,P取值0.5~1; I 取值为0; D取值5~10,就可以达到比较好的控制效果。

  在确定好PID参数之后,还如何提高舵机的响应速度呢?

  如果再想提高舵机的响应速度,只有通过提高工作电压以及工作电流来实现。下面的实验显示了舵机工作电压从7.6V变化到10V的过程中,舵机的单位阶跃响应。

▲ 工作电压对于舵机阶跃响应的影响
 

  实验中可以看到,在相同的PID控制参数的作用下,随着工作电压的升高,舵机的响应速度也随之增加。

  因此,控制电路中,在保证舵机的最大限流满足安全的情况下,驱动电压越高,舵机的响应速度就会越大。

▲ 舵机在PID参数不合适的情况下的输出相应
 

  舵机的控制最终是通过MCU实现的离散控制。控制周期Ts对于输出有一定的影响。在通常情况下,可以将离散控制中的采样时间等效成一个时间常数为0.5Ts的一阶过渡过程,因此随着控制周期的增加,就会引起输出中的振荡。

  下面实验显示了控制周期从1ms增加到130ms过程中,舵机在PD控制下的阶跃响应。

▲ 控制周期对于舵机响应的影响
 

  从上图中可以看到,当控制周期Ts小于50ms时,舵机的输出相应大体都相同。当Ts大于50ms,输出中过渡过程的振荡明显增加了。

  因此对于舵机的PID控制,只要控制周期小于50ms,比如选择20ms,可以达到比较满意的效果。由于控制频率较低,实现PID的运算对单片机的计算量增加非常小。

  在网络上关于舵机控制的解决方案很多。自行实现舵机的控制,不仅对于初学者可以提高专业的技术水平,同时也可以提高舵机的安全性能。

▲ 磕头智能车
 

  最后回复前面同学的提问,关于舵机的损坏,除非是舵机机械上的缺陷,否则,对于舵机的烧毁现象只能是说明在舵机的驱动上没有做好安全保护。

  就像带着感情指导参赛学生的杨老师在前面所讲,学生对五线舵机的抱怨实际上是对其不了解所致。

  也希望参赛的同学们,在碰到舵机损坏的过程中,能够吃一堑长一智。激发自己探究的好奇心,在解决问题的过程中,增强自己的学识和技能。

▲ 比赛中路障会固定死的,
 
### STM32 控制 5线舵机与3线舵机的区别 #### 舵机结构差异 三线舵机通常由电源、信号和地线组成,而五线舵机除了这三条基本线路外还增加了反馈信号线以及额外的供电线。这种设计使得五线舵机能提供更精确的位置反馈功能[^1]。 #### 控制原理区别 对于三线伺服电机而言,其工作模式主要依赖于PWM (脉宽调制) 来调整角度位置;而对于具备闭环特性的五线版本,则不仅依靠PWM指令来设定目标方位角,还会利用内置编码器产生的回授数据校正实际转动情况以达到更高的精度要求[^2]。 ```c // 配置定时器用于生成 PWM 波形 TIM_HandleTypeDef htim; void MX_TIM_Config(void){ __HAL_RCC_TIM_PWM_CLK_ENABLE(); htim.Instance = TIM_PWM; htim.Init.Prescaler = PRESCALER_VALUE; htim.Init.CounterMode = TIM_COUNTERMODE_UP; htim.Init.Period = PERIOD_VALUE; HAL_TIM_PWM_Init(&htim); } ``` #### 编程接口对比 当使用STM32微控制器驱动这两种类型的设备时,在软件层面的主要不同体现在是否需要处理来自五线型产品的传感器输入上。针对前者只需简单配置好相应的PWM通道即可完成操作;后者则可能涉及到读取SPI/IIC总线上连接着的角度传感芯片所传来的数值并据此作出相应动作调节[^3]。 ```c // 发送 PWM 信号给舵机设置角度 uint8_t setServoAngle(TIM_HandleTypeDef *htim,uint16_t angle){ uint32_t pulse_width = map(angle,0,180,PULSE_WIDTH_MIN,PULSE_WIDTH_MAX); // 将角度映射到对应的占空比范围 __HAL_TIM_SET_COMPARE(htim,TIM_CHANNEL,pulse_width); } // 对于支持反馈的五线舵机还需要定期获取当前位置信息 float getServoPosition(){ float position=0.0f; /* 假设通过 I2C 或 SPI 接口从外部传感器获得 */ return position; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值