循迹小车程序.docx

上传人:b****6 文档编号:6982648 上传时间:2023-01-14 格式:DOCX 页数:46 大小:590.40KB
下载 相关 举报
循迹小车程序.docx_第1页
第1页 / 共46页
循迹小车程序.docx_第2页
第2页 / 共46页
循迹小车程序.docx_第3页
第3页 / 共46页
循迹小车程序.docx_第4页
第4页 / 共46页
循迹小车程序.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

循迹小车程序.docx

《循迹小车程序.docx》由会员分享,可在线阅读,更多相关《循迹小车程序.docx(46页珍藏版)》请在冰豆网上搜索。

循迹小车程序.docx

循迹小车程序

附录程序

一、前言------------------------------------------------------------

二、小车功能------------------------------------------------------

三、元器件选择--------------------------------------------------

四、I/O分配及硬件连接简图---------------------------------

五、相关模块、算法---------------------------------------------

六、系统框图------------------------------------------------------

七、调试过程------------------------------------------------------

八、小车图片资料---------------------------------------------------

九、讲座所感------------------------------------------------------

十、实习总结------------------------------------------------------

 

一、前言

感谢生产实习能给我们这次实现自己想法的机会,虽然实验条件异常简陋、资金投入非常有限,总体感觉我的队友们灰常灰常给力啊,我感觉我是抱到大腿了--王威,夏青、峰哥,团队气氛非常好,大家一起讨论,一起分工研究模块,最后一起解决问题调试程序,而且是不同的组合在不同阶段解决了不同的问题,大家精诚合作,各显身手,在奋战中给大三学年画上了圆满的句号。

之前我们本来商量是不是可以拿往年电子设计大赛的题目过来做,如果难度太大就算只实现一部分功能也算是成功完成了,结果研究一天后发现电子设计大赛的题目需要很长时间的知识积累啊,基本上都是准备一个月以上然后开工的,后来王威提议要不我们做个小车吧,超声波测距实现自动物体追踪,控制核心采用单片机,传感器采用广泛用于避障和测距的超声波传感器,前进和后退用普通伺服电机和电机驱动模块实现。

在网上选购单片机最小系统的时候,发现有一家商铺的最小系统上集成了红外模块,就想着不要浪费了,就萌生了做遥控车的想法,这样系统可以实现两个功能一个是类似于“光影魔术手”一样的物体追踪功能,一个是遥控运行功能。

组队之后,我们一起讨论,从原理上进行可行性分析,最后一致讨论通过,然后就分组从网上搜集相关的资料,最后周一在淘宝上确定并购买了相关的器件,周三上午收到元器件,下午我们从零开始熟悉开发环境keiluvision3、翻看器件的技术文档、搞懂模块原理及使用方法、模块的编程调试、系统功能编程调试、系统程序整合、装车、系统功能优化。

这是一个发现问题和解决问题的过程,乐趣也正在于此,我们相信一切问题皆有解决的方法,我们队员四个克服种种困难最终实现了既定的系统的功能,并且在找到带有舵机新车后添加了转弯功能,实在是意外之喜。

二、小车具体功能

1、小车系统功能简述

接通电源后,按下开机键,小车进入模式选择状态,按左三角键进入(超声波)物体追踪模式,小车可以与物体始终保持设定的距离,实现与手(或其它物体)同步运动,即小车随物体一起前进后退、加速减速,同时显示当下距离值。

按右三角键进入红外遥控模式,可以遥控小车前进、后退、左转、右转、剎停。

在两个模式下按关机键,可以终止当前模式,重新选择功能,终止当前模式后按关机键,彻底关机,必须按开机键系统才能重新工作。

控制系统方框图:

超声波测距追踪:

三、元器件选择

我们做的小车所用到的器件模块除了7805芯片稳压和一些基本的开关电路,主要的模块如单片机最小系统(含红外、数码管、LED电路)、超声波模块、电机驱动模块均是从网上购买。

主要原因是我们电路设计能力还不足,现在还不是拥有设计电路能力的那个人,那如果是找到别人设计好的电路图然后自己买元件焊接,那么硬件电路其实就是一个体力活,失去了创新的意义。

尽管硬件的焊接、调试其实也是一个比较有意思的过程,但是围着一个已经验证过功能电路团团转没有太大价值,而且我们这次生产实习的时间只有一个周多些,而且实验条件太有限,没有固定的实验室,甚至连示波器、直流电源、万用表、焊枪、螺丝刀等基本的实验条件都不能保证。

我们要在短时间内实现更高的功能,就必须向硬件电路“借力”,把主要的经历放在软件调试上,硬件是“死”的,而可以把更多的想法诸如到软件中让单片机执行,以实现我们所要的功能,享受其中的乐趣。

从经济方面考虑,最后算起来反而是购买比较便宜,量产的PCB电路有时是相当实惠的。

如果单买单片机、面包板、LED、数码管、和一些诸如RS232电平转换芯片、红外发射器、接收管等等。

在按照电路图焊接的过程中相当费时费力费神,购置上述器件的花费也在30块钱以上,有些器件如电阻电容很便宜,不能单个购买,但是买多了又很浪费。

而网购的最小系统板花费40元(虽然我们原来只想要最简单的有下载口的最小系统,发现了这个之后觉得划算就买了),上面已经将单片机(可插拔)、LED、数码管、红外模块集成,而且做好了USB下载口,并赠送了开发环境和相关例程、下载线。

电机驱动模块更给力。

我们本打算用两片7960芯片自己焊接驱动模块,然后用2576给单片机和超声波模块做稳压电源,这样的花费是相当大的,一片7960就要15块钱,2576的价格也在5元左右,这样整个下来就得50块钱左右,我们在网上发现了这个用L298N制作的电机驱动模块,它不但可以同时驱动两个伺服电机,还拥有一个5v稳压输出,还有PWM和全整流两种工作模式,价格是35元,所以我们果断买下了。

超声波模块就没有疑问了,就算知道硬件电路图,买了器件其实在缺少相关设备的情况下调试起来也是非常困难的,我们经过货比三家,选了一个实用又比较实惠的模块。

这样硬件电路置备妥当购置完备了,最小系统板、超声波模块、电机驱动模块、7805稳压芯片、4节干电池盒、由于资金限制,我们向智能汽车实验室借用了一个废旧电池(7v左右,与干电池串联使用)、电子设计留下的废旧车底盘。

最小系统板可以兼容MCS-51系列单片机里的多种型号,我们没用自带的52RC而是采用了其中比较高端的STC12C5A60S2,(其实也就10块钱)它的指令执行周期更短,有AD、PCA模块(可以工作在PWM方式)、而且定时器、中断等与传统的8051基本兼容,非常容易掌握,也很适合小车的实时控制。

小车本来我们想用三楼智能小车实验室废弃的小车底座,就是一个小车底座加上电机,只能简单的实现车的直线前进后退。

后来偶然在创新实验室发现了另外一个小车,一试之下,发现这个小车底盘非常好用,本来我们都没打算在遥控的时候能实现转弯功能,因为用PWM控制的舵机太贵了,后来车上竟然发现了小的转向电机,我们眼前一亮,正好电机驱动可以驱动两路电机,就把ENB输入与5v短路,在用两个I/0直接控制这个简陋的“舵机”,阴差阳错的实现了遥控模式下的转弯功能。

但是由于电机驱动要求输入电压在7.2v-12v之间,我们的旧电池很明显力不从心,导致出现了很多意外问题,耽误了不少进度,后来用旧电池与干电池串联供电,单片机采用7805单独稳压供电,虽然问题有点缓解,还是显得不够给力,新电池又比较贵,我们及将就着用了,这也是系统设计的一大遗憾。

另一个遗憾就是没有实现物体的全方位追踪,只能实现前后方向的直线追踪,因为要实现转弯,超声波传感器就要求有多个,而且要求有能精确控制角度的PWM舵机,所借的小车转向角度不能控制,如果购置躲个超声波传感器和一个PWM舵机,花费就在300以上,所以我们考虑了一下就放弃了。

四、I/O分配及硬件连接简图

1、I/O分配如下:

IO

功能

头文件定义

IO

功能

头文件定义

P1^1

超声波发送使能端口

TX

P0^0

电机正反转控制

In1

P1^2

超声波接收检测端口

RX

P0^1

电机正反转控制

In2

P1^3

PWM输出

P0^2

转向控制

In3

P1^0

正转标志位

zheng

P0^3

转向控制

In4

P1^7

反转标志位

Fan

P1^4

剎停标志位

Ting

P0

数码管数据端口

P1^5

左右转向标志位、系统开关标志位

P2^0-3

数码管驱动

P1^6

同上

(注:

最小系统板上P1口连接了LED)

2、系统硬件连接简图:

五、相关模块、算法

1.单片机最小系统:

型号STC12C5A60S2,选用此型号的重要原因是它自带PWM功能,不同占空比的方波给L298N驱动芯片后能对电机实现调速。

本系统使用的STC12C5A60S2功能模块有:

定时器0

红外解码用

定时器1

超声波测距用

PWM

电机调速用

P0口

数码管数据位

P2_0P2_1P2_2P2_3

数码管使能

P1口

连接LED,显示小车的不同状态

外部中断1

红外解码用

2、PCA模块及其在系统中的应用

STC12C5A60S2内部集成了两路可编程计数器阵列(PCA),每个模块均有软件定时器、外部脉冲捕捉、高速脉冲输出和PWM模块,也就是说这款单片机有两路PWM输出,分别在P1.3和P1.4。

(我们只用了一路,P1^3).

3、定时器模块及其在系统当中的应用

STC12C5A60S2拥有4个定时器模块,其中定时器0和1与传统的8051完全兼容(意思就是不光用法,连相关寄存器的地址也一样,这样开发环境中的52RC的头文件还是可以使用的),每个模块均可工作在定时器和计数器模式(通过P3^4,P3^5输入脉冲),定时器有四种工作方式:

16位定时计数、13位定时计数、8位自动重装、两个8位计数。

与之相关的特殊功能寄存器有:

控制寄存器TCON(其中比较重要的是TF和TR分别是中断标志和计数开关,很奇怪的外部中断的设置IEIT也在该寄存器中)。

工作模式设置寄存器TMOD(可以设置定时器还是计数器,工作于哪个方式?

)TL,TH中装着当前计数值,非常重要。

AUXR可以设置定时器方式下计数频率是等于系统时钟还是等于1/12系统时钟。

系统中用到了定时器0和1,定时器0用于红外模块,通过外部中断测定信号周期(TL0/TH0)以确定其携带的信息是0还是1。

定时器1用于超声波模块,测定从发出超声波到超声波返回之间经过的时间,乘以声速除以2来得到距离值。

4、中断模块及其在系统中的应用

中断是CPU处理外界紧急事件的机制,STC12C5A60S2拥有10个中断源,它们有规定好的优先级,有中断嵌套机制,可以对中断进行允许和屏蔽。

中断采用两级控制模式,有总开关EA和寄存器中IE单独的开关(默认是0,即禁止)。

10个中断中常用的是:

定时器0、1;两个外部中断(P3^2/P3^3)、AD中断、串口中断,他们都有规定好的中断向量地址,使用那个中断就将总开关打开,在IE中将专用开关打开,对应中断号interruptx编写中断服务子程序(不用声明)。

系统中红外模块用到了外部中断INT0(下降沿触发),其原理是红外发射器将按键码按0和1调制成不同周期长度的红外波形,红外接收头将这些波形接收后调制成不同周期长度的方波,每个每个下降沿都将触发外部中断,中断服务子程序中取一个计数值以确定其周期长度,进而知道它是0是1。

5、IO模块及其在系统中的应用。

STC12C5A60S2比传统的8051增添了P4和P5两个端口,系统中均未对IO口进行初始化,即工作在默认的双向模式。

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端口收到一个持续时间在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可以控制输出的电流大小,若用短路帽与+5v短接,则是全整流,若与PWM线连接则使用占空比整流。

系统中,IN1和IN2控制电机,并用PWM(P1^3)控制电流以调速。

IN3和IN4控制转向电机,使用ENB和5v短接。

PWM就是脉宽调制,就是可以通过设置参数,输出任意占空比的方波,这些高电平时间不一的方波经过电机驱动电路(双桥整流)可以输出大小的不同的电流,用于电机调速。

PCA模块的时钟源可以选择是来自于系统时钟的几分频还是来源于定时器,系统中采用了1/12的系统时钟源频率。

因为PWM是8位的,所以PWM输出的波形频率是PCA时钟/256。

PWM的占空比调节是比较器的作用,当计数值CL小于设定值CCAPnL时(单片机的计数与定时器均是加计数)输出为低电平,当计数值超过时,输出高电平,所以我们可以通过设置CCAPnL来改变占空比。

(因为每次溢出均需要重新赋值,所以同时给CCPAnH赋相同的值)。

与之相关的特殊功能寄存器寄存器有CCON、COMD、CCAPM0、CCAP0L、CCAP0H.。

系统中用pwminit();对该模块进行初始化,程序中改变占空比用pwm_set()给CCAP0H和CCAP0L赋不同值,用于驱动电机。

PWM模块的工作原理图如下。

8、红外解码遥控模块

红外遥控中我们买的遥控器采用HT6221遥控器芯片

解码的关键是如何识别0、1,从位的定义我们可以发现0、1均以0.56ms的低电平开始,不同的是高电平的宽度不同,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调制成不同周期长度的红外波形,红外接收头将这些波形接收后调制成不同周期长度的方波,每个每个下降沿都将触发外部中断,中断服务子程序中取一个计数值以确定其周期长度,进而知道它是0是1。

发送的信息中包括前导码、识别码、用户码、用户反码(用于校验),其中信息接收完毕且正确后(IROK=1),32位信息均存储在IM数组中,我们需要的码值在IM【2】中,取出来判断要进行的操作即可。

其中我们用到的键码有:

按键

功能

键码

按键

功能

键码

开机

系统开

0x09

右箭头

右转

0x1e

声音开关

系统关

0x03

Ok键

舵机摆正

0x05

上箭头

前进

0x0e

左三角

红外模式

0x0c

下箭头

后退

0x1a

右三角

物体追踪

0x02

左箭头

左转

0x0a

Pause键

剎停

0x54

9、PID算法

1.标准的直接计算法公式:

Pout(t)=Kp*e(t)+Ki*Σe(t)+Kd*(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.为比例常数、积分常数和微分常数

6.积分的处理

本程序所用的积分没有把之前时刻所有的误差都考虑在内,而是用了一个10维的数组err[10],每次测量距离得到当前误差之后就会更新一次数组(在下面的程序中有具体体现),将最新的误差数据置入err[0],然后利用循环语句把数组求和,最后乘以积分常数得到积分部分的输出。

7.微分的处理

本程序中的微分所具有的特色是把在第二点中提到的err[10]数组中前5个和后5个分别求和,之后再做减运算,最后乘以微分常数得到微分部分输出。

六、系统框图

七、调试过程

从上周三下午在图书馆讨论室熟悉编程环境开始,一直到这周二上午解决最后一个小问题,完成最终的调试,全程历时7天,工作时间大概在4天左右。

周一上午在智能小车实验室找到了一个废弃的小车底座带发动机,下午在淘宝上购置元器件,周三元器件上午到货,下午大家一起熟悉编程环境Keiluvision3和烧录工具Stc_Isp,周四大家一起研读单片机STC12C5A60S2的技术文档,然后分配任务,王威负责-电机驱动&PWM模块,裴夏青&陈如峰-超声波测距模块,我负责红外解码模块,周四晚上各自模块调试完毕。

周五晚上王威完成超声波模式的整合,试车成功。

周六上午大家一起调PID算法,由简单的P控制改成PID控制,消除了余差,减小了超调量,增快了反应速度。

超声波模式调试完工,工作进度45%。

周日上午找到另外一辆带有电机的车底座,居然还带舵机!

于是我们换上了新的车底座,将原来的简单控制小车直线前进后退改为前后左右共9种模式,有了超声波模式编程的经验,红外遥控模式的编程变得相当顺利,大家一起群策群力,王威主写程序、调试,程序写完编译完毕后却在试车时遇到了巨大的困难,车总是在电机转然后再让舵机转是停车、单片机死机,将前面的简单程序烧录后却又没有问题,几经分析之后依然一筹莫展。

在用万用表依次测量各部件电压之后,锁定原因--单片机输入电压不够,借来的旧电池严重不给力啊。

最后我们决定串联四节干电池给大电池,并且给单片机用7805稳压(直接接电池电压)供电,问题得到基本解决。

晚上红外遥控模式正式调试完毕。

而后裴夏青提议将两种模式定义成两个函数,在主程序中调用即可,这样主程序变得非常简洁清晰,大家一致通过。

由于超声波检测跟踪以及红外遥控模式的程序是分开写的,头文件中许多定义地址重复,需要大量的删改,十分繁琐,晚上王威完成了两种模式的整合,工作进度90%。

周一早晨王威带着编译无误的程序过来烧录到单片机里,小车却出现诸多问题:

只能进入红外遥控模式,不能进入超声波测距跟踪模式,当然两个模式也不能自由切换了;在红外模式下退出模式后不能重新选择,陷入死机状态,按暂停键和退出键效果相同,陷入死机状态。

上午暂停键调试完毕,工作进度95%。

下午王威缺席,夏青分析程序后觉得可能是每次判断按键码标志位Irok没有清零,我和夏青尝试性的在所有判断按键码后将Irok清零,结果成功进入超声波模式并能实现超声波/红外模式的自由切换,基本完工,仅剩下一个小问题--超声波模式下舵机乱摆,暂且放下。

工作进度99.9%。

周二早晨我早早到了实验室,被放假一天的峰哥也来了,闲着没事于是我俩分析并且调试其程序起来,我在超声波测距每次判断距离误差后将舵机转向控制口In3、In4口清零,烧录之后试车发现在超声波模式下舵机不再乱摆,最后一个问题得以解决,大功告成!

工作进度100%!

在调试的过程当中在一些小错误中学到了不少零碎的知识,如:

复用引脚第二功能优先、LED自保持、IO口不如不初始化直接工作在双向模式、在各个模块连接的时候一定要共地,在开发环境下中断服务子程序的写法、超声波由于IO端口问题问题不能数码管显示距离(P2口换到P1口)、舵机在超声波模式剧烈震动(在每次判断误差时让IN3/IN4归零)、在PID运算中加入微分之后,震荡更加厉害(数组求差值求反了)、单片机头文件的写法等。

一些小问题的解决比如头文件缺少、复杂,PWM赋值函数适应PID,当然有时也犯诸如线忘了插、键值写错的很低级的错误,但是经过一步步排查总能找出来。

调试过程中耗时长、并且当时百思不得其解的问题有:

1单片机在工作的过程当中总是死机?

必须重启才能工作,而且死机更加频繁

在超声波模块调试过程中我们发现了这个问题,我们首先从程序中查找错误,用了之前已经调试通过的简单程序,工作一段时间后还是会死机,我们把注意力转移到硬件上,在反复排查后,我们把问题锁定在了单片机电压上,经过测试,我们发现电机工作一段时间后,由电机驱动输送给单片机的电压降到了3.5V以下,单片机复位,停止工作。

我们的解决方法是用了三节干电池串联主电池。

问题暂时得到解决。

当我们加上红外遥控,两个电机一起工作的时候,同样的问题再次出现,我们决定串联四节干电池,并且给单片机用7805稳压(直接接电池电压),问题得到基本解决。

因为7805要求电压在5v以上,所以在系统长时间工作的情况下单片机还是会复位。

2、系统不能进行功能切换,而且在一个模式下工作极不稳定

在开始进行两个模块的程序整合的时候,总是不能相互切换,而且在红外模式下工作很不稳定,按关机键一次就可以彻底关机,经过排查,我们发现红外取值有效的标志位IROK=1之后,判断并执行完一步之后,没有清零,导致程序中一直读取IM【2】中的数据(乱码),而且关机键之后在IROK=1的情况下,数组中的0x03可以直接让系统停止工作。

在每次键值判断之后都给IROK清零之后,问题得到了圆满的解决。

八、小车图片资料

整车图片

整车侧面图片

单片机最小系统板图片

超声波模块图片

红外线遥控器(采用HT6221遥控器芯片)

红外接收管图片

电机驱动模块图片

九、讲座所感

第一个报告是东方电子的刘总给我们做的,主要介绍物联网基础以及发展,主题为“物联网感知世界”。

自从IBM提出“智慧地球”创想之后,物联网在全世界范围内蓬勃发展,RFID标签已经在全世界范围内得到广泛应用。

在温总理在无锡考察提出我国要大力建设物联网之后,我国的物联网产业开始进入高速发展期,现在已经建成了较为完整的产业链。

和其他电子产业一样,物联网技术的主导者为美国和日本,而我国在物联网产业标准、技术方面离世界一流尚有一定差距。

刘总在介绍了物联网的基本原理之后重点介绍了RFID电子标签,RFID由于其非接触感知性、唯一性、稳固性使其已被广泛应用于各行各业,例如智能图书馆、智能高速路收费、服装业应

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 院校资料

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

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