智能可遥控小车-毕业论文 - 图文 下载本文

启动 记录里程/计时 Y 遥控 遥控行驶 寻光子程序 Y N 是否寻光 N 自动行驶 判断偏离 Y 转向子程序 N 是否遇障 Y 壁障子程序 N 黑线 Y 停车 N 21

图4-1系统流程图

4.2 软件抗干扰技术

提高小车智能控制的可靠性,仅靠硬件抗干扰是不够的,需要进一步借助于软件抗干扰技术来克服某些干扰。在单片机控制系统中,如能正确的采用软件抗干扰技术,与硬件干扰措施构成双道抗干扰防线,无疑为了将大大提高控制系统的可靠性。经常采用的软件抗干扰技术是数字滤波技术、指令冗余技术、软件陷阱技术等。

4.2.1 数字滤波技术

所谓数字滤波,就是通过一定的计算或判断程序减少干扰在有用信号中的比重。故实质上它是一种程序滤波。数字滤波克服了模拟滤波器的不足,它与模拟滤波器相比 ,有以下几个优点:

数字滤波是用程序实现的,不需要增加硬设备,所以可靠性高,稳定性好。 数字滤波可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便,功能强的特点。

数字滤波可以对频率很低的信号实现滤波,克服了模拟滤波器的缺陷。 数字滤波器具有以上优点,所以数字滤波在微机应用系统中得到了广泛应用。

4.2.2 软件陷阱技术

软件陷阱奇数,就是设定一段代码,将程序引导到专门对程序出错进行处理的程序。若这段程序的入口标签为ERR,软件陷阱即为一条无条件转移指令,为了加强其捕捉效果,一般还在它前面加两条 NOP 指令,因此真正的软件陷阱由以下3条指令构成:

NOP NOP ERR

软件陷阱安排在以下3种地方: (1)未使用的中断向量区。 (2)未使用的大片ROM空间 (3)表格

由于软件陷阱都安排在正常程序执行不到的地方,故不影响程序执行效率,在当前EPROM容量不成问题的条件下,还是多多益善。

4.2.3 “看门狗”技术

“看门狗”技术就是不断监视程序循环运行时间,若发现时间超过已知的循环设定时间,则认为系统陷入了“死循环”,然后强迫程序返回到0000H入口,在0000H处安排一段出错处理程序,使系统运行纳入正规。

“看门狗”技术可由硬件实现,可由软件实现,也可由两者结合实现。本系统采用硬

22

件“看门狗”电路。

1.实现硬件“看门狗”电路方案较多,目前采用较多的方案有以下几种: 2.采用微处理器监控器;

3.采用单稳态电路来实现“看门狗”,单稳定电路可采用74LS123; 4.采用内带震荡器的记数芯片。

5.本设计采用第三种方案实现“看门狗”电路,下面就对该方案作以介绍。 4.2.3.1 基本原理

CD4060 是带震荡器的14位计数器,由该芯片构成的看门狗电路如图4.2看门狗电路图所示。

4060记数频率由RT和CT决定。设实际的程序所需工作周期为T,分频器记满时间为T’,当T’>T 且系统正常工作时,程序每隔T对4060进行复位一次,分频且永无记满输出信号。如系统工作不正常(如程序跑飞、死循环等),4060接收不到复位信号,分频器记满输出一脉冲号使CPU复位。 4.2.3.2 参数选择

4060的振荡频率f由 RT 、CT决定。Rs用于改善振荡器的稳定性,Rs 要大于RT。一般取Rs=10RT,且RT>1kΩ,CT≥100pF。如果Rs=450Ω,RT=45Ω,CT=1uF,则f=10HZ。4060的振荡频率和Qi(i=6,7,8,9,10,12,13,14)的选择要根据情况确定。 4.2.3.3 几个原则

看门狗电路必须由硬件逻辑组成,不宜由可编程计数器充当,因为CPU失控后,可能会修改可编程器件参数,使看门狗失效。

4060的RST线上阻容组成的微分电路很重要,因为扫描输入信号是CPU产生的正脉冲,若此信号变“1”后,由于干扰,程序乱飞,微分电路只能让上跳沿通过,不会封死4060,看门狗仍能计数起作用。若没有微分电路,扫描输入信号上的“1”状态封死4060,使之不能记数,看门狗不起作用。

图4-2看门狗电路图

CPU必须在正确完成所有工作后才能发扫描输入信号,且程序中发扫描信号的地方不

23

能太多。否则,正好在哪里有死循环,看门狗就不产生记满输出信号,不能重新启动CPU。

4.3 程序设计

软件设计采用模块化设计,思路清晰,也便于查找问题。

4.3.1 红外解码

4.3.1.1 UPD6121G的编码

UPD6121G产生的遥控编码是连续的32位二进制码组,其中前16位为用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰。芯片厂商把用户识别码固定为十六进制的一组数;后16位为8位操作码(功能码)及其反码。UPD6121G最多额128种不同组合的编码。遥控器在按键按下后,周期性地发出同一种32位二进制码,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在45~63ms之间。当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms的编码脉冲,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。如果键按下超过108ms仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。图4-3为红外遥控编码图(a)和红外遥控信号周期性波形(b)。

图4-3(a)红外遥控解码图

图4-3(b)红外遥控信号周期性波形

根据UPD6121的编码规则,我门可以确定解码的规则。解码的关键是如何识别“0”和“1”,从位的定义我们可以发现“0”、“1”均以0.56ms的低电平开始,不同的是高电平的宽度不同,“0”为0.56ms,“1”为1.68ms,如图4-4所示,所以必须根据高电平的宽度区别“0”和“1”。如果从0.56ms低电平过后,开始延时,0.56ms以后,若读到的电平为低,说明该位为“0”,反之则为“1”,为了可靠起见,延时必须比0.56ms长些,但又不能超过1.12ms,否则如果该位为“0”,读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms最为可靠,一般取0.84ms左右均可。

24