基于51单片机的智能物体追踪和遥控车的实现 - - - 雷帅 - 图文

更新时间:2024-07-12 14:56:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

烟台大学自动化专业生产实习

/遥控车设计报告姓名:雷帅 班级:计082-1 学号:200825502103

其他队员:裴夏青、王威、陈如峰 指导老师:郭卫平 日期:2011.7.13

1

智能物体追踪

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

目录

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

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

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

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

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

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

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

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

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

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

2

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

一、 前言

感谢生产实习能给我们这次实现自己想法的机会,虽然实验条件异常简陋、资金投入非常有限,但是我们总算是克服了种种困难让我们的小车闪亮登场了,实现了既定的目标,享受了发现问题和解决问题的乐趣。顺利结题的主要原因是队友们都很给力啊,我感觉我是抱到大腿了--王威,夏青、峰哥,团队气氛非常好,大家一起讨论,一起分工研究模块,最后一起解决问题调试程序,而且是不同的组合在不同阶段解决了不同的问题,大家精诚合作,各显身手,在奋战中给大三学年画上了圆满的句号。

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

组队之后,我们一起讨论,从原理上进行可行性分析,最后一致讨论通过,然后就分组从网上搜集相关的资料,最后周一在淘宝上确定并购买了相关的器件,周三上午收到元器件,下午我们从零开始

3

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

熟悉开发环境keil uvision3、翻看器件的技术文档、搞懂模块原理及使用方法、模块的编程调试、系统功能编程调试、系统程序整合、装车、系统功能优化。这是一个发现问题和解决问题的过程,乐趣也正在于此,我们相信一切问题皆有解决的方法,我们队员四个克服种种困难最终实现了既定的系统的功能,并且在找到带有舵机新车后添加了转弯功能,实在是意外之喜。

二、 小车具体功能

1、小车系统功能简述

接通电源后,按下开机键,小车进入模式选择状态,按左三角键进入(超声波)物体追踪模式,小车可以与物体始终保持设定的距离,实现与手(或其它物体)同步运动,即小车随物体一起前进后退、加速减速,同时显示当下距离值。按右三角键进入红外遥控模式,可以遥控小车前进、后退、左转、右转、剎停。在两个模式下按关机键,可以终止当前模式,重新选择功能,终止当前模式后按关机键,彻底关机,必须按开机键系统才能重新工作。

控制系统方框图: (1) 超声波测距追踪:

设定距离 — 测量距离 超声波传感器

PID 电驱 电机 (2) 红外遥控开环控制:

4

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

红外发射 红外接收 单片机 电驱 电机/舵机 三、元器件选择

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

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

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

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

从经济方面考虑,最后算起来反而是购买比较便宜,量产的PCB电路有时是相当实惠的。如果单买单片机、面包板、LED、数码管、和一些诸如RS232 电平转换芯片、红外发射器、接收管等等。在按

5

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

照电路图焊接的过程中相当费时费力费神,购置上述器件的花费也在30块钱以上,有些器件如电阻电容很便宜,不能单个购买,但是买多了又很浪费。而网购的最小系统板花费40元(虽然我们原来只想要最简单的有下载口的最小系统,发现了这个之后觉得划算就买了),上面已经将单片机(可插拔)、LED、数码管、红外模块集成,而且做好了USB下载口,并赠送了开发环境和相关例程、下载线。

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

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

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

最小系统板可以兼容MCS-51系列单片机里的多种型号,我们没用自带的52RC而是采用了其中比较高端的STC12C5A60S2,(其实

6

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

也就10块钱)它的指令执行周期更短,有AD、PCA模块(可以工作在PWM方式)、而且定时器、中断等与传统的8051基本兼容,非常容易掌握,也很适合小车的实时控制。

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

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

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

7

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

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

1、 I/O分配如下:

IO P1^1 P1^2 P1^3 P1^0 P1^7 P0 功能 超声波发送使能端口 超声波接收检测端口 PWM输出 正转标志位 反转标志位 数码管数据端口 无 zheng Fan 无 P0^2 P0^3 P1^4 P1^5 RX P0^1 头文件定义 TX IO P0^0 功能 电机正反转控制 电机正反转控制 转向控制 转向控制 剎停标志位 左右转向标志位、系统开关标志位 同上 In3 In4 Ting 无 In2 头文件定义 In1 数码管驱动 无 P2^0-3 (注:最小系统板上P1口连接了LED)

P1^6 无 2、系统硬件连接简图:

8

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

五、相关模块、算法

1.单片机最小系统:

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

本系统使用的STC12C5A60S2功能模块有: 定时器0 定时器1 PWM P0口 P2_0 P2_1 P2_2 P2_3 P1口 外部中断1 红外解码用 超声波测距用 电机调速用 数码管数据位 数码管使能 连接LED ,显示小车的不同状态 红外解码用

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

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

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

STC12C5A60S2拥有4个定时器模块,其中定时器0和1与传

9

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

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

与之相关的特殊功能寄存器有:控制寄存器TCON(其中比较重要的是TF和TR分别是中断标志和计数开关,很奇怪的外部中断的设置IE IT也在该寄存器中)。工作模式设置寄存器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中断、串口中断,他们都有

10

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

规定好的中断向量地址,使用那个中断就将总开关打开,在IE中将专用开关打开,对应中断号interrupt x编写中断服务子程序(不用声明)。

系统中红外模块用到了外部中断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

11

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

端口收到一个持续时间在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来改

12

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

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

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

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

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

8、红外解码遥控模块

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

解码的关键是如何识别0、1,从位的定义我们可以发现0、1均

13

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

以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】中,取出来判断要进行的操作即可。

14

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

其中我们用到的键码有: 按键 开机 功能 系统开 键码 0x09 0x03 0x0e 按键 右箭头 Ok键 左三角 功能 右转 键码 0x1e 声音开关 系统关 上箭头 前进 舵机摆正 0x05 红外模式 0x0c 15

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

下箭头 左箭头 后退 左转 0x1a 0x0a 右三角 Pause键 物体追踪 0x02 剎停 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.微分的处理

16

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

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

六、系统框图

七、调试过程

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

17

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

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

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

18

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

义地址重复,需要大量的删改,十分繁琐,晚上王威完成了两种模式的整合,工作进度90%。

周一早晨王威带着编译无误的程序过来烧录到单片机里,小车却出现诸多问题:只能进入红外遥控模式,不能进入超声波测距跟踪模式,当然两个模式也不能自由切换了;在红外模式下退出模式后不能重新选择,陷入死机状态,按暂停键和退出键效果相同,陷入死机状态。上午暂停键调试完毕,工作进度95%。下午王威缺席,夏青分析程序后觉得可能是每次判断按键码标志位Irok没有清零,我和夏青尝试性的在所有判断按键码后将Irok清零,结果成功进入超声波模式并能实现超声波/红外模式的自由切换,基本完工,仅剩下一个小问题--超声波模式下舵机乱摆,暂且放下。工作进度99.9%。

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

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

19

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

(数组求差值求反了)、单片机头文件的写法等。一些小问题的解决比如头文件缺少、复杂,PWM赋值函数适应PID,当然有时也犯诸如线忘了插、键值写错的很低级的错误,但是经过一步步排查总能找出来。调试过程中耗时长、并且当时百思不得其解的问题有: 1单片机在工作的过程当中总是死机?必须重启才能工作,而且死机更加频繁

在超声波模块调试过程中我们发现了这个问题,我们首先从程序中查找错误,用了之前已经调试通过的简单程序,工作一段时间后还是会死机,我们把注意力转移到硬件上,在反复排查后,我们把问题锁定在了单片机电压上,经过测试,我们发现电机工作一段时间后,由电机驱动输送给单片机的电压降到了3.5V以下,单片机复位,停止工作。我们的解决方法是用了三节干电池串联主电池。问题暂时得到解决。当我们加上红外遥控,两个电机一起工作的时候,同样的问题再次出现,我们决定串联四节干电池,并且给单片机用7805稳压(直接接电池电压),问题得到基本解决。因为7805要求电压在5v以上,所以在系统长时间工作的情况下单片机还是会复位。 2、系统不能进行功能切换,而且在一个模式下工作极不稳定 在开始进行两个模块的程序整合的时候,总是不能相互切换,而且在红外模式下工作很不稳定,按关机键一次就可以彻底关机,经过排查,我们发现红外取值有效的标志位IROK=1之后,判断并执行完一步之后,没有清零,导致程序中一直读取IM【2】中的数据(乱码),而且关机键之后在IROK=1的情况下,数组中的0x03可以直接

20

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

让系统停止工作。在每次键值判断之后都给IROK清零之后,问题得到了圆满的解决。

八、小车图片资料

整车图片

整车侧面图片

21

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

单片机最小系统板图片

超声波模块图片

22

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

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

红外接收管图片

23

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

电机驱动模块图片

九、讲座所感

第一个报告是东方电子的刘总给我们做的,主要介绍物联网基础以及发展,主题为“物联网感知世界”。自从IBM提出“智慧地球”创想之后,物联网在全世界范围内蓬勃发展,RFID标签已经在全世界范围内得到广泛应用。在温总理在无锡考察提出我国要大力建设物联网之后,我国的物联网产业开始进入高速发展期,现在已经建成了较为完整的产业链。和其他电子产业一样,物联网技术的主导者为美国和日本,而我国在物联网产业标准、技术方面离世界一流尚有一定差距。刘总在介绍了物联网的基本原理之后重点介绍了RFID电子标签,RFID由于其非接触感知性、唯一性、稳固性使其已被广泛应用于各行各业,例如智能图书馆、智能高速路收费、服装业应用、婴儿放报错、动物饲养、汽车制造应用、电子支付、电子车票电力智能巡

24

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

检系统、变电站运行检修人员安保定位系统等等。物联网产业中利润最大的两个环节为芯片制造以及系统集成。芯片制造的领跑者为美国以及日本,中国有两个科研所有所斩获但尚未量产根本无力竞争。烟台东方电子的强项为系统集成,下属子公司东方英伟达主要做系统集成,已经有很多成熟的的产品问世例如烟台港集装箱货运、张裕葡萄酒的电子标签、张裕博物馆门票等等。刘总谈东方电子的发展战略时提到中国研发的无奈,当你花费大量人力物力苦心孤诣研发出来一款产品,却发现已经远远落后于市场、收不回回报时,下次你做研发还会这么有勇气么?所以东方电子在芯片这方面不得不和微软、IBM、日立等等国际厂商合作,用他们已经成熟的芯片来占领市场,这也是中国厂商巨大的无奈吧。

第二个讲座由数学院的吴昭景博士所做,题目为《控制论及通才硕学》。吴老师在控制领域最高学术机构IEEE AC和IFAC上所办刊物上都发表了两篇论文,应该能代表烟大控制理论发展的最前沿。吴老师主要给我们介绍维纳、钱学森、陈翰馥、郭雷、彭实戈、朱位秋等大家的成长历程,继而引出控制论是一门横断科学,横跨各学科,以前的大师们基本上都是横跨数学、物理、机械各学科的牛人。这就对立志要从事本专业我们提出了通才硕学的要求,要求我们视野要开阔、涉猎范围要广、所学要博。吴老师给我列举了好几十种控制算法,给我们举了个例子:假如你设计好一个控制系统,你就需要了解诸多控制方法然后才能择优取之,这对你的学识就提出了极高的要求,不博学不行。吴老师表现得非常诚恳,他最后讲述自己人生经历也给了

25

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

我很大的启发。“人可以波折,但必须站起来”,两次高考失利导致吴老师颓废不已、混沌度日,师范毕业后被分配到老家的乡村中学教书,极度失意。在教书7年后吴老师走出雾霭,决定考研,2年后考上研究生,然后研究生提前毕业,考上东北大学博士研究生,继而至烟大教学,在烟大教学、科研成果斐然。这绝对是发生在我们身边的现实版励志故事。吴老师最后给了我们一些建议:年轻人要有理想,有抱负,有求知欲,善于归纳,勤于思辨,面对现实,在应试中提高学习能力,适应社会,努力实现自身抱负和价值。

最后一个讲座请来了东方电子工程部门出身的刘总。刘总的讲座实用性非常强。首先以东方电子给企业做的几个系统为例给我们介绍了工业控制系统。刘总从底层讲起、按层次依次将各个元件进行介绍,让我们实实在在见识到了控制网络是怎么样由一个个部件组成起来的。刘总给了我们一种整体的、全局的理念,将来进企业或者做研发你非常可能只是从事其中很小的一个环节,但你必须有整体意识,善于分析,把握全局,这样才能真真正正将自己的工作完成到优秀并且脱颖而出。作为招聘的领导,刘总给我们提了一些要求和建议,一定要善于总结、见多识广,不能仅仅知道课本上的一些知识,课本上的知识很可能是过时的、小众的,而你必须与时俱进,统揽全局。

十、实习总结

这是我第一次做专业方面的比较大型的设计,比较幸运的我加

入了一个相当强悍的队伍,然后完成了一个感觉还比较成功的作品,

26

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

所学的知识也得到了相当多的应用。从大一的C语言、大二的微机原理、单片机、大三的嵌入式中关于定时/计数器、I/O口、串/并行通讯、中断等等各模块的介绍,大二模拟电子技术到这学期过程控制课程刚学的PID算法,都得到了应用,也相当于将所学知识进行了一次小小的整合和综合性应用吧。看我们的自己小车功能越来越多,跑得越来越流畅,真真切切的感觉到什么叫“知识就是力量”。

首先感谢老师的指导和支持,给我们这次实现自己想法的机会,并给我们提供了实验室和必要的实验条件。感谢创新实验室里的同学们以及我们的特别技术顾问--来自计092-3的梁陈同学,帮我们找到了带有舵机的小车底座,帮我们顺手焊了一个7805稳压电路,给我们提供电池盒、杜邦线以及各种小器件--多谢你的支持!最后一定要提的是我们精诚合作齐心协力的队伍,大家群策群力完成主程序后,最后时刻由于各种原因各种缺席,居然是不同的人员组合完成了不同的纠错、调试任务,不同的组合将程序从90%、95%推进到99.9%以及最后的100%,大家一起见证了最后小车的流畅运行。感谢我强大的队员们:王威--我们队伍当之无愧的核心,将我们各自的模块组合起来以及完成了最后繁琐的两种控制模式的结合;夏青--经常抬头望天进行云计算的才女,几乎分析出了所有出现故障时的前因后果,不得不佩服你的专业基础;峰哥--张飞也能绣花,粗犷的外表下却有着一双灵巧的双手,细腻程度令人惊叹! 这次实习因为有你们而格外美丽!O(∩_∩)O~

27

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

附:系统程序:

//******************************

/*接通电源后,按下开机键,单片机进入模式选择状态,按左三角键进入(超声波)物体追踪模式,小车可以与

物体始终保持设定的距离,按右三角键进入红外遥控模式,可以遥控小车前进、后退、左转、右转、剎停

在两个模式下按关机键,可以终止当前模式,重新选择功能,此时按关机键,直接关机,必须按开机键才能重新选择*/

//1111**************************IO//系统IO分配

//p1_1、p1-2,超声波模块发送和接受信号线tx rx //p1_3,pwm输出线

//p1_0、p1_7,电机正反转的标志位zheng fan //p0数码管数据口 //p2_0/1/2/3数码管驱动

//p0_0、p0_1电机驱动正反转控制

//p0_1、p0_2转向电机(舵机)正反转控制位 //p1_4剎停标志位

//p1_5、p1_6左右方向标志位,红外功能开关标志位 //2222****************************#include #include #include

//AT89X51.H中除了IO口 和中断的定义,其余的都与reg52.h的定义重合。

//3333****************************

**************************************************

//下面是关于红外遥控模块的公共变量区 unsigned char f; //找到起始码开始取值的标志

#define Imax 14000 //此处为晶振为11.0592时的取值, #define Imin 8000 // #define Inum2 700

用来识别起始码

#define Inum1 1450 //周期取值范围,代表0 和1

//系统头文件

//IO口、定时器、中断、串口等相关特殊寄存器头文件 //自定义功能IO头文件

//自编stc12csa60s的pwm模块头文件

***************************************************

#include

**********************************************

************************************************

28

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

#define Inum3 3000 //不同的周期所对应的计数值,代表不同的信息

unsigned char Im[4]={0x00,0x00,0x00,0x00}; //起始码、用户码、校验码的存储数组 unsigned long m,Tc; //位计数、信号周期计数值 unsigned char IrOK; //读码有效标志位

//下面是关于超声波模块的公共数据

//设定值为15厘米

#define SETVALUE 15 #define P 15 #define I 0.5 #define D 10

unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管的0-9译码值

long S=0; //获取距离值(当前值) int OFFSET=0; //偏差

int pwm_kong=0;//PID运算后的占空比控制因子0-255 int SUM_OFFSET=0; //上一次的偏差 int err[10]; int I_OFFSET=0; int qian_sum=0; int hou_sum=0; int D_OFFSET=0;

unsigned int time=0; //从发送到接受所经历的计数值 unsigned int ge=0; unsigned int shi=0; unsigned int bai=0; unsigned int qian=0; int flag_chao=0;

int flag_hong=0;//进入两个模块的标志位 int flag=0; //红外模式下定义的系统总的开关

//4444*****************************函数声明区(中断服务子程序不参与声明(外部1))**************************************************

//下面是超声波物体追踪模块的相关函数声明 void display();

//数码管显示函数

//微秒级延时函数

void delayus(unsigned int us);

//距离值的个位(厘米计)一下以此类推

void delay(unsigned char i); //延时函数

void StartModule(void) ; //通过p1-1发送一个10us以上的脉冲 void Count() ;//将计数值转化成距离值 void pwminit() ;

//PWM模块初始化函数

void PWM0_set (unsigned int a); //占空比调节函数 void chaoshengbo();//物体追踪模式下的控制函数

//下面是红外遥控模块的相关函数声明

//void delay(unsigned i); //void pwminit();

//延时函数 (公用)

//PWM模块初始化函数

(公用)

29

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

void hongwai();

//红外遥控模式的控制函数

//5555*******************************

main() { ****************************************************

//两个模块均要用到定时器(超声波用来计算距离值,红外用来根据信号周期确定信息类型), //为了防止干扰,用两个定时器模块,前1后0,都用到了PWM模块

//且要红外控制 以决定进入物体追踪还是红外遥控,所以,需要公共定义的变量如下: //***********************两个模块公共需要

// pwminit(); //PWM初始化

75%占空比

TMOD=0x11;

TH0=0;TL0=0; //定时器0和1为方式1,16位计数 ,计数值清零

TR0=1; //红外模块需要马上开启定时器工作

TH1=0;TL1=0;//定时器1计数值清零等待超声波模块使用

//*************************需要从红外控制进入两个模块,定义如下:

EA=1;

//开启所有中断

IT1=1;

//外部中断为下降沿触发 EX1=1; //开启外部中断

红外控制依赖于外部中断

m=0;

f=0;

//红外控制标志位清零 in1=0; in2=0;

//初始化使电机停转,防止开机开车

in3=0;

in4=0; //防止开机乱摆

//修改 flag_chao=0; flag_hong=0; //********************************主干程序如下:

while(1)

{ if(IrOK==1) //红外取值有效,开始判断

{

if(Im[2]==0x09)

//开机,p1_5、6全亮

{p1_5=0; p1_6=0; flag=1; //修改

IrOK=0; }

30

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

}

if(I_OFFSET>255) I_OFFSET=255;

pwm_kong=P*OFFSET+I_OFFSET+D*D_OFFSET;//PID运算

if(pwm_kong>255)pwm_kong=255;//PWM为8位,总的计数值为0-255

PWM0_set(pwm_kong);

}

else if(OFFSET==0) { zheng=1; fan=1; ting=0; in1=1;

in2=1;//当没有偏差时剎停 in3=0;

in4=0;//防止抖动 } }

//***************************************************************************************

//下面是关于红外遥控模块的功能函数集合 void intersvr1(void) interrupt 2 using 1 //外部中断解码服务子程序 {

Tc=TH0*256+TL0; //提取中断时间间隔时长,以确定信息类型 TH0=0;

TL0=0; //定时中断重新置零 if((Tc>Imin)&&(Tc

} //找到启始码 if(f==1) { {

Im[m/8]=Im[m/8]>>1|0x80; m++; }

//周期长度在这个范围内代表1

if(Tc>Inum1&&Tc

36

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

if(Tc>Inum2&&Tc

//周期在此范围内代表0

Im[m/8]=Im[m/8]>>1; m++; //取码 }

if(m==32) {

m=0; f=0;

if(Im[2]==~Im[3]) {

IrOK=1; }

else IrOK=0; //取码无效 }

} }

//*********************************************************************************** void hongwai() { //修改 in1=0; in2=0; in3=0; in4=0;

p1_5=1;fan=0; pwminit(); while(1) {

if(IrOK==1) {

if(Im[2]==0x0a && flag==1) //左,亮灭 { p1_5=0; p1_6=1; in3=1;

in4=0;//电机正转,车向左 //修改 IrOK=0; }

if(Im[2]==0x1e && flag==1) { p1_5=1; p1_6=0; in3=0;

//右,灭亮

//误差数组计数变量

//红外遥控模式的控制函数

//读码有效

//进行校验

//取够4个八位二进制数

37

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

in4=1;//电机反转,车向右 //修改 IrOK=0; }

if(Im[2]==0x05 && flag==1) //ok键摆正

{ in3=0; in4=0; //修改 IrOK=0; }

if(Im[2]==0x0e && flag==1) {

zheng=0; fan=1; in1=1; in2=0; //修改 IrOK=0; }

if(Im[2]==0x1a&& flag==1) { fan=0; zheng=1; in1=0; in2=1; //修改 IrOK=0; }

if(Im[2]==0x54 && flag==1 ) {p1_5=1; p1_6=1; in1=0; in2=0; in3=0; in4=0; //修改

IrOK=0; } if(Im[2]==0x03 && flag==1) {

//向前跑 //向后跑 //剎停 //退出红外模式,进入主函数循环 38

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

flag_chao=0; flag_hong=0; //修改 IrOK=0; in1=0; in2=0; in3=0; in4=0; return;} //修改 IrOK=0; } } }

//*******************************************************************************************//******************************************************************************************* /*-------------------------------------------------------------------------- AT89X51.H

Header file for the low voltage Flash Atmel AT89C51 and AT89LV51. Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc. All rights reserved.

--------------------------------------------------------------------------*/

#ifndef __AT89X51_H__ #define __AT89X51_H__

/*------------------------------------------------ Byte Registers

------------------------------------------------*/ //sfr P0 = 0x80; //sfr SP = 0x81; //sfr DPL = 0x82; //sfr DPH = 0x83; //sfr PCON = 0x87; //sfr TCON = 0x88; //sfr TMOD = 0x89; //sfr TL0 = 0x8A; //sfr TL1 = 0x8B; //sfr TH0 = 0x8C; //sfr TH1 = 0x8D; //sfr P1 = 0x90; //sfr SCON = 0x98;

39

智能物体追踪/遥控车的设计报告(团队制作-雷帅、王威、裴夏青、陈如峰)

//sfr SBUF = 0x99; ////sfr P2 = 0xA0; //sfr IE = 0xA8; //sfr P3 = 0xB0; //sfr IP = 0xB8; //sfr PSW = 0xD0; //sfr ACC = 0xE0; //sfr B = 0xF0;

/*------------------------------------------------ P0 Bit Registers

------------------------------------------------*/ sbit P0_0 = 0x80; sbit P0_1 = 0x81; sbit P0_2 = 0x82; sbit P0_3 = 0x83; sbit P0_4 = 0x84; sbit P0_5 = 0x85; sbit P0_6 = 0x86; sbit P0_7 = 0x87;

/*------------------------------------------------ PCON Bit Values

------------------------------------------------*/ #define IDL_ 0x01

#define STOP_ 0x02

#define PD_ 0x02 /* Alternate definition */

#define GF0_ 0x04 #define GF1_ 0x08

#define SMOD_ 0x80

/*------------------------------------------------ TCON Bit Registers

------------------------------------------------*/ //sbit IT0 = 0x88; //sbit IE0 = 0x89; //sbit IT1 = 0x8A; //sbit IE1 = 0x8B; //sbit TR0 = 0x8C; //sbit TF0 = 0x8D; //sbit TR1 = 0x8E;

40

本文来源:https://www.bwwdw.com/article/pkb.html

Top