基于AT89S52的智能小车设计 - 图文

更新时间:2024-03-16 11:59:01 阅读量: 综合文库 文档下载

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

智能小车的软件设计与实现

摘 要

本设计是通过寻迹路线功能,将小车引入迷宫入口,实现小车穿越迷宫。采用AT89S52作为核心控制器,作为数据处理中心。通过红外线传感器将所采集的模拟信号经过运放电路将信号放大,通过TLC1543模数转换器转换为数字信号,通过核心控制器进行数据处理后,将数据送8位串行接口数码显示驱动器MAX-- 7219驱动LED显示。采用H桥电路L293D来驱动直流电机,用于控制直流电机的转向和速度,在本系统中采用了红外线遥控技术,来控制小车的启动,从而达到智能控制的要求。

关键词:智能小车,反射式红外线传感器,直流电机,智能控制,H桥电路

Intelligent truckle software design and

realization

ABSTRACT

A truckle at the exit of the labyrinth can go through the labyrinth under the guide of the system which is based on the function of trailing routes. AT89S52 Single-chip Microcomputer is the core controller and the data processing centre. The gathered analog signals are enlarged by the reflection type infrared sensor through the release circuit and transferred into digital signals by TLC1543 analog-to-digital converter. After the data processing, the data are displayed on the LED which is driven by the eight-segment numeric indicator drive. The H bridge electric circuit is used to drive the de machine so as to control the direction and speed of the truckle. In order to meet the requirement of intelligence controls,this system adopts infrared remote control technology to control the starting of the truckle .

KEY WORDS: Intelligent truckle, the reflection type infrared sensor, de machine, Intelligence controls, the H bridge electric circuit

2

目 录

前言……………………………………………………………………………6

第1章 硬件设计……………………………………………………………………7

1.1 设计方案论证………………………………………………………………7 1.1.1 传感器选择方案论证………………………………………………7

1.1.2 机械设计方案………………………………………………………8 1.1.3 小车传感器布局……………………………………………………8

1.2 工作原理……………………………………………………………………9 1.3 系统结构……………………………………………………………………9 1.4 硬件芯片介绍 ……………………………………………………………10

1.4.1 AT89S52芯片………………………………………………………10 1.4.2 TLC1543A/D转换 …………………………………………………13 1.4.3 LM358双运算放大器………………………………………………18 1.4.4 LM234四运算放大器………………………………………………19 1.4.5 串行接口8位LED显示驱动器MAX7219…………………………19 1.4.6 红外遥控原理 ……………………………………………………22 1.4.7 红外线传感器 ……………………………………………………24 1.4.8 驱动电机 …………………………………………………………24 1.5 电路图的设计 ……………………………………………………………25

1.5.1 电源供电部分电路 ………………………………………………25 1.5.2 码盘检测部分电路 ………………………………………………26 1.5.3 信息采集部分和信息转换部分电路 ……………………………27 1.5.4 红外遥控部分和数据处理中心电路 ……………………………28 1.5.5 信息显示部分电路 ………………………………………………29 1.5.6 信息执行部分电路(驱动电机) …………………………………30

第2章 软件设计 …………………………………………………………………31 2.1 算法论证 …………………………………………………………………31 2.2 系统软件设计思想 ………………………………………………………32

2.3 资源分配 …………………………………………………………………33 2.3.1 内存资源分配 ……………………………………………………33 2.3.2 端口资源分配 ……………………………………………………34 2.4 软件模块化设计 …………………………………………………………35 2.4.1 系统主流程图 ……………………………………………………36 2.4.2 测试显示流程图 …………………………………………………38 2.4.3 寻迹处理流程图 …………………………………………………39 2.4.4 读红外口流程图 …………………………………………………40

3

2.4.5 数据采集流程图 …………………………………………………41 2.4.6 路口分析处理流程图 ……………………………………………43 第3章 软件调试 …………………………………………………………………46 3.1 显示调试 …………………………………………………………………46 3.2 数据采集调试 ……………………………………………………………47 3.3 红外线调试 ………………………………………………………………48 3.4 寻迹调试 …………………………………………………………………48

3.5 路口分析调试 ……………………………………………………………49 3.6 壁距分析处理调试 ………………………………………………………50 3.7 系统集成调试 ……………………………………………………………51 第4章 结果分析 …………………………………………………………………52 4.1 相关测试数据 ……………………………………………………………52

4.1.1 光敏电阻数据 ……………………………………………………52 4.1.2 前后左右通道采集数值 …………………………………………52 4.1.3 小车相关数据 ……………………………………………………52 4.2 数据分析 …………………………………………………………………53 4.3 结论 ………………………………………………………………………53

结束语 …………………………………………………………………………54 致谢………………………………………………………………………………55 参考文献 …………………………………………………………………………56 附录A………………………………………………………………………………57 附录B………………………………………………………………………………63 附录C………………………………………………………………………………74

4

前 言

目前人工智能的出现和发展,促进了自动控制系统向更高层次即智能控制的发展。智能控制是一种无需人的干预就能够自主地驱动智能机器实现其自身目标的过程是用机器模拟人类智能的一个重要领域。智能控制技术包括分级递阶智能控制技术,模糊控制技术,专家控制技术,机器学习技术。智能机器人技术是机械电子,计算机,自动控制技术等多学科技术发展的结晶。其应用和发展将对人类21世纪的社会发展,经济发展,科技发展,生产力发展产生深远的影响。智能机器人是一个复杂而庞大系统,必须配备各种传感器,以便获得周围环境的必要信息,提供给智能机器人的智能控制系统进行决策和执行。其研究重点开始转向具有感觉环境模型,自主自导式的智能机器人。[4]视觉技术和多传感器组合技术都是研究的重点:研究阵列式触觉,力觉传感新型材料的人工皮肤,内传感器的产品化程序等。回顾以前成果,在1977年到1987年Apple公司重点研究轻型装配机器人,采用DD驱动和人工视觉等新技术,特点是高精度,高速度,高柔性,带视觉等。直至今天,中国“智水Ⅲ型”机器人和中国“月球车”的研制成功,它代表着人工智能控制技术在国内的进一步发展的结果,在今后智能控制技术领域仍然处于科技研究领域的热点问题。

随着现代化信息技术的飞跃发展,最近几年智能控制技术广泛的应用和研究。本文是阐述的智能小车穿越迷宫的问题,在该设计领域,智能控制发挥着重要的作用,扮演着不同的各种角色。该技术可用于做探测性实验和一些高科技的智能控制装置,比如航天领域,医学智能仪器,工业安全生产,农业,地质勘探,军事,仪器仪表,探测性智能测试,网络通信等领域占据了不可替代的重要地位。

该智能小车主要是解决在自由穿越迷宫过程中的实现智能控制的目的,在该过程中小车不能与四周墙壁接触,能在路口实现智能的判断。通过红外线传感器部分电路来充当小车的感官系统(数据采集系统),用单片机来做小车的大脑思维系统即数据中央处理系统,最终由信息执行系统(电机驱动电路部分)来做出所对

5

应的行为动作。在该过程中的所有参数信息由小车的信息显示系统来显示。本设计包括的部分有信息采集部分,信息转换部分,信息执行部分,信息处理部分,信息显示部分,红外遥控部分,码盘检测部分,电源供电部分。该设计适用于各种比较复杂的工作环境,适应能力强,扩展性好,低功耗,方便而且具有灵活性。在今后的智能发展中能得到广泛的应用,具备一定的发展前景。

第1章 硬件设计

1.1 设计方案论证 1.1.1 传感器选择方案论证

方案一:

本方案采用红外线反射开关型的传感器,用于前后左右方向的数据采集,在左右车轮内侧检测车轮的码盘黑白相隔的条纹,黑白条纹为68格,可以检测到34个脉冲,小车车轮直径为6cm,一个条纹的宽度为2.2mm 。由于黑白条纹之间的宽度太小,红外线反射传感器的发射端是以一定范围的角度发射出去,在很近的情况下,接收端受到发射端的干扰,造成了很大的误差,使得检测到的脉冲不精确。在前后左右方向用该传感器能达到预期的效果,没有什么干扰的问题。 在小车寻迹过程中,采用的是光敏电阻作为寻迹的传感器,如果地面是白色的,采用黑色线条,反之,采用白色线条。无光照时,黑白地面反射电阻为大于500千欧和小于200千欧。

方案二:

本方案采用的红外线反射开关型传感器和红外线直射型传感器相结合。用红外线反射传感器采集小车四个方向的模拟数据,实现小车的方向控制和判断。用红外线直射传感器来检测小车车轮码盘。本设计的车轮的选用透明的塑料,车轮直径为6cm,内侧的黑白条纹为128格,目的是为了让检测到的脉冲更加精确。该能检测到的脉冲最大个数为128/2=64个,而每个条纹的宽度为1.2mm。当红外线直射传感器发射端以一定的范围发出红外线,当有一束光穿过车轮,接收端马上就能接收该信号,立即产生一个脉冲。这样设计提高了码盘检测的精确性,屏蔽了干扰信号,确保小车运动更加准确。在小车寻迹过程中,采用的是光敏电

6

阻作为寻迹的传感器,如果地面是白色的,采用黑色线条,反之,采用白色线条。无光照时,黑白地面反射电阻为大于500千欧和小于200千欧。迷宫通道宽度为20cm。

由以上两个方案的比较,本设计采用了第二个方案。它主要的好处在于码盘检测处用了红外线直射传感器,精确了脉冲的检测,屏蔽了检测脉冲时信号的干扰问题,提高了小车运动的准确性。

1.1.2 机械设计方案

本设计的功能主要是完成穿越迷宫,在此过程中,对小车的各方面的要求度

高。由于考虑到小车在迷宫中的灵活性,我们采用了三个车轮的设计思想,该设计思想具有很好的灵活性,快捷方便。小车长为13cm,小车宽为11cm,其中前面的左右两个轮子用于控制小车在迷宫中的方向和驱动小车前进,而后面用的是一个四方都活动的万向轮,它在运动的过程中非常灵活,容易由前面的左右车轮控制方向。我们把安装电机的部位设计在左右车轮之间,2个电机相互对称,使

图1.1.2 车体设计示意图 其左右车轮部位受力相等,保证力矩力臂相等,并将其固定在车底板上。将小车 的能源部分安装在车尾,这样可以使小车运动的时候各个部位能够达到平衡。

7

1.1.3 小车传感器布局

本布局根据图1.1.2示意图将前左右三个方向的红外线反射开关传感器放置

在小车的车头,其作用是用于前进时方便检测和判断该三个方向的情况,有助于检测小车车体是否已穿过墙体。在车尾放置一个红外线反射开关传感器用于检测小车在倒退时的情况处理。而红外线直射传感器是放置在小车左右车轮旁边,将车轮安放在发射管和接收管之间大约是车轮半径的1/6距离。我们将寻迹传感器光敏电阻放置在小车底盘下面,接近于地面,离地面距离约为1cm。

1.2工作原理

本设计采用AT89S52作为整个系统的核心控制器(数据处理中心),小车通过

模拟信号采集系统,采集的模拟信号经过信号转换系统转换为数字信号,送入数据处理中心进行相关处理和加工,在将处理后的数据来判别信息执行系统所做出的相关执行动作,同时将处理后的信息数据送入信息显示系统将具体参数和状态显示出来。

1.3 系统结构

本系统为了实现系统需求分析的要求,将系统硬件结构划分为8大部分,包括有信息采集部分,信息转换部分,信息执行部分,信息处理部分(数据处理中心),信息显示部分,红外遥控部分,码盘检测部分,电源供电部分。它们之间的关系如下:

信息采集部分 信息转换部分 红外遥控部分

数 据 处 理 中 心 码盘检测部分 信息显示部分 8 电源供电部分 信息执行部分(驱动电机)

图1.3 系统结构示意图

1.4 硬件芯片介绍 1.4.1 AT89S52芯片 ⑴功能特性描述

AT89S52是一种低功耗,高性能CMOS 8位微控制器,具有8KB在系统可编程Flash存储器。使用ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上FLASH允许程序存储器在系统可编程,亦适于常规编程器。该芯片拥有灵巧的8位CPU和在系统可编程FLASH,使得AT89S52为众多嵌入式控制应用系统提供高灵活,超有效的解决方案。

AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

⑵引脚结构

9

图1.4.1 引脚结构示意图

该芯片采用PDIP40封装形式,共40条功能引脚。 以下是相关引脚说明: VCC:电源 GND:地

P0口:是一个8位漏极开路的双向I/O口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验 时,需要外部上拉电阻。

P1口:P1口是一个具有内部上拉电阻的8 位双向I/O 口,p1输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。 在flash编程和校验时,P1口接收低8位地址字节。

表1-4-1-1 P1口引脚第二功能 引脚号 第二功能 P1.0 T2 (定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) 10

P1.5 P1.6 P1.7 MOSI(在系统编程用) MISO(在系统编程用) SCK (在系统编程用) P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。

P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。

表1-4-1-2 P3口引脚第二功能 引脚号 第二功能 P3.0 RXD (串行输入) P3.1 TXD(串行输出) P3.2 INT0(外部中断0)低电平有效 P3.3 INT1(外部中断1)低电平有效 P3.4 T0(定时器0外部输入) P3.5 T1(定时器1外部输入) P3.6 WR(外部数据存储器写选通)低电平有效 P3.7 RD(外部数据存储器读选通)低电平有效 RST: 复位输入。晶振工作时,RST脚持续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。 ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置 “1”,ALE操作将无效。这一位置

11

“1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。

PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。 当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。

EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。

XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2:振荡器反相放大器的输出端。

⑶特殊功能寄存器

定时器2 寄存器:寄存器T2CON 和T2MOD 包含定时器2 的控制位和状态位,寄存器对RCAP2H和RCAP2L是定时器2的捕捉/自动重载寄存器。

表1-4-1-3 T2CON格式 T2CON地址为0C8H 可位寻址 复位值:0000H TF2 EXF2 PLCLK TCLK EXEN2 TR2 C/ˉT2 CP/ˉRL2 7 6 5 4 3 2 1 0 中断寄存器:各中断允许位在IE寄存器中,六个中断源的两个优先级也可在IE中设置。

表1-4-1-4 IE格式 (MSB) (LSB) EA - ET2 ES ET1 EX1 ET0 EX0 中断允许控制位=1,允许中断 中断允许控制位=0,禁止中断 双数据指针寄存器:为了更有利于访问内部和外部数据存储器,系统提供了两路16位数据指针寄存器:位于SFR中82H~83H的DP0和位于84H~85H的DP1。特殊寄存器AUXR中DPS=0 选择DP0;DPS=1 选择DP1。用户应该在访问数据指针寄存器前先初始化DPS至合理的值。

⑷看门狗定时器

WDT是一种需要软件控制的复位方式。WDT 由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(WDTRST)构成。WDT 在默认情况下无法工作;为了激活WDT,户用必须往WDTRST 寄存器(地址:0A6H)中依次写入01EH 和0E1H。

12

当WDT激活后,晶振工作,WDT在每个机器周期都会增加。WDT计时周期依赖于外部时钟频率。除了复位(硬件复位或WDT溢出复位),没有办法停止WDT工作。当WDT溢出,它将驱动RSR引脚一个高个电平输出。[1]

1.4.2 TLC1543 A/D转换 ⑴ TLC1543的说明

TLC1543是CMOS,10位开关电容逐次逼近模数转换器。具有3个输入端和1个3态输出端[片选CS,输入/输出时钟I/O CLOCK,地址输入ADDRESS和数据输出DATAOUT],可以高速传输数据。

除了高速的转换器和通用的控制能力外,还具有一个片内的14通道多路器可以选择11个输入中的任何1个或3个内部自测试(self-test)电压中的一个。采样-保持的自动的。在转换结束时,“转换结束” (EOC)输出端变高以指示转换完成。转换器结合外部输入的差分高阻抗的基准电压,具有简化比率转换,刻度以及模拟电路与逻辑电路和电源噪声隔离的特点。开关电容的设计可以使在整个温度范围内有较小的转换误差。工作温度范围在0度到70度之间,峰值输入电流为正负20mA。

(2)特点

①10位分辨率A/D转换器; ②11个模拟输入通道; ③3路内置自测试方式; ④固有的采样与保持;

⑤总的不可调整误差+/-1LSB MAX; ⑥片内系统时钟;

⑦转换结束(End-of-Conversion,EOC)输出; ⑧采用了CMOS技术。

(3)引脚及特性

13

图1.4.2.1 引脚示意图

采用DIP封装形式,有20条功能引脚。引脚功能如下:

A0-A10:模拟输入端,这11个模拟信号输入由内部多路器选择,驱动源的阻抗必须小于等于1K。

CS:片选端,低电平有效。在CS端的一个由高至低变化将复位内部计数器并控制和使能DATA OUT,ADDRESS和I/O CLOCK,一个由低至高的变化将在一个设置时间内禁止ADDRESS和I/O CLOCK。

ADDRESS:串行数据输入端。一个4位的串行地址选择下一个即将被转换的所需的模拟输入或测试电压,串行数据以MSB为前导并在I/O CLOCK的前4个上升沿被移入。在4个地址位被读入地址寄存器后,这个输入端对后续的信号无效。

DATA OUT:用于A/D转换结果输出的3态串行输出端。DATA OUT在CS为高时处于高阻抗状态,而当CS为低时处于激活状态,CS一旦有效,按照前一次转换结果的MSB值将DATA OUT从高阻抗态转变成相应的逻辑电平。I/O CLOCK的下一个下降沿将根据MSB的下一位将DATA OUT驱动成相应的逻辑电平,剩下的各位依次移出,而LSB在I/O CLOCK的第九个下降沿出现。在I/O CLOCK的第十个下降沿,DATA OUT端被驱动为逻辑电平低,因此多于十个时钟时串行接口传送的是一些“0”

EOC:转换结束端,在第十个I/O CLOCK该输出端从逻辑高电平变为低电平并保持低直到转换完成及数据准备传输。

GND:地。GND是内部电路的地回路端,除另有说明外,所以电压测量都相对于GND。

I/O CLOCK:输入输出时钟端。I/O CLOCK接收串行输入并完成4个功能:在前4个上升沿,它将4个输入地址位键入地址寄存器,在低4个上升沿之后多路器地址有效;在第4个下降沿,在选定的多路器输入端上的模拟输入电压开始向电容器充电并继续到第十个下降沿;它将前一次转换的数据的其余9位移出DATA

14

OUT端;在第十个下降沿它将转换的控制信号传送到内部的状态控制器。

REF+:正基准电压端。 REF-:负基准电压端。 VCC: 正电源端。

(4)典型等效输入

采样方式时的输入电路阻抗:

图1.4.2.2 采样等效电路

保持方式时的输入电路阻抗:

图1.4.2.3 保持等效电路

(5)工作过程和时序图

工作过程如下:

选用的方式1即快速方式,10时钟传送,当转换周期时CS变高。在该方式下,串行I/O CLOCK传送之间CS无效,并且每次传送10个时钟。CS的下降沿使DATA OUT引脚脱离高阻抗状态并启动一次I/O CLOCK的工作过程。CS的上升沿终止这个过程并在规定的延迟时间内使DATA OUT回到高阻抗状态。同时,CS的上升沿在经过一个设置时间加两个内部系统时钟的下降沿后禁止I/OCLOCK和ADDRESS端。 时序图如下:

15

图1.4.2.4 时序图

注释:为了减少由于CS的噪声引起的误差,在CS下降后内部电路在响应控制输入信号之前等待一个设置时间加上2个内部系统时钟的下降沿。所以,在最小的设置时间消逝以前不要企图输入地址。

(6)相关数值计算

图1.4.2.5 驱动源的等效输入电路

简化的模拟输入分析如下:

采用图1.3.2.5的等效电路,在1/2LSB中将模拟输入电容从0充到VS所需的时间可推导如下:

电容所充的电压:

-tc/RtCi

Vc=Vs(1-e

其中:

) (1.4.2-1)

Rt=Rs+ri (1.4.2-2)

1/2LSB达到的最终电压:

Vc(1/2LSB)=Vs-(Vs/2048) (1.4.2-3) 将(1.4.2-1)代入(1.4.2-2)解出tc:

-tc/RtCi

Vs-(Vs/2048)= Vs(1-e) (1.4.2-4)

16

可得:

tc(1/2LSB)=Rt×Ci×㏑(2048) (1.4.2-5)

所以,在给定值的条件下,模拟输入信号的建立时间是:

tc(1/2LSB)=(Rs+1KΩ)×60pF×㏑(2048) (1.4.2-6)

VI=输入端A0-A10的输入电压 Vs=外部驱动源电压

Rs=源电阻 ri=输入电阻 Ci=输入电容 对驱动源的要求:

*源的噪声与失真必须与转换器的分辨率同等; *在输入频率声Rs必须为实数。

1.4.3 LM358双运算放大器 采用DIP8封装形式,有8条功能引脚。

17

图1.4.3 内部结构示意图

LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合[5]。

相关参数值:

内部频率补偿;

直流电压增益高(约100dB); 单位增益频带宽(约1MHz); 电源电压范围宽:单电源(3—30V); 双电源(±1.5一±15V) ; 低功耗电流,适合于电池供电 ; 低输入偏流;

低输入失调电压和失调电流; 共模输入电压范围宽,包括接地; 差模输入电压范围宽,等于电源电压范围; 输出电压摆幅大(0至Vcc-1.5V)。

18

1.4.4 LM234四运算放大器

采用DIP14封装形式,有14条功能引脚。

图1.4.4 内部结构示意图

该芯片价格便宜,具有[5]:

短路保护输出; 真差动输入级;

单电源工作:3.0V到32V; 低输入偏置电流最大为100nA; 每一个封装四个放大器; 内部补偿;

共模范围扩展到负电源; 行业标准引脚输出; 工作温度范围为0到70度

1.4.5 串行接口8位LED显示驱动器MAX7219 ⑴ MAX7219的介绍

MAX7219是一种高集成化的的串行输入/输出共阴极显示驱动器, 可实现

微处理器与7段码的接口, 可以显示8 位或64 位单一LED 。芯片上包括BCD 码译码器、多位扫描电路、段驱动器、位驱动器、内含8 ×8 位静态RAM ,用于存放显示数据。只需外接一个电阻就可为所有的LED 提供段电流。

19

MAX7219的三线串行接口适用于所有微处理器,单一位数据可被寻址和修正,无需重写整个显示器。MAX7219 具有软件译码和硬件译码两种功能, 软件译码是根据各段笔划与数据位的对应关系进行编码, 硬件译码采用BCD码(简称B 码) 译码。MAX7219 工作模式包括150μA 低压电源关闭模式、模拟数字亮度控制、限扫寄存器(允许用户从第1位数字显示到第8位) 及测试模式(点亮所有LED) 。

⑵ MAX7219引脚功能和引脚排列 引脚排列如下:

图1.4.5 引脚示意图

采用DIP封装,有24条引脚。其功能如下:

DIN:串行数据输入端,时钟上升沿时,数据存入内部的16位移位寄存器。 DIG0-7:显示器位驱动线8位。 GND:地线。

LOAD:输入数据装载端。在装载的上升沿,串行输入的最后一个16位数据被锁存。

CLK:时钟输入端。最大频率10MHZ,时钟上升沿时数据移入,时钟下降沿时数据从串行数据输出口输出。 A-G,DP:显示器段驱动线8位

Iset:段电流输入端。通过连接在V+端与Iset端之间的电阻Rset设置段电

20

流的大小。 V+:电源。

DOUT:串行数据输出端。从DIN端输入的数据经过16.5个时钟周期后输出

到DOUT端。

⑶ MAX7219控制字

MAX7219 有14 个可寻址的控制字寄存器(如表1-4-5-1) , 控制字寄存器由芯片的8 ×8 双端口SRAM 识别,SRAM 直接寻址, 这样单一的位能被更改或保留, 条件是电源电压明显大于2V 。控制字寄存器包括译码模式、显示强度、扫描限制(被扫描位的个数) 、关闭模式、显示测试(点亮所有的LED) 。另外还有一个空操作寄存器, 该寄存器允许数据从DIN 直送DOUT , 在设备串接情况下, 不会改变显示或影响任何控制寄存器。串行数据格式16位(如表1-4-5-2)。

表1-4-5-1 控制寄存器 寄存器 地址 16进制D15-D12 D11 D10 D9 D8 码 空操作 × 0 0 0 0 ×0 Bit 0 × 0 0 0 1 ×1 Bit 1 × 0 0 1 0 ×2 Bit 2 × 0 0 1 1 ×3 Bit 3 × 0 1 0 0 ×4 Bit 4 × 0 1 0 1 ×5 Bit 5 × 0 1 1 0 ×6 Bit 6 × 0 1 1 1 ×7 Bit 7 × 1 0 0 0 ×8 译码模式 × 1 0 0 1 ×9 强度 × 1 0 1 0 ×A 限扫 × 1 0 1 1 ×B 关闭 × 1 1 0 0 ×C 显示测试 × 1 1 1 1 ×F 表1-4-5-2 数据格式 D15D14D13D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 × 地址 数据 本设计中MAX7219的应用关键代码如下:

;测试寄存器地址为0FH,数据01H为测试,00H为正常工作 ;7219的8个数码管的地址为01H(最低位)到08H(最高位) ;发送子程序,数据由R3(地址)和R4(数据)带来,共发16位

21

;B译码为BCD码,0AH~0EH为-,E,H,L,P,OFH为消隐,小数点为8XH ;f7219为送显示数据函数 mov a7219,#0ch mov d7219,#01h acall f7219 mov a7219,#09h mov d7219,#0ffh acall f7219 mov a7219,#0bh mov d7219,#07h acall f7219 mov a7219,#0ah mov d7219,#02h

;亮度寄存器地址

;最大亮度为0FH,此为较低亮度 ;扫描范围寄存器地址 ;8位全扫 ;封锁寄存器地址 ;数据,解锁,转正常工作 ;去发送一个数据到7219 ;译码方式寄存器地址 ;8位数码均为B译码

acall f7219 ;写亮度 mov a7219,#0fh ;测试地址 mov d7219,#00h ;不测试,正常工作 acall f7219

1.4.6 红外遥控原理 ⑴ 基本原理

一个红外接收头,非常简单好用,只有三个引脚:+5V,地,信号输出。其

14ms“1” 0.4ms数字“0” 4ms 空闲 空闲 8ms 4ms 引导信间隔

图1.4.6.1 红外遥控信号经解调后的波形

用户识

别码 0000001

间隔

键数据码(“6”键)

00010101

22

输出的信号已经是经过解调滤波还原了的数字信号,直接用数字存储示波器观察信号波形。发现其一帧信号的波形可分为三个部分:引导码,用户识别码和键数据码,三个部分之间有4ms的间隔宽度,无信号(即空闲时)为高电平。引导码为8ms宽的低电平;用户识别码为8位二进制数据,以正脉冲的宽度区别“0”和“1”,窄脉冲为0.4ms,宽脉冲为1.4ms,传送顺序为先传低位后传高位,用户识别码数据为“00000010”,表为16进制为“02H”;键数据码编码与用户识别码的编码方法相同,不同的键对应不同的数据。

⑵ 载波波形

使用455KHZ晶体,经内部分频电路,信号被调制为37.91KHZ,占空比约为1/3。

图1.4.6.2 波形示意图 由FCAR=1/TC=FOSC/12得:FCAR=38KHZ FOSC是晶振频率[10] 占空比=T1/TC=1/3

⑶ 数据格式

数据格式为每一帧数据包括8位自定义码和8位数据码,共16位,自定义码和数据码后还有同步位.[10]

图1.4.6.3 数据格式

23

1.4.7 红外线传感器 ⑴ 红外线的介绍

红外线它是太阳光谱中的一部分光线,不在人类的视觉范围之内,属于一种不可见光线。它的最大的特点是具有光热效应,辐射热量,具有反射,折射,干涉,吸收等光的性质,在真空中的传播速度为3×108m/s。在空气中传播会产生衰减,红外辐射能透过大部分半导体和一些塑料,并且很多液体能对红外辐射吸收很大。[8]根据实验分析表明,对于波长为1-5微米和8-14微米区域的红外光具有较大的“透明度”等。本设计中采用的是TX05D型号的红外线反射和直射开关传感器,运用了红外线的一个反射特性。

⑵ TX05D工作原理

TX05D是接收和发送一体化的红外线反射开关传感器。它是由一个发光二极

管和一个光电二极管组成。当TX05D发出一信号后,就等待接收信号的到来。如果前方没有物体或障碍物,就没有返回信号;如果前方出现物体或障碍物,则返回相对应的信号,此时表明前方有阻碍物。将信号通过模数转换后发送给单片机。再此过程中,发射端发出信号后就连续发送,接收端就开始等待反射信号的到来,在此接收和发送之间具有一定的间隔时间,用来判断发送信号和接收信号。

1.4.8 驱动电机

该设计采用的小功率直流普通电机,需提供的电压在+7.2V。该电机有10个加速档,满速为10,用脉冲宽度调制PWM来实现电机的加速和减速功能。由单片机输出的脉冲来控制,脉冲波形如下:

图1.4.8 电机脉冲格式示意图

设脉冲的周期为TC,加速时间为TA,减速时间为TB,则TC=TA+TB,当TA=10,TB=0时电机处于最大转速,而当TB=10,TA=0时电机减速为停止状态,TA与TB复为反比。电机的加减速由高脉冲的宽度来控制实现的,为了实现该功能我们在电路中加入了74ls00用于控制脉冲和l293b来驱动电机[14]。

24

1.5 主要电路图的设计[11] 1.5.1 电源供电部分电路

图1.5.1 电源部分

电路分析说明:该电路中采用了A1117稳压管,输入+7.2V通过电压转换后稳

压到+5V,其中,+7.2V用来驱动电机部分,+5V供单片机和其它部分做工作电源。采用的是6节干电池(每节1.2V),该电池组可以进行充电。其它的电容是用于消除干扰,D01发光二极管用于指示电源是否正常。

25

1.5.2 码盘检测部分电路

图1.5.2 码盘检测

电路分析说明:该电路中JP301和JP311用于接收发一体的光电管,用于产生一个脉冲,由于车轮内侧是由黑白相间的条纹组成,当有发光发生回来,就说明经过了一次黑白相间的条纹,即一个脉冲。该车轮转一圈为64个脉冲。当检测到的脉冲信号通过反馈放大电路LM358将信号放大后,通过P3.2和P3.3向单片机产生一个外部中断信号。

26

1.5.3 信息采集部分和信息转换部分电路

图 1.5.3 数据采集

27

电路分析说明:该电路是用于采集数据和转换数据,前后左右是采用的TX05D反射开关传感器,在寻迹部分采用的光敏电阻,通过LM358和LM324将信号放大送TLC1543转换后送单片机中处理。该电路中的电容的作用是用于信号的滤波,保证信号的准确性。

1.5.4 红外遥控部分和数据处理中心电路

图1.5.4 数据处理

电路分析说明:电路中AN01是整个系统的复位键,用于系统复位。ISP部分是支持系统在线编程技术,在编程方面灵活,方便。JP02接红外线接收解码电路,用于红外线的测试和小车基本测试。ISP为在线编程接口,方便可靠的编程。

28

1.5.5 信息显示部分电路

图1.5.5 显示部分

电路分析说明:采用MAX7219实现串并转换,将数据从LED中显示出来,节约

了单片机端口资源。

29

1.5.6 信息执行部分电路(驱动电机)

图1.5.6 电机驱动

电路分析说明:用L293D来驱动控制电机的正转和反转。节约单片机端口资

源,控制方便可靠灵活。

30

第2章 软件设计

2.1 算法论证

方案1:

算法思想:采用堆栈法,利用堆栈的特点,将小车前进每达到一个路口节点的信息存放在堆栈中,在小车后退时遇到路口节点把此时基于栈顶的节点信息取出,与该路口节点信息进行比较。假设相同,小车就继续后退,删除前一个节点信息。反之,修改当前节点信息,将修改后的节点信息压入堆栈中。

具体方法:在单片机的数据存储器中开辟一个堆栈区,定义好栈底基址和栈顶指针。用二进制0和1来表示小车方向是否有障碍物,0表示为不通,1表示通。将用00000xxxb中的后三位来表示前左右三个方向的情况,将倒数第一个x来表示小车右方向,倒数第二个x来表示小车前方向,倒数第三个x来表示小车左方向。在小车处于路口时,规定三个方向的优先顺序为左前右,即小车处于左通时不论是什么条件都左转90度,然后在看其它两个方向。假设小车前进处于一个路口节点,此时小车的前通左通右不通,该节点状态字就为00000110b,将状态字压入堆栈,此时栈顶指针加1,以此类推;假设小车后退时,处于一个它前进时的一个最近的路口节点,即状态字为00000110b,而此时小车处于一个后通左不通右通时,状态字为00000011b,用该状态字与00000110b进行比较。若相等,不改变栈顶状态字,栈顶指针减1,删除该节点信息状态字,小车右转90度前进(小车后退时右转相当于前进时的左转,此时前进就是小车后退)。反之不相等,将栈顶取出删除上一个节点状态字00000110b,栈顶指针减1。此时修改状态字为00000011b,将其压入堆栈中保存起来,栈顶指针加1,小车继续后退。以此类推可得。

方案2:

算法思想:采用随机判断障碍物方法。小车在路口的时候,遇到有障碍物就转方向,找到新的通道,再调整小车与墙壁之间的距离,将小车放在迷宫通道中间,继续前进。我们将路口方向规定为前左右后通道优先的次序,遇到死胡同就后退。

具体方法:小车在前进时,只要其中有通道没有障碍物,小车就转向该方向,如果遇到了死胡同,就后退。在去判断后面的通道情况,就这样循环的执行下去,

31

直到找到出口为止。该算法有可能一直在迷宫中循环,从而找不到迷宫的出口。因为在小车遇到死胡同后,小车后退的时候,不是沿着前进时的路线返回。而是有可能走别的路线,这样就导致了路线的混乱,就容易重复的出现已走过的路线,而无限的进行下去。该思想不是很成熟简单,不宜采用。

根据以上2个方案的优缺点比较,我们最终采用了方案1,作为本设计的理想算,该算法思想成熟,易于实现。

2.2 系统软件设计思想

设计思想:采用软件模块化的思想,将系统所有的需求进行模块化的设计和模块细分,其结构简单清晰,逻辑性强,易于软件的维护优化和调试。在该设计的基本需求分析的基础上,搭建一个具有合理性的系统软件构架。首先考虑到系统所以要完成的三个关键的功能是小车寻迹,数据采集和穿越迷宫的路口分析算法。然后完成信息的显示,电机的执行。该系统所有相关的模块设计流程见附录A。以下是模块化思想流程示意图2.2:

数据采集模块 寻迹模块 主模块 红外线模块 显示模块 测控模块 路口分析模块 电机驱动模块 中断模块 数据采集模块 壁距分析处理模块

图2.2 模块化思想流程示意图

32

备注说明:图2.2模块化思想示意图中的前头方向用于表示模块之间的调用过程关系。

2.3 资源分配 2.3.1 内存资源分配

a7219 equ 5fh ;MAX7219d7219 equ 5eh ;n7219 equ 5dh ;hh equ 5ch ;mm equ 5bh ;ss equ 5ah ;ms equ 59h ;xcq equ 51h ;xsfs equ 50h ;jzh equ 4fh ;zjsd equ 40h ;zjsg equ 41h ;yjsd equ 42h ;yjsg equ 43h ;ad00 equ 44h ;ad01 equ 45h ;ad02 equ 46h ;ad03 equ 47h ;ad04 equ 48h ;ad05 equ 49h ;adtd equ 4ah ;xczt equ 4bh ;xcztt equ 4ch ;zjsdt equ 4dh ;存放显示数据的单元 存放MAX7219的地址单元 存放MAX7219工作单元 存放时计数 存放分计数 存放秒计数

对T0(50ms)辅助计数,20次为1s 显示缓存区51H~58H 显示方式 红外遥控按键值

左车轮编码脉冲计数低字节 左车轮编码脉冲计数高字节 右车轮编码脉冲计数低字节 右车轮编码脉冲计数高字节 模拟通道0,前 模拟通道1,左 模拟通道2,右 模拟通道3,后 模拟通道4,左寻迹 模拟通道5,右寻迹

对4路模拟通道的巡回检测当前通道号 小车运动状态,0,1,2,3,4-停,前,左,右,退 小车运动状态暂存 左车轮计数低字节暂存

33

yjsdt equ 4eh ;右车轮计数低字节暂存 zxsld equ 4dh ;转向数量低字节 zxslg equ 5ch ;转向数量高字节 ssj equ 3fh ;读红外口间隔时间

ntw equ 3eh ;PWM中断计数器(对T1中断) ntwkz equ 3dh ;ntwky equ 3ch ;jdzq equ 10h ;jdzz equ 30h ;ntwkzy equ 31h ;lsjsl equ 32h ;sxjgjs equ 33h ;ysss equ 34h ;lsjsta bit 78h ;lsjstb bit 77h ;pwmtz bit 76h ;PWMsxjt bit 75h ;sxzt bit 74h ;yszt bit 73h ;xjjs bit 72h ;mgjs bit 71h ;2.3.2 端口资源分配

din bit p1.0 ;MAX7219load bit p1.1 ;MAX7219clk bit p1.2 ;MAX7219cs1543 bit p0.4 ;TLC1543dt1543 bit p0.5 ;TLC1543ad1543 bit p0.6 ;TLC1543ck1543 bit p0.7 ;TLC1543左电机PWM脉宽设置 右电机PWM脉宽设置

节点栈区首址 ;用于存放路口状态 节点指针

左右电机预置PWM脉宽

临时计数量,用于转向和过路口计数 刷新间隔计时 延时秒计数

临时计数状态a,用过路口延时(延路)标志临时计数状态b,用于转向标志 调整态,用于前进\\后退时调整距壁 刷新交替显示逻辑 刷新状态 延时状态 寻迹结束态 迷宫通过态

数据线

片选,低电平有效 时钟

的片选,低电平有效 的数据输出口 的地址输出口 的工作时钟

34

ec1543 bit p1.7 ;TLC1543的转换结束信号线 ; p3.2 左车轮编码检测输入,INT0中断 ; p3.3 右车轮编码检测输入,INT1中断 zjen bit p3.5 ;左电机电源控制 hwk bit p3.6 ;红外遥控信号输入口 yjen bit p3.7 ;右电机电源控制

zjfx bit p2.0 ;左电机方向控制口,0为正转,1为反转 yjfx bit p2.1 ;右电机方向控制口,0为正转,1为反转 zxjk bit p2.2 ;左寻迹检测信号输入口 yxjk bit p2.3 ;右寻迹检测信号输入口

; p0.0~p0.3 作前、左、右、后的光电检测的LED控制口

2.4 软件模块化设计

本系统除了硬件支持以外还需要软件的驱动,我们采用的汇编语言来进行软件设计。执行效率高,速度快,直接依附于硬件系统。采用的是自底向上的开发流程,确定好低层模块的功能,最终集成为一个系统。

本系统的功能是完成小车寻迹,以穿越迷宫为目的,在该过程中不能碰壁,显示出全过程的时间。根据系统的需求,定义了几个核心的模块软件即系统主流程,红外线接收,寻迹处理,路口分析,数据采集,显示。以下是几个重要子程序流程图设计以及相关的说明。

35

2.4.1系统主流程图

图2.3.1 系统主流程图

36

本模块是整个系统的主模块,实现了各个子模块的调用。以伪代码描述如下:

??

acall csh ;调用系统初始化 daiming:acall 测试显示

acall 读红外口 ;从该模块中读回遥控键值 acall acall cjne cjne L1:acall jb xjjs,L1 ; L2: ?? acall acall acall jb mgjs,L2 ; ?? end ;采集数据 ;读回各模拟通道值

小车测控 ;主要测试小车左右转,前后转,脉冲检测记

数,显示通道值

键值,#0ffh,daiming ;是否有键按下 键值,#0eh,daiming ;是否为开关键 寻迹处理

查询寻迹结束

采集数据

进入迷宫主程序处理 寻迹处理

查询迷宫结束 结束迷宫

37

2.4.2 测试显示流程图

开始测试显示模块方式0:显示时间秒方式1:显示前通道值 方式2:显示左右通道值 00xx.xx方式3:显示左右寻迹通道值00xx.xx方式4:显示左右计数值xxx.xxx方式1送显存首地址送显示方式y取出秒地址将秒值送A将秒低位送第一位led显示修改地址指针方式0?nn方式2n方式3n方式4yy取通道值低位送第1位led显示修改地址指针y取右计数值个位送第1位led显示修改地址指针取右计数值十位送第2位led显示修改地址指针将秒高位送第二位led显示修改地址指针将第3.4.5.6位led显示00取通道值高位送第2位led显示修改地址指针取通道值低位送第3位led显示修改地址指针取右计数值百位送第3位led显示取左计数值个位送第4位led显示修改地址指针取左计数值十位送第5位led显示修改地址指针取左计数值百位送第6位led显示显示形成xxx.xxx,左右计数值送显示位数6位将地址指针指向显存地址向max7219发送数据修改地址指针显示形成00xx.xx,n+1和n通道值取通道值高位送第4位led显示修改地址指针00送第5.6位led显示6位完了?ny返回

图2.3.2 测试显示流程图

38

2.4.3 寻迹处理流程图

模块名称:寻迹处理xjqkcl备注:左右寻迹开始取左寻迹n取右寻迹ny电压值高于2vy不需调整左右电机脉冲置位寻迹结束标志左电机加速右电机减速不需调整左右电机脉冲电压值高于2vn右电机加速左电机减速电压值高于2vy取右寻迹返回

图2.3.3 寻迹处理流程图

该模块主要实现引导小车进入迷宫入口和判断是否找到了迷宫出口,以寻迹的方法来实现此功能。以伪代码描述如下:

??

mov a,取左寻迹通道值

cjne a,#20H,X1 ;判断左方是否高于2V电压 mov a, 取右寻迹通道值

cjne a,#20H,X2 ;判断右方是否高于2V电压 不需要调整左右电机脉冲 ret

X2:左电机减速,右电机加速 ret

X1: mov a, 取右寻迹通道值

cjne a,#20H,X3 ;判断右方是否高于2V电压 左电机加速,右电机减速 ret

39

不需要调整左右电机脉冲

setb xjjs ;寻迹结束 ret

2.4.4 读红外口流程图

模块名称:读红外口dhwk备注:红外信号口线为hwk,使用定 时器t1,ffh为无键按下,键值由jzh单元带回,使用01寄存器工作区,使用acc,cy,b,r2,20h单元,要读时钟秒ss单元,ssj为读红外口时间开始送ffh到jzh单元中,读秒单元nSs

用该模块来获得遥控键的键值,完成小车的测试工作,伪代码描述为:

40

??

jb hwk,$ ;等待第一个4ms的到来 acall 读识别码 ;判断识别码是否错误 jb hwk,$ ;等待第二个4ms的到来 acall 读取数据 ??

mov b,键值 ;保存遥控键值 ret

2.4.5 数据采集流程图

模块名称:当前通道模数转换Adzh备 注:转换ad00到ad05通道的数据开始送当前通道号将地址指针指向当前通道的数据存储地址读取高8位启动tlc1543读取数据8位读完了?y关闭tlc1543保存数据调用二进制转bcd指向下一个通道nn6个通道完了?y送第一个通道调下一个通道转换返回

图2.3.5 数据采集流程图

41

该模块设计中TLC1543采用快速方式1,10个脉冲作为的数据采集,在转换期间CS是无效的,其关键以下是一个脉冲的数据采集:

clr cs1543;启动1543转换 ?? rlc a

mov ad1543,c;先发送转换通道地址4位 setb ck1543 ;发一个脉冲 clr ck1543 ??

setb ck1543 ;发送一个脉冲

setb dt1543 ;移出最高位,先发送高位,在发送低位 mov c,dt1543 rlc a

clr ck1543 ;一个脉冲结束 ?? ret

42

2.4.6 路口分析处理流程图

模块名称:路口分析处理qkcl备 注:分析路口四面是否畅通,控制小车的转向,采用节点堆栈算法,达到小车走出迷宫要求。00h,01h,02h,03h,04h分别表示小车停止,前进,左转,右转,后退状态开始送小车状态y为停止态?n返回小车寻迹处理n是否左寻迹?yn是否右寻迹?ySetb mgjs返回Ad01减去ad02nCy=1?y左电机加速调整左右壁距Ad02减去ad01送ana与10h比较?ynA=0?y左右壁距相等,送左右电机预设脉冲09Setb pwmtzaa送小车状态nXczt=01?y 送前ad00到anA=05h?yCy=1?n前通y前不通看左通不?N左通Cy=1?y左不通看右通不?Cy=1?n右通y右不通死胡同,送小车后退04h,小车后退返回看左通不?Cy=1?N左无壁y左不通看右通不?n右通Cy=1?y右不通返回送小车状态xcztb43

bnXczt=01?y送小车lsjslXczt=04?y送小车lsjsl调整左右电机脉冲 clr pwmtzne看右通不?Cy=1?N 右通Y 右不通小车左转90度,前进返回将节点状态101,压栈等待小车车体过墙小车左转优先暂停小车采集7个通道值n看其他状态Xczt=01?cy看前通不?n前通Cy=1?y前不通看左通不?Cy=1?y不通看右通不?N 右通Cy=1?y右不通送小车后退04,小车后退返回fN 左通e小车右转90度送小车前进状态01fd送小车右转状态03左转90度,前进返回小车前进返回

d前通看左通不?Cy=1?看右通不?N右通Cy=1?Y右不通送前进态01,前进小车前进返回返回将节点状态011压栈将节点状态111,压栈送小车左转02,左转90度返回送小车前进态01小车前进返回送小车前进态01N 左通Cy=1?N右通看右通不?Y右不通将节点状态110,压栈送小车左转02,左转90度Y 左不通送前进态01,前进

44

c不是前进nXczt=04?Y后退送ad03到a中Y后通A=0?N后不通送ad01到a中A=0?Y左通I小车后退返回送ad02到a中小车左转90度,后退Y右通A=0?N右不通小车前进返回n等于010?y101改为001N 是111等于011?y011改为001右转90,前进返回n等于001?y111改为011右转90,前进删除此节点左转90度,后退返回小车左转180度,前进删除此节点小车后退返回取出上一节点状态Y右通送ad01到a中A=0?Y左通返回N左不通送ad02到a中A=0?N右不通送小车后退04N左不通送ad02到a中Y右通A=0?N右不通送小车前进态01取出上一节点状态

I 后不通/左通送ad02到a中Y 右通N 右不通 A=0?取出上一节点状态y为001?N 是110110改为010小车右转90,前进删除此节点小车左转90度,后退返回小车右转90,后退返回

图2.3.6 路口分析处理流程图

45

第3章 软件调试

我们将软件分为显示程序,数据采集程序,红外线程序,寻迹程序,路口分析程序,壁距分析处理程序。采用部分调试法,将各个部分程序分别的调试通过,最后将所有的程序组合在一起调试,达到预期的目标。

3.1 显示调试

检测max7219显示驱动部分电路,待硬件没有错误能正常运行后,在写一个简单的显示程序用于测试max7129的各个显示功能。初始化控制的亮度和译码方式以及扫描范围,关键代码如下:

mov a7219,#09h ;译码方式寄存器地址 mov d7219,#0ffh;8位数码均为B译码 acall f7219 ;发送数据 mov mov

a7219,#0bh ;扫描范围寄存器地址 d7219,#07h ;8位全扫

acall f7219 ;发送数据 mov mov

a7219,#0ah ;亮度寄存器地址

d7219,#02h ;最大亮度为0FH,此为较低亮度

acall f7219 ;写亮度

继续调试检测向max7219写入显示数据,根据它的工作时序脉冲来发送数据位,如果该发送数据没有成功,那么在数码管上就没有任何显示,我们采用这样的方法来进行一步步的验证,最终效果非常理想。以下是发送数据重要代码:

f72191: clr c ;清CY rlc mov

a ;先发高位,后发低位 din,c ;将高位送到数据输入引脚上

nop ;延时2us,6MZH晶振 setb clk ;发送一个脉冲 nop ;延时2us nop ;延时2us clr

clk ;结束一个脉冲

46

3.2 数据采集调试

在这个过程中,我们主要是针对于6路传感器进行数据采集的验证,首先我们检测前后通道所采集的数据,并把相关数据显示出来,以做数据分析。我们发现当传感器距离障碍物比较进是时候,它所转换的电压值非常大,大约在5v左右,随着距离的加大,电压值逐渐降低,直到为0v。说明超出传感器的检测范围,通过不断的观察和记录的数据分析,数据采集通道工作正常。其它通道也如此。我们充分的利用了数码管显示资源,以观测数据的大小和是否正确得到转换结果。调试数据采集重要代码:

??发送地址4位 adzx1:rlc a mov ad1543,c setb ck1543

;从高位发起 ;数据上线 ;发一个时钟脉冲

clr ck1543 ;结束一个脉冲 djnz r2,adzx1 mov r2,#06h

;连发4位

;再发6个时钟脉冲填充

adzx2:setb ck1543 ;空读6位 clr ck1543 ;结束一个脉冲 djnzr2,adzx2 ;6位发完了? setb cs1543 ??发送数据8位

setb ck1543 ;发送一个脉冲 setb dt1543 ;将数据输出置1 mov c,dt1543

;从DATAOUT引脚读1位数据

;10位发送完后,拉起片选电平,结束这个访问周期

rlc a ;移位1位数据 clr ck1543 ;一个脉冲发送结束 djnz r2,adz01 mov r2,#02h

;连读8位

;再空读2位(不用,放弃)

adz02:setb ck1543 ;读2位空数据做填补10脉冲 mov c,dt1543 ;从DATAOUT引脚读1位数据 clr ck1543 ;结束一个脉冲

47

djnz r2,adz02 ;2位空读完了? setb cs1543 mov @r0,a ??

在脉冲检测这部分,采用的中断脉冲计数来控制车轮的转向,并将计数的脉冲显示在数码管上。充分的利用了单片机中断,在车轮转动的过程中,脉冲个数在数码管上不断的累计加1,当转一圈时为64个脉冲数,这与我们前面方案论证中所讲的十分吻合,进一步说明了脉冲检测部分工作正常并十分稳定。

;结束此次访问周期,拉起CS电平 ;将转换的数据保存

3.3 红外线调试

首先测试的遥控器发送的数据,看单片机能否正确的接收到数据,检测是否有编码解调错误,通过显示部分显示出所按的遥控按键。主要测试了“0”(19H),“1”(10H),“2”(11H),“3”(12H),“4”(13H),“5”(14H),“6”(15H),“7”(16H)该8个遥控键,通过测试程序,当按下1键时,在显示上就马上显示一个1,如果无显示或其它数字就证明接收数据错误,修改接收程序。通过反复测试,结果一样,这样证明了该遥控接收程序是正确的。

最后测试用遥控来指挥小车的左右转和前进后退,其中我们定义的按键“4”,“5”为左右转,“6”,“7”为前进后退。系统上电以后,在遥控器上按下“4”时,小车小车左转,按下“5”时小车右转,其他的按键也能完成定义的功能,通过多次验证,调试成功。

3.4 寻迹调试

在测试左右寻迹通道时,采用的是黑白相间的两种颜色,小车通过这两种颜色时,其电压值有不同的变化。根据测试发现,当小车寻迹通道处于黑色地面上,它所采集的数据其电压值在2V以下,而在白色地面上其电压值在2V到4V以上,从这里可以确定寻迹通道工作正常,其效果明显。利用数码显示管可以观测到电压值的变化,光敏电阻对黑色的反光比较弱,而白色的比较反光比较强,而我们的光敏电阻放在里地面距离L大约是1cm。如果是黑色的电阻R大于500千欧,反之是白色电阻小于200千欧。经测量电流I为0.4mA,由以下公式可以计算电

48

压值的变化:

由欧姆定律公式I=U/R得:U=I×R,I恒为不变,R随L变化而变化。即: 若是黑色地面:U>I×500KΩ,得:U>2.0V ,表明已寻迹. 若是白色地面: U

3.5 路口分析调试

首先我们测试的是最基本的小车左右转和前进后退,在小车左右转90度的过程中,采用的检测车轮脉冲个数来实现转90度。由于存在误差关系,导致左右转的脉冲个数不一样,由于车轮一圈为64个脉冲,转90度时取的28个脉冲,在每个路口延时一段时间(大约为25个脉冲),主要用于小车车体通过墙体。关键代码如下:

??

mov lsjsl,#28 ;送转向脉冲个数 setb lsjstb ;设置临时记数态b acall xczz/acall xcyz;调用小车左右转子程序 jb lsjstb,$ ;进入外部中断0 ??

先测试的是左转,把小车放在一个简单的迷宫路口,左面是通的,小车就左转。在该过程中,需要调整左右的壁距,使得小车处于通道的中心,防止小车碰壁。然后根据这样的方法继续调试右转和前进后退。需要调整小车左右两边的边距,使小车前进或后退不能碰壁,顺利完成穿越迷宫。当小车转弯后,前进了几步,此时小车又转弯,没有按照预期的想法前进;经过反复思考和观察,我们发现小车转弯后,还没有完全的走过路口,此时我们就开始采集数据,在次判断方向,使小车没有按照正确的轨迹前进。为了解决该问题,采用了小车转弯后延时的方法,用延时5个脉冲,该5个脉冲能达到小车走过路口,经过路口后在去采集数据,在判断分析,通过程序的运行观察,小车避免了这样的误差,通过了转弯的调试过程。

该任务调试通过后,我们就按照前面的算法(堆栈法),一步步的进行调试。由于考虑到太阳光线下的干扰信号,在取传感器的值时为08H,大约为1.0V左右有效。首先我们考虑的是小车前进时所遇到的所有情况,如死胡同(000),前

49

通左通右不通(110),前通左不通右通(011),前通左不通右不通(010),前不通左不通右通(001),前不通左通右不通(100),前不通左通右通(101),全部通(111)。通过算法中所规定的优先顺序转方向,并且将节点信息压入堆栈中。将前进时所遇到的情况调试通过后,在继续进行后退过程中的所有情况。在后退时与前进的区别在于要进行节点信息的比较,在调用相关的转向子程序,修改节点信息和删除一样的节点信息。其修改信息节点主要代码为:

??

mov a,#jdzq ;取出栈区首地址 add a,jdzz ;找到栈顶 mov r1,a ;取出栈顶信息 mov a,@r1 ;取出节点状态值

cjne a,#信息节点,qq ;比较信息节点,相等就删除,否则转qq dec jdzz ;删除信息节点 ?? qq:

mov @r1,#信息节点 ;修改保存信息节点 ??

在左右转向测试充分利用了P2.5,P2.7两个发光LED,当小车发现左通时P2.5发亮,转向后熄灭,右通时P2.7发亮,如果都通时同时一起亮,等待转向后熄灭。以这LED为标志态,来反复调试以达到最佳效果。

就这样一步步的调试下去,经过不断的努力,最后调试全部通过,需要进一步的修改程序代码。

3.6 壁距分析处理程序调试

壁距分析处理的作用用于小车在迷宫通道中转向后,不论是前进或后退均要进行左右墙壁距离小车的宽度。使小车在前进或后退时保持与墙壁的距离,避免小车与迷宫的墙壁相碰而产生数据采集和小车运动轨迹的误差。

处理方法:取出左右两路传感器所采集到的数据,先用左路数据值减去右路数据值,看差值的大小。我们允许误差差值大小在0.0V到1.0V之间,如果是左路大于右路值并且大于了1.0V,那么说明小车靠近左墙壁,此时左电机加速,

50

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

Top