飞思卡尔感想.docx
《飞思卡尔感想.docx》由会员分享,可在线阅读,更多相关《飞思卡尔感想.docx(12页珍藏版)》请在冰豆网上搜索。
飞思卡尔感想
主讲人:
汪超
哈尔滨工业大学航天学院控制科学与工程系自动化专业
wangchaohit2011@
QQ:
893051481
欢迎与各位交流
光电组
•特点
•巡线原理
•软件模块
•特点:
1原理简单,数据量少,方便处理
以光电之星二队为例,小车整体有23个激光发射管,却仅仅只有8个接收管,而且这8个接收管直接输出0或1,XS12经过滤波可以立即判断黑线的位置。
整个过程无需经过A/D或者D/A转换;
2赛道适应性差
数据量小一方面有利于程序处理,另一方面,在高速行驶中,碰到S弯、上下坡、虚线时常常由于数据量的不足而丢失视野,只能通过算法的改进来进行处理,这就限制了速度的进一步提高;
3传感器模块不易维护
激光发射器焊接时容易静电烧毁;安装好之后,由于震动、碰撞或者人为不小心触碰容易使激光打偏,不能在地上连成一条直线;巡线激光板子以及摇头舵机使得小车整体重心提升,为使整车重心以及总重下降,需要在其他不分的机械上精打细算;
4烧钱
激光发射管和接收管淘宝单价均为8.5元/个,而且由于用量大、易烧毁(暗)的缘故需时常更换;电路板数量多;与其他组相比多一个摇头舵机;一学期下来平均每两光电车耗费3000+左右;
•巡线原理
巡线激光板:
激光巡线原理图
发射部分:
激光发射管
74LS138译码器
PNP三极管
OUT5低电平——PNP三极管导通——激光发射;OUT5高电平——PNP三极管截止——激光熄灭;
接收部分:
接收管
(常态高)
滤波旁路电容
接收管收到激光——A_RE1输出低电平——LED导通发光;
接收管没有收到激光——A_RE1输出高电平()常态——LED截止不发光;
输入XS12处理
调制管
XS12控制引脚
调制电阻
调制管:
与调制电阻匹配输出调制波形,控制74LS138译码器的通断,调制管产生固定频率的方波,使得发出的光是一定的频率,接受管只接受这个频率的光,从而有效把背景杂光过滤开来;
74LS138译码器:
AA0
AA1
AA2
结果
点亮激光编号
0
1
0
OUT1
0,5,10
0
1
1
OUT2
1,6,11
1
0
0
OUT3
2,7,12
1
0
1
OUT4
3,8,13
1
1
0
OUT5
4,9,14
其余
全部熄灭
之所以从010开始编号,是因为贴片74LS138译码器的0号和1号输出始终为高电平,故就近连接VCC。
•软件及算法
•I/O模块
•PWM模块
•PIT模块
•SCI模块
•Timer模块
•………..
I/O模块
I/O模块主要是在调试的时候显示一些信息,方便调试,比如车在检测上下坡的时候,上坡可以让灯亮,下坡灯灭,方便调试。
注意的地方:
EachpinexceptPE0,PE1,andBKGDcanactasgeneralpurposeI/O.Inadditioneachpincanactasanoutputorinputofaperipheralmodule.
手册中有说明引脚PE0,PE1和BKGD3个引脚是不能当做通用I/O口的,在编程的时候要特别注意。
PWM模块
voidPWM_Init(void){
Steering_PWM_Init();
Yao_PWM_Init();
Motor_PWM_Init();
}
PWM模块主要是驱动两个舵机,一个电机。
PWM模块的初始化都是比较固定的,是初始化的时候比较重要的是初始化输出的周期。
舵机在使用的时候推荐是工作在50HZ,4.8~6V,但是为了提高舵机的响应速度,我们在用的时候工作频率是100HZ,电压是6V。
起初舵机是直接跟电源电压相连的,后来我们做的过程中总是烧舵机,然后改到了6V,不过,舵机坏的还是挺多的,可能不是电压原因,后来调试的时候舵机总是出现打死的情况,分析应该是静电的原因,导致单片机程序跑飞,舵机打死。
我们对此做过一些尝试,想解决静电复位的问题,首先是将PE0,PE1强制拉高,然后把中断是不和PE1,PE0相连,其中PE0(PortEInput,non-maskableinterrupt)是不可屏蔽的中断。
PWM使用中还要注意的是调整舵机中值的时候,尽可能让高电平时间1.5ms的时候,舵机调整在中值,这样可以保证舵机出力最大,因为舵机内部是根据PWM的高电平时间来决定舵机位置的。
还有就是给PWM值的时候,注意限制最大和最小值,特别是舵机,因为转向舵机偏转太大,转弯的时候会把车轮卡住,影响转向。
注:
此处说到转向问题,说下当初我们调试的时候遇到的问题,当初我们车在跑的时候在直道上速度挺快的,但是一到弯道,速度不管加多大就是提不上去,后来发现是车在转弯的时候,由于前轮机械问题,阻力非常大,而电机驱动力又不够,所以速度总是提不上去,后来通过调节前轮的机械,速度就提上去了。
转向还有一个问题,就是调试过程中可能会出现车子上下颠动的情况,这一般出现在转弯过程中,这原因我们总结了下,应该是因为转弯的时候,转向舵机PWM值给的太离散了,后来改变转向舵机的P值,颠动的情况基本上就消失了。
电机PWM调试注意:
刚开始我们调试电机的时候,调试过程中车跑起来声音非常大,一直没注意过,后来有一次调了下后轮齿轮之间的间距,声音马上就轻柔了,即使是最大速度的时候,声音也很柔,所以在调试电机的时候,一定得注意机械上的问题。
此处电机调速还有个问题,为了能够快速的加减速,电机调速周期最好短点,我们程序中电机是每隔10ms调整一次,与其他队交流的时候,像哈工程的摄像头是美1ms就调整一次速度了,所以注意电机调整周期,对快速的加减速是很有帮助的。
PIT模块
PIT模块主要是定时中断,用来周期性的调节。
Timer模块
码盘有3路输出,A,B路
然后通过一个异或门
此处输出OUT,在硬件上实现了一次倍频,然后软件在设计计算脉冲数的时候,初始化为捕捉上升沿和下降沿,这样在软件上也实现了一次倍频,那加上硬件上的一次,一共就是4倍频,我们买的500线码盘,那经过软件和硬件倍频后就是2000线了。
此处倍频的时候注意:
我们当初调试的时候,用示波器看输出波形,发现在匀速的时候经过异或门输出的波形不是等间隔,就是时常出现错误,通过串口发送码盘测得的脉冲数52,54,52,53,51,52,90,54…..这种情形,90这种坏数据,刚开始以为是码盘不好,后来发现是经过异或门后出现了错误,不过异或门效果就很好,数据不会出错,后来我们怀疑是异或门速度跟不上的问题,所以在选取异或门的时候要选取高速的。
数据采集
赛道信息的提取在整个系统中占据着极其重要的地方,只有保证赛道信息的准确,后续的处理控制才能进行。
编号
一个说明图
此处点亮激光是分时点亮,一共15个激光,5个接收管,分为5组,每组3个,将激光分为编号,从1到15,那么激光点亮顺序是
1,6,11
2,7,12
3,8,13
4,9,14
5,10,15
此处举一个例子来说明如何判断赛道信息。
假设现在时3,8,13号激光点亮了,并且黑线在8号灯下面,那么此时1,5好收管应该是亮,而2,3,4则是灭的。
主要是要保证互不干扰。
提取黑点的方法
我在软件中提取黑点的思想是数连续黑点的个数,示意如下:
上图中就可以发现只有一段连续的黑点,并且黑点的个数是2个,此时说明检测信息正确,在检测黑线的时候,同时记录下起始黑点和结束黑点,上图中起始黑点是7,结束是8,那下次再检测黑点的时候,就在7,8号激光左右两边个COUNT个激光的范围内进行检查,这样可以滤掉错误的信息。
譬如上图中如果1号激光误检测了,则可以在软件上进行修正。
对赛道信息的处理还有很多细节的地方,到调试的时候才会发现问题,到时可以再继续优化检测措施。
激光权值,即从1号到15号激光分别赋予了不同的权值,如下图,
然后根据激光的位置,就可得到一个对应的权值,如上图所示,对应的权值就是17.
而中间的激光对应的权值是16.
摇头舵机的控制
摇头舵机控制的目的是使黑线能在一排激光的视野内,即每时每刻都能保证提供正确的位置信息。
舵机在转动的时候是应用了步进的思想,舵机的转动是以步进的形式累加上去的,程序上只要确定每个点照到黑线上时对应的步进值。
当然,最靠近中点的光点的步进值就越小,而距中心最远的光点的步进值就最大。
这种想法可以用增量式PID来实现。
舵机的控制大概就是这样的。
转向舵机控制
上图大概画了下偏心距的概念,我在计算的时候忽略了摇头转向带来的激光打在地上的前后位移,假设激光摇头只带来左右的位移,而不带来前后移动,从而计算出激光中心偏离车身中心的距离。
实际上
偏心距=摇头带来的偏离+激光检测距中心距离
得到偏心距后我又计算了下转向所需的园半径,具体的计算步骤在基于单排光电管智能车的算法研究有说明,可以看上面的分析。
制作过程中还会遇到很多细节的问题,以后大家调试过后,可以再交流。