9月10日~13日开始了为期四天三夜的电子设计竞赛省赛。
江苏赛区本次共有6个赛题。分别是:
A—无线运动传感节点
B—单相不间断电源
C—坡道行驶电动小车
D—绕障飞行器
E—放大器非线性失真研究装置
F—非接触物体形态测量
相比于前几年的省赛题目,本次赛题类型有了较大的改动,更加接近于国赛的形式。
赛题在9日晚就提前发放了,拿到赛题后,我们组很兴奋地看到赛题中有关于小车的题目(因为之前参加的两个比赛都是与智能小车有关)。因此如果做小车,在小车的程序和机械结构上,我们有更加丰富的经验。但是,我们在比赛前并没有准备小车的材料(因为我们都认为,省赛不会有小车的题目)。经过与组员的再三商讨,我们最终确定就选择小车。
从赛题的要求上可以发现,该题的难点有以下一些:
★必须使用MSP430/MSP432开发平台。光是这点要求估计就劝退了很多队伍。但好在我们在之前的TI邀请赛中做的就是MSP432小车,因此,这个对我们组并不是很困难。
★需要对黑白间隔的方块进行循迹。之前我们做的几乎都是对纯黑线循迹,简单一点,对这种间隔的方块没有尝试过,此处算法需要改进。
★需要在不同的坡道对速度进行设定,且要求是平稳运行,这对PID调速的要求较高,需要配置合理的参数。
★小车要求在1米的路径上行驶10~20s,相当于要求速度在5cm/s~10cm/s。这个速度是非常慢的(之前在邀请赛时,我们就发现当速度较低时,小车的PID调速会非常不稳定)。我们估计是由于10ms采集编码器数据,但是由于电机转速慢,编码器输出的脉冲数非常少,无法进行有效的PID调速。因此在选择电机和编码器时,我们考虑了很久。
★循迹路线的前半段是直线上坡,对电机的性能和小车的机械结构有较大的要求,否则很难爬上较陡的坡。同时,在上坡直角转弯的时候难度也很大,很容易造成小车的打滑,导致车轮压线等。
☆1.选用我们较为熟悉的TI MSP432P401R launchpad,相比于大多数人使用的MSP430F5529LP,此开发板引脚更多,性能更强,更利于小车的开发。
☆2.我们采用四电机驱动的方式,使小车拥有更强的驱动能力,方便爬坡。(我看到有其他队伍采用后轮双驱,前轮舵机转弯的方案)电机我们选用减速比为1:90的TT直流减速电机,编码器为每圈12个正交脉冲。即单相测速时,车轮转动一圈可以获取1080个脉冲,如果采用AB相四倍频计数,即可获取4320个脉冲。车轮采用配套的直径约6.3cm的轮胎(换上了恩智浦智能车的轮胎胎皮,以增加摩擦力)。电机驱动则随便找了两个L298N驱动模块(实际上不需要这么大电流的驱动,这种TT电机电流只有100mA左右,因此在电机连接线部分,我们直接使用了杜邦线)。
☆3.红外循迹传感器采用的是和TI邀请赛类似的红外循迹模块(QRE1113),该传感器规格小,因此两个传感器之间的间距也较小,适合识别本次比赛1cm宽度的巡线。但是该传感器识别的距离非常小(约3mm),因此使用时需要十分贴近地面,好在赛题要求中没有从平地上坡的要求,否则肯定会卡到红外传感模块。
☆4.降压稳压电源模块采用了之前制作的一个LM2596和LM1117电源模块。可以输出5V和3.3V的电压。
☆5.比赛第一天加急绘制了一个底板,方便各个模块的连接,并保证稳定性。底板中还加装了蜂鸣器模块、4个按键以及两个钮子开关(分别控制电源的开关和液晶屏的开关)。
☆6.电池采用了两节800mAh,3.7V的14500电池,提供7.4V左右的供电电压。
③运行动图
小车的整体设计思路和之前TI杯邀请赛时的类似。
①主要就是通过前端的红外循迹传感器采集数据后,对其进行相应的数据处理:靠近中心则偏差较小,靠近外侧则偏差较大。(传感器检测到黑色则对应返回1,检测到不是黑色则对应返回0,主要原理是依靠传感器是否接收到发射的红外信号)
②然后利用位置偏差设置小车四个电机对应的速度目标值。例如:位置偏差反应出小车偏左侧,则对应设置减小右侧电机速度,增加左侧电机速度。偏差越大,增减的速度越多。
③确定目标速度后,便可以通过传统的增量式PID控制电机迅速稳定到设定的速度,从而实现小车稳定地巡线运行。
软硬件设计难点:
1.在使用四个电机进行差速转弯控制时,难度相对较大,最终采用左侧两个电机速度相同、右侧两个电机速度相同的方案,以减少设计难度。实际效果还可以。
2.四轮驱动的小车会略显笨重,很容易出现转弯延迟的情况,可以采用转弯时,内轮反转的方式,但是这会导致小车抖动和卡顿。为了避免此种情况的发生。我们采取:当位置偏差大于某个阈值时,小车外轮速度加到最大,内轮速度降到最小,从而实现较为及时的转弯效果。
3.对于黑白间隔的巡线,由于小车的传感器只能识别黑线,识别到白格时,可能会导致小车偏离路线。因此,我们采用:当小车检测到白格时,则采用之前的速度设置,这样就可以保证在检测到白格的情况下,小车也不会偏离路线太多。
4.对于不同的坡度,小车转弯的效果会有较大差异。比如:没有坡度的情况下,小车可以正常转弯。而坡度增加后,小车转弯时,就可能会出现向下滑动的情况,从而导致小车外轮压线。这个问题我们最终也没有很好地解决。但我们的思路是通过MPU6050来检测坡度,从而设定不同的转弯目标速度。
5.由于系统误差的存在以及坡度的影响,设定不同的运行时间,实际的结果误差不同。例如:无坡度情况下,设定时间10s,实际相差会在2秒左右;设定时间20s,实际相差会在1s以内。对此,我们解决方案是:①通过多次测量,找到对应的误差,拟合曲线加入时间和速度转换公式,尽可能减少误差。②凭借经验,设定速度。比如要求10s,我们可以依靠经验,将小车设定在8s的运行模式下。
★1.10月18日我们前往南京进行作品的测试,好在路上保护得很好,小车在测试现场装上电池后,可以完全还原实验室的运行效果。测试部分主要包括:
①10°坡度10s和15s运行;
②28°坡度10s和20s运行;
③继续增加坡度10s运行;
具体打分标准与赛题给出的要求一致。
实际测试过程中,我们所有的误差均在1s以内,但是一共有4次车轮压线的情况。最大测试坡度为45°,超出了预期的目标。(听评委老师说有队伍使用负压的方式达到了90°爬坡!)
★2.第一天进行底板的pcb绘制是十分正确的决定,通过印刷电路板,小车的稳定性有了很大的提升。但是由于“钱没有到位”(50元加急还是不够快!),导致板子在第四天才送到,前三天几乎都在盲调代码。
★3.实际编程调试过程中,我们遇到了一个之前从未出现过的问题:PID算法的输出产生了负值,但是限幅的时候却使用无符号的参数和返回类型,导致最终的输出变成很大的正值。使得电机本应低速却突然加速,从而令小车失控。在这个问题上我们卡了很长时间。最终通过串口不断调试,才发现了这个问题。
★4.这是我第三次在竞赛中制作小车,对于小车的控制算法和编程已经十分熟练。虽然赛题要求各不相同,但大体类似。也正因为如此,我已经感觉有点做腻了,之后我将要尝试更加有趣的东西。
★5.可以说,我们制作的小车是最传统,最基础的。其他大佬队伍采用负压、风扇等方式,使得小车可以跑更抖的坡度,甚至垂直跑!说不定还可以180°倒着跑。
★6.团队合作尤为重要,任何一个队员划水都有可能导致无法完成赛题,好在我们的组员都很认真负责!
★7.最后我们获得了省二的成绩,可以说略感遗憾,但也在情理之中。赛前准备不充分加上没有创新性地考虑借助外物增加摩擦力,这可能就是我们的欠缺之处。
2020年TI杯江苏省大学生电子设计竞赛——赛题+C题报告和代码(省二)