PID舵机巡线

该文章主要讲述了PID红外循迹的思想

摘要

相比于市面上较多的常见的红外循迹模块,该文章讲的是模拟量输出的红外循迹模块,如果用的是数字量输出的,则所可以用的信息就会大大减少,只有0、1两种情况,也无法进行pid控制若用模拟量输出的红外循迹模块,用12位ADC采集则会有0~4095一共4096种情况,这点很重要。
最常规的循迹就是三个数字量输出的红外循迹模块组合成- - -的形式,若为黑色,则输出引脚高电平,模块灯熄灭,且ADC最大,数字量输出为1,即若检测到为001则就是小车偏左了,最右边那个传感器移动到黑色地方变成1了。
在这里插入图片描述

在这里插入图片描述

注意事项

调试过程中发现,这样的循迹模块虽然硬件结构上简单成本低,但是需要的条件较苛刻。
1,首先左右传感器相距大约3cm,要想输出的Data线性效果好,就要选择宽度为3cm的黑线,或者2*1.5cm的黑胶布,这样左右传感器的曲线才会符合分析,否则输出效果不理想,pid控制时也不准确。 小车即传感器如下,小车从左往右移动经过黑线,先是右传感器先达到黑线,此时AD值达到峰值,其次中间传感器,左边传感器。
看了程序后,应该是右传感器的峰值就是右峰值,程序中的Data是左边传感器-右边传感器,但是原文这幅图似乎有些问题,但是总体思路还是值得借鉴的,就是将三个传感器的AD值转换成线性输出,通过线性的AD值来表征小车相对黑线所处的位置,然后用PID控制舵机转向

传感器
左。 中。 右。

|——————|。。。。。。。|||||黑线
|。。小车。。 | 。。。。。。.||||||
|——————|。。。。。。。||||||
在这里插入图片描述2,实际测量的波形如下图,总体来说基本能满足预期
在这里插入图片描述3,Left_Span和Right_Span是指的当右传感器达到峰值时,左传感器此时并不是为0,而是有一定的值,所以在左右传感器中间交叉那段相减后,为一条线段,左端点并不是Left_Max-Right_AD(0)=Left_Span了,而是比Left_Max稍微小些。

4,相比于摄像头,红外循迹还是次了些,但是这种对数据处理方式仍然值得学习

5,程序总体来说,首先编码器电机初始化,速度还是开环跑,低速情况下关系不大,其次adc初始化三路采集红外AD值,然后track调试参数最后输出Data线性AD值(我调的是从左到右经过黑线,AD值从-9000变化到+9000),接着舵机初始化,20HZ时间基准,0.5ms—2.5ms脉宽时长控制电机,最后串口3蓝牙调试

6,舵机先调至90°位置,1.5msPWM即可,(1100/7200)*10ms=1.5ms,arr7199,psc99,100HZ,10ms,然后要摆正小车前轮,装上舵机转向轴,在1100中值上加减方向环PD输出量,注意限幅±300,AD量数量级为千,预期200,P值设置为0.5,I值还没调试,I要比P小得多可以忽略

7,先是配置好底层驱动,初始化好所用的外设,ADC,USART,TIM,然后就是对于传感器采集回的数据做处理,常用滤波算法有,一阶滤波,中位值平均滤波,滑动平均滤波,这里算法很重要,不同赛道对应的PID参数不同,直道和弯道的PID参数也不尽相同,可以用分段if判断error偏差的值来调整PID参数

  • 1
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值