ImageVerifierCode 换一换
格式:DOCX , 页数:46 ,大小:590.40KB ,
资源ID:6982648      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6982648.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(循迹小车程序.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

循迹小车程序.docx

1、循迹小车程序 附录程序 一、 前言-二、 小车功能-三、 元器件选择-四、 I/O分配及硬件连接简图-五、 相关模块、算法-六、 系统框图-七、 调试过程-八、 小车图片资料-九、 讲座所感-十、 实习总结- 一、 前言感谢生产实习能给我们这次实现自己想法的机会,虽然实验条件异常简陋、资金投入非常有限,总体感觉我的队友们灰常灰常给力啊,我感觉我是抱到大腿了-王威,夏青、峰哥,团队气氛非常好,大家一起讨论,一起分工研究模块,最后一起解决问题调试程序,而且是不同的组合在不同阶段解决了不同的问题,大家精诚合作,各显身手,在奋战中给大三学年画上了圆满的句号。之前我们本来商量是不是可以拿往年电子设计大赛

2、的题目过来做,如果难度太大就算只实现一部分功能也算是成功完成了,结果研究一天后发现电子设计大赛的题目需要很长时间的知识积累啊,基本上都是准备一个月以上然后开工的,后来王威提议要不我们做个小车吧,超声波测距实现自动物体追踪,控制核心采用单片机,传感器采用广泛用于避障和测距的超声波传感器,前进和后退用普通伺服电机和电机驱动模块实现。在网上选购单片机最小系统的时候,发现有一家商铺的最小系统上集成了红外模块,就想着不要浪费了,就萌生了做遥控车的想法,这样系统可以实现两个功能一个是类似于“光影魔术手”一样的物体追踪功能,一个是遥控运行功能。组队之后,我们一起讨论,从原理上进行可行性分析,最后一致讨论通过

3、,然后就分组从网上搜集相关的资料,最后周一在淘宝上确定并购买了相关的器件,周三上午收到元器件,下午我们从零开始熟悉开发环境keil uvision3、翻看器件的技术文档、搞懂模块原理及使用方法、模块的编程调试、系统功能编程调试、系统程序整合、装车、系统功能优化。这是一个发现问题和解决问题的过程,乐趣也正在于此,我们相信一切问题皆有解决的方法,我们队员四个克服种种困难最终实现了既定的系统的功能,并且在找到带有舵机新车后添加了转弯功能,实在是意外之喜。 二、 小车具体功能1、小车系统功能简述接通电源后,按下开机键,小车进入模式选择状态,按左三角键进入(超声波)物体追踪模式,小车可以与物体始终保持设

4、定的距离,实现与手(或其它物体)同步运动,即小车随物体一起前进后退、加速减速,同时显示当下距离值。按右三角键进入红外遥控模式,可以遥控小车前进、后退、左转、右转、剎停。在两个模式下按关机键,可以终止当前模式,重新选择功能,终止当前模式后按关机键,彻底关机,必须按开机键系统才能重新工作。控制系统方框图: 超声波测距追踪: 三、元器件选择我们做的小车所用到的器件模块除了7805芯片稳压和一些基本的开关电路,主要的模块如单片机最小系统(含红外、数码管、LED电路)、超声波模块、电机驱动模块均是从网上购买。主要原因是我们电路设计能力还不足,现在还不是拥有设计电路能力的那个人,那如果是找到别人设计好的电

5、路图然后自己买元件焊接,那么硬件电路其实就是一个体力活,失去了创新的意义。尽管硬件的焊接、调试其实也是一个比较有意思的过程,但是围着一个已经验证过功能电路团团转没有太大价值,而且我们这次生产实习的时间只有一个周多些,而且实验条件太有限,没有固定的实验室,甚至连示波器、直流电源、万用表、焊枪、螺丝刀等基本的实验条件都不能保证。我们要在短时间内实现更高的功能,就必须向硬件电路“借力”,把主要的经历放在软件调试上,硬件是“死”的,而可以把更多的想法诸如到软件中让单片机执行,以实现我们所要的功能,享受其中的乐趣。从经济方面考虑,最后算起来反而是购买比较便宜,量产的PCB电路有时是相当实惠的。如果单买单

6、片机、面包板、LED、数码管、和一些诸如RS232 电平转换芯片、红外发射器、接收管等等。在按照电路图焊接的过程中相当费时费力费神,购置上述器件的花费也在30块钱以上,有些器件如电阻电容很便宜,不能单个购买,但是买多了又很浪费。而网购的最小系统板花费40元(虽然我们原来只想要最简单的有下载口的最小系统,发现了这个之后觉得划算就买了),上面已经将单片机(可插拔)、LED、数码管、红外模块集成,而且做好了USB下载口,并赠送了开发环境和相关例程、下载线。电机驱动模块更给力。我们本打算用两片7960芯片自己焊接驱动模块,然后用2576给单片机和超声波模块做稳压电源,这样的花费是相当大的,一片7960

7、就要15块钱,2576的价格也在5元左右,这样整个下来就得50块钱左右,我们在网上发现了这个用L298N制作的电机驱动模块,它不但可以同时驱动两个伺服电机,还拥有一个5v稳压输出,还有PWM和全整流两种工作模式,价格是35元,所以我们果断买下了。超声波模块就没有疑问了,就算知道硬件电路图,买了器件其实在缺少相关设备的情况下调试起来也是非常困难的,我们经过货比三家,选了一个实用又比较实惠的模块。这样硬件电路置备妥当购置完备了,最小系统板、超声波模块、电机驱动模块、7805稳压芯片、4节干电池盒、由于资金限制,我们向智能汽车实验室借用了一个废旧电池(7v左右,与干电池串联使用)、电子设计留下的废旧

8、车底盘。最小系统板可以兼容MCS-51系列单片机里的多种型号,我们没用自带的52RC而是采用了其中比较高端的STC12C5A60S2,(其实也就10块钱)它的指令执行周期更短,有AD、PCA模块(可以工作在PWM方式)、而且定时器、中断等与传统的8051基本兼容,非常容易掌握,也很适合小车的实时控制。小车本来我们想用三楼智能小车实验室废弃的小车底座,就是一个小车底座加上电机,只能简单的实现车的直线前进后退。后来偶然在创新实验室发现了另外一个小车,一试之下,发现这个小车底盘非常好用,本来我们都没打算在遥控的时候能实现转弯功能,因为用PWM控制的舵机太贵了,后来车上竟然发现了小的转向电机,我们眼前

9、一亮,正好电机驱动可以驱动两路电机,就把ENB输入与5v短路,在用两个I/0直接控制这个简陋的“舵机”,阴差阳错的实现了遥控模式下的转弯功能。但是由于电机驱动要求输入电压在7.2v-12v之间,我们的旧电池很明显力不从心,导致出现了很多意外问题,耽误了不少进度,后来用旧电池与干电池串联供电,单片机采用7805单独稳压供电,虽然问题有点缓解,还是显得不够给力,新电池又比较贵,我们及将就着用了,这也是系统设计的一大遗憾。另一个遗憾就是没有实现物体的全方位追踪,只能实现前后方向的直线追踪,因为要实现转弯,超声波传感器就要求有多个,而且要求有能精确控制角度的PWM舵机,所借的小车转向角度不能控制,如果

10、购置躲个超声波传感器和一个PWM舵机,花费就在300以上,所以我们考虑了一下就放弃了。 四、I/O分配及硬件连接简图1、 I/O分配如下:IO功能头文件定义IO功能头文件定义P11超声波发送使能端口TXP00电机正反转控制In1P12超声波接收检测端口RXP01电机正反转控制In2P13PWM输出无P02转向控制In3P10正转标志位zhengP03转向控制In4P17反转标志位FanP14剎停标志位TingP0数码管数据端口 无P15左右转向标志位、系统开关标志位无P20-3数码管驱动无P16同上无(注:最小系统板上P1口连接了LED) 2、系统硬件连接简图: 五、相关模块、算法 1.单片机

11、最小系统:型号STC12C5A60S2,选用此型号的重要原因是它自带PWM功能,不同占空比的方波给L298N驱动芯片后能对电机实现调速。本系统使用的STC12C5A60S2功能模块有:定时器0红外解码用定时器1超声波测距用PWM电机调速用P0口数码管数据位P2_0 P2_1 P2_2 P2_3数码管使能P1口连接LED ,显示小车的不同状态外部中断1红外解码用 2、PCA模块及其在系统中的应用STC12C5A60S2内部集成了两路可编程计数器阵列(PCA),每个模块均有软件定时器、外部脉冲捕捉、高速脉冲输出和PWM模块,也就是说这款单片机有两路PWM输出,分别在P1.3和P1.4。(我们只用了

12、一路,P13).3、定时器模块及其在系统当中的应用STC12C5A60S2拥有4个定时器模块,其中定时器0和1与传统的8051完全兼容(意思就是不光用法,连相关寄存器的地址也一样,这样开发环境中的52RC的头文件还是可以使用的),每个模块均可工作在定时器和计数器模式(通过P34,P35输入脉冲),定时器有四种工作方式:16位定时计数、13位定时计数、8位自动重装、两个8位计数。与之相关的特殊功能寄存器有:控制寄存器TCON(其中比较重要的是TF和TR分别是中断标志和计数开关,很奇怪的外部中断的设置IE IT也在该寄存器中)。工作模式设置寄存器TMOD(可以设置定时器还是计数器,工作于哪个方式?

13、)TL,TH中装着当前计数值,非常重要。AUXR可以设置定时器方式下计数频率是等于系统时钟还是等于1/12系统时钟。系统中用到了定时器0和1,定时器0用于红外模块,通过外部中断测定信号周期(TL0/TH0)以确定其携带的信息是0还是1。定时器1用于超声波模块,测定从发出超声波到超声波返回之间经过的时间,乘以声速除以2来得到距离值。 4、中断模块及其在系统中的应用中断是CPU处理外界紧急事件的机制,STC12C5A60S2拥有10个中断源,它们有规定好的优先级,有中断嵌套机制,可以对中断进行允许和屏蔽。中断采用两级控制模式,有总开关EA和寄存器中IE单独的开关(默认是0,即禁止)。10个中断中常

14、用的是:定时器0、1;两个外部中断(P32/P33)、AD中断、串口中断,他们都有规定好的中断向量地址,使用那个中断就将总开关打开,在IE中将专用开关打开,对应中断号interrupt x编写中断服务子程序(不用声明)。系统中红外模块用到了外部中断INT0(下降沿触发),其原理是红外发射器将按键码按0和1调制成不同周期长度的红外波形,红外接收头将这些波形接收后调制成不同周期长度的方波,每个每个下降沿都将触发外部中断,中断服务子程序中取一个计数值以确定其周期长度,进而知道它是0是1。5、IO模块及其在系统中的应用。STC12C5A60S2比传统的8051增添了P4和P5两个端口,系统中均未对IO

15、口进行初始化,即工作在默认的双向模式。2v以上为高电平,0.8v一下为低电平,每个口的驱动能力都在20mA以上,但要求总体不超过120mA.因为P1口接了LED所以被当作标志位用的较多。P0口是数码管的数据端口,P20-3是数码管数据端口,详细内容参见上文中的I/O分配图。(数码管的使用是先用P0口发送8位译码数据,然后用P2口发送4位控制信号,点亮四个数码管中的一个,LED与P1口直接连接,低电平的时候点亮LED,而且具有自保持功能)。 6、超声波模块超声波模块有TX,RX,VCC,两个GND共计5个端口,使用5V电压供电,系统中使用最小系统板上的5v电压输出。工作时:当TX端口收到一个持续

16、时间在10us以上的脉冲,超声波模块将发射一组特定超声波,并RX置1超声波遇到障碍物反射回来,当接收装置收到反射回来的信号,将RX置0。系统设计中我们将TX与RX分别与I0口连接,用I0口发送10us以上脉冲,同时将定时器打开,并开始检测RX,当RX为0时停止计数,取出计数值并计算距离。 7、电机驱动模块(含PWM算法)电机驱动模块采用L298N元件,输入电压为7.2-12v,同时IN1和IN2可以控制out1和Out2所接电机的正反转,IN3和IN4可以控制out3和ou4所接电机的正反转。10为正转,01为反转,00停止,11剎停。其中ena和enb可以控制输出的电流大小,若用短路帽与+5

17、v短接,则是全整流,若与PWM线连接则使用占空比整流。系统中,IN1和IN2控制电机,并用PWM(P13)控制电流以调速。IN3和IN4控制转向电机,使用ENB和5v短接。PWM就是脉宽调制,就是可以通过设置参数,输出任意占空比的方波,这些高电平时间不一的方波经过电机驱动电路(双桥整流)可以输出大小的不同的电流,用于电机调速。PCA模块的时钟源可以选择是来自于系统时钟的几分频还是来源于定时器,系统中采用了1/12的系统时钟源频率。因为PWM是8位的,所以PWM输出的波形频率是PCA时钟/256。PWM的占空比调节是比较器的作用,当计数值CL小于设定值CCAPnL时(单片机的计数与定时器均是加计

18、数)输出为低电平,当计数值超过时,输出高电平,所以我们可以通过设置CCAPnL来改变占空比。(因为每次溢出均需要重新赋值,所以同时给CCPAnH赋相同的值)。与之相关的特殊功能寄存器寄存器有CCON、COMD、CCAPM0、CCAP0L、CCAP0H.。系统中用pwminit();对该模块进行初始化,程序中改变占空比用pwm_set()给CCAP0H和CCAP0L赋不同值,用于驱动电机。 PWM模块的工作原理图如下。 8、红外解码遥控模块 红外遥控中我们买的遥控器采用HT6221遥控器芯片 解码的关键是如何识别0、1,从位的定义我们可以发现0、1均以0.56ms的低电平开始,不同的是高电平的宽

19、度不同 ,0为0.56ms, 1为1.68ms,所以必须根据高电平的宽度区别0和1,如果从0.56ms低电平过后开始,延时0.56ms以后若读到的电平为低说明该位为0,反之则为1。 为了可靠起见延时必须比 0.56ms长些但又不能超过 1.12ms,否则如果该位为0。读到的已是下一位的高电平因此取1.12ms+0.56ms /2=0.84ms最为可靠一般取 0.84ms左右均可。根据码的格式应该等待9ms的起始码和4.5ms的结果码完成后才能读码 。红外发射器将按键码按0和1调制成不同周期长度的红外波形,红外接收头将这些波形接收后调制成不同周期长度的方波,每个每个下降沿都将触发外部中断,中断服

20、务子程序中取一个计数值以确定其周期长度,进而知道它是0是1。发送的信息中包括前导码、识别码、用户码、用户反码(用于校验),其中信息接收完毕且正确后(IROK=1),32位信息均存储在IM数组中,我们需要的码值在IM【2】中,取出来判断要进行的操作即可。 其中我们用到的键码有: 按键功能键码按键功能键码开机系统开0x09右箭头右转0x1e声音开关系统关0x03Ok键舵机摆正0x05上箭头前进0x0e左三角红外模式0x0c下箭头后退0x1a右三角物体追踪0x02左箭头左转0x0aPause键剎停0x549、PID算法 1.标准的直接计算法公式:Pout(t)=Kp*e(t)+Ki*e(t)+Kd*

21、(e(t)-e(t-1); 2. 基本偏差e(t),表示当前测量值与设定目标间的差,设定目标是被减数,结果可以是正或负,正数表示还没有达到,负数表示已经超过了设定值。这是面向比例项用的变动数据。 3. 累计偏差(e)= e(t)+e(t-1)+e(t-2)+e(1),这是我们每一次测量到的偏差值的总和,这是代数和,考虑到他的正负符号的运算的,这是面向积分项用的一个变动数据。 4. 基本偏差的相对偏差e(t)-e(t-1),用本次的基本偏差减去上一次的基本偏差,用于考察当前控制的对象的趋势,作为快速反应的重要依据,这是面向微分项的一个变动数据。 5. 三个基本参数:Kp,Ki,Kd.为比例常数、

22、积分常数和微分常数 6.积分的处理 本程序所用的积分没有把之前时刻所有的误差都考虑在内,而是用了一个10维的数组err10,每次测量距离得到当前误差之后就会更新一次数组(在下面的程序中有具体体现),将最新的误差数据置入err0,然后利用循环语句把数组求和,最后乘以积分常数得到积分部分的输出。 7.微分的处理 本程序中的微分所具有的特色是把在第二点中提到的err10数组中前5个和后5个分别求和,之后再做减运算,最后乘以微分常数得到微分部分输出。 六、系统框图 七、调试过程从上周三下午在图书馆讨论室熟悉编程环境开始,一直到这周二上午解决最后一个小问题,完成最终的调试,全程历时7天,工作时间大概在4

23、天左右。 周一上午在智能小车实验室找到了一个废弃的小车底座带发动机,下午在淘宝上购置元器件,周三元器件上午到货,下午大家一起熟悉编程环境Keil uvision3和烧录工具Stc_Isp,周四大家一起研读单片机STC12C5A60S2的技术文档,然后分配任务,王威负责-电机驱动&PWM模块,裴夏青&陈如峰-超声波测距模块,我负责红外解码模块,周四晚上各自模块调试完毕。周五晚上王威完成超声波模式的整合,试车成功。周六上午大家一起调PID算法,由简单的P控制改成PID控制,消除了余差,减小了超调量,增快了反应速度。超声波模式调试完工,工作进度45%。周日上午找到另外一辆带有电机的车底座,居然还带舵

24、机!于是我们换上了新的车底座,将原来的简单控制小车直线前进后退改为前后左右共9种模式,有了超声波模式编程的经验,红外遥控模式的编程变得相当顺利,大家一起群策群力,王威主写程序、调试,程序写完编译完毕后却在试车时遇到了巨大的困难,车总是在电机转然后再让舵机转是停车、单片机死机,将前面的简单程序烧录后却又没有问题,几经分析之后依然一筹莫展。在用万用表依次测量各部件电压之后,锁定原因-单片机输入电压不够,借来的旧电池严重不给力啊。最后我们决定串联四节干电池给大电池,并且给单片机用7805稳压(直接接电池电压)供电,问题得到基本解决。晚上红外遥控模式正式调试完毕。而后裴夏青提议将两种模式定义成两个函数

25、,在主程序中调用即可,这样主程序变得非常简洁清晰,大家一致通过。由于超声波检测跟踪以及红外遥控模式的程序是分开写的,头文件中许多定义地址重复,需要大量的删改,十分繁琐,晚上王威完成了两种模式的整合,工作进度90%。周一早晨王威带着编译无误的程序过来烧录到单片机里,小车却出现诸多问题:只能进入红外遥控模式,不能进入超声波测距跟踪模式,当然两个模式也不能自由切换了;在红外模式下退出模式后不能重新选择,陷入死机状态,按暂停键和退出键效果相同,陷入死机状态。上午暂停键调试完毕,工作进度95%。下午王威缺席,夏青分析程序后觉得可能是每次判断按键码标志位Irok没有清零,我和夏青尝试性的在所有判断按键码后

26、将Irok清零,结果成功进入超声波模式并能实现超声波/红外模式的自由切换,基本完工,仅剩下一个小问题-超声波模式下舵机乱摆,暂且放下。工作进度99.9%。周二早晨我早早到了实验室,被放假一天的峰哥也来了,闲着没事于是我俩分析并且调试其程序起来,我在超声波测距每次判断距离误差后将舵机转向控制口In3、In4口清零,烧录之后试车发现在超声波模式下舵机不再乱摆,最后一个问题得以解决,大功告成!工作进度100%!在调试的过程当中在一些小错误中学到了不少零碎的知识,如:复用引脚第二功能优先、LED自保持、IO口不如不初始化直接工作在双向模式、在各个模块连接的时候一定要共地,在开发环境下中断服务子程序的写

27、法、超声波由于IO端口问题问题不能数码管显示距离(P2口换到P1口)、舵机在超声波模式剧烈震动(在每次判断误差时让IN3/IN4归零)、在PID运算中加入微分之后,震荡更加厉害(数组求差值求反了)、单片机头文件的写法等。一些小问题的解决比如头文件缺少、复杂,PWM赋值函数适应PID,当然有时也犯诸如线忘了插、键值写错的很低级的错误,但是经过一步步排查总能找出来。调试过程中耗时长、并且当时百思不得其解的问题有:1单片机在工作的过程当中总是死机?必须重启才能工作,而且死机更加频繁在超声波模块调试过程中我们发现了这个问题,我们首先从程序中查找错误,用了之前已经调试通过的简单程序,工作一段时间后还是会

28、死机,我们把注意力转移到硬件上,在反复排查后,我们把问题锁定在了单片机电压上,经过测试,我们发现电机工作一段时间后,由电机驱动输送给单片机的电压降到了3.5V以下,单片机复位,停止工作。我们的解决方法是用了三节干电池串联主电池。问题暂时得到解决。当我们加上红外遥控,两个电机一起工作的时候,同样的问题再次出现,我们决定串联四节干电池,并且给单片机用7805稳压(直接接电池电压),问题得到基本解决。因为7805要求电压在5v以上,所以在系统长时间工作的情况下单片机还是会复位。2、系统不能进行功能切换,而且在一个模式下工作极不稳定在开始进行两个模块的程序整合的时候,总是不能相互切换,而且在红外模式下

29、工作很不稳定,按关机键一次就可以彻底关机,经过排查,我们发现红外取值有效的标志位IROK=1之后,判断并执行完一步之后,没有清零,导致程序中一直读取IM【2】中的数据(乱码),而且关机键之后在IROK=1的情况下,数组中的0x03可以直接让系统停止工作。在每次键值判断之后都给IROK清零之后,问题得到了圆满的解决。八、小车图片资料 整车图片 整车侧面图片 单片机最小系统板图片 超声波模块图片 红外线遥控器(采用HT6221遥控器芯片)红外接收管图片 电机驱动模块图片 九、讲座所感 第一个报告是东方电子的刘总给我们做的,主要介绍物联网基础以及发展,主题为“物联网感知世界”。自从IBM提出“智慧地球”创想之后,物联网在全世界范围内蓬勃发展,RFID标签已经在全世界范围内得到广泛应用。在温总理在无锡考察提出我国要大力建设物联网之后,我国的物联网产业开始进入高速发展期,现在已经建成了较为完整的产业链。和其他电子产业一样,物联网技术的主导者为美国和日本,而我国在物联网产业标准、技术方面离世界一流尚有一定差距。刘总在介绍了物联网的基本原理之后重点介绍了RFID电子标签,RFID由于其非接触感知性、唯一性、稳固性使其已被广泛应用于各行各业,例如智能图书馆、智能高速路收费、服装业应

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1