此时,也可以说:
只要接通电源就完成了系统的复位初始化功能。
图2-1单片机复位示意图
2.2.2手动按键复位
所谓手动按键复位(如图2-1所示),是指通过人工手动操作、让单片机最小系统中的一个指定按键的产生动作而进入复位状态。
在单片机系统进行上电运行后,通常条件下是通过手动按键复位实现来实现单片机的复位功能。
因此,在实际应用中我们一般采用上电复位和手动按键复位两种复位方式相结合的形式来实现单片机的复位功能。
2.2.3看门狗复位
所谓看门狗复位,其实是通过软件编写程序进行复位。
如:
MOV0A6H,#01EH;先送1EMOV0A6H,#0E1H;后送E1。
单片机89S51的看门狗软件正常工作的前提条件是必须依靠程序激活,因此我们首先要保证的一点就是单片机的上电复位功能能够可靠运行,反之,看门狗复位功能将处于功能失效模式使之无法进行正常监控和可靠复位。
另外,看门狗复位功能能够运行的决定性因素是晶振能够正常可靠运行。
2.2.4单片机最小系统
单片机最小系统(如图2-2所示)是指单片机在能够正常工作的前提下使用的最少硬件组合。
而51系列的单片机基本上都是兼容的,所以51单片机的最小系统电路图基本一致。
该部分区域的外围电路图主要由电源、晶体振荡器、电解电容、复位电路四个部分组成。
这里以STC89C51单片机为例,介绍51单片机的最小系统电路。
图2-2单片机最小系统示意图
根据单片机最小系统示意图可以看出:
该51最小系统的电路图是由外接晶振通过两个30pf的电容接地,同时采用了手动按键复位和上电自动复位电路。
该电路可以实现复位及程序运行的基本功能,对于其它一些兼容型号的单片机同样适用。
而且对于所有51单片机的程序设计电路图都是在此基础上进行的。
2.3电机驱动模块
但凡做寻光、循迹之类的实验都需要物体运动,所以电机自然不可缺少。
因地鼠需要完成直线与转弯运动,所以该地鼠至少应备有两个电机。
在这里我们暂且先不考虑电机的选择,因为仅让小地鼠实现转弯一个功能就可以有多种方案。
众所周知,只要当地鼠两个轮子转速不同时,即让两个轮子的相对运动速度不为零。
该地鼠就可以实现转弯的功能。
另外如果朝一个方向给小地鼠前面两个轮子一个力,让小地鼠前轮轴与后轮轴形成一个小夹角,即通过外力使地鼠的两个前轮朝着要转向的方向偏转,就像小汽车通过方向盘来改变车轮的偏转方向一样。
这样小地鼠也可以实现转弯运动。
很明显,让前轮偏转需要机械力来完成,无论是使用步进电机还是使用其他机械力,都会使小地鼠的内部结构变得复杂。
这违背了制作小地鼠简单、经济与方便的初衷。
所以就小地鼠转弯的角度考虑,选择改变地鼠两个轮子的转速这一方案为佳。
下面要面临的问题是如何改变电机转速以及如何选用电机。
根据电机学可以知道:
电机分为直流电机与交流电机两大类型。
根据
(2-3-1)可以得出直流电机转速公式为:
(2-3-2)
其中
为额定电压,
为额定磁通,
为电动势常数,
为转矩常数,
(2-3-3)为理想空载转速。
直流电动机的固有机械特性为一条下斜线,斜率
(2-3-4),斜率越小,直线越平,固有特性越硬。
由电动机转速公式可知:
改变直流电机的转速有改变电压、改变电枢回路总电阻和弱磁调节。
改变电压调速的方法是:
首先通过保持每极磁通为额定磁通并且电枢回路中间不进行电阻串联的方式,只人为的对电枢电压值的大小进行改变。
由于受电机绝缘的限制,改变电压通常为降压方式。
此时电机的固有机械特性保持不变,只是转速变小了。
改变电枢回路总电阻的方法是:
通过保持电枢电压为额定电压并且在额定磁通下的方式,其次在电枢回路中与外接电阻进行串联。
由公式可知:
电机的固有机械特性变软的充分条件是在保持负载转矩不变的情况下,串联电阻与电机转速之间将会呈现反比例关系,
改变磁通一般都是降低磁通,因为当直流电机处于额定磁通下运行时的方式下,磁通已经接近饱和状态,此时磁通总体变化不大,而电流变化却很大,由于电机绝缘性能的限制,所以只能降低磁通。
通常方法是在励磁回路串联电阻,通过调节励磁电流来降低磁通,此时电机的固有特性也会改变。
交流电机还可以进行改变极对数和变频调速。
因为要求小地鼠的制作简单方便,所以选择直流电机。
这样可以使用7~12V直流电驱动电机,现实中很容易实现。
下面要说的是为何选择直流减速电机而不选择步进减速电机。
有点电机基础的都知道在电机学中直流电机和步进电机是有很大区别的:
比如在理论上只要给直流电机的输入端加上合适的电压——额定电压,那么直流电机就可以正常输出——实现运转功能,而且在实际生活中我们会发现——直流电机运转的圈数难以得到精确控制;而步进电机在正常的工作模式下则可以精确旋转到0.1度,因为它是依靠输入的节拍数来决定的。
步进电机减速和直流电机减速都是在各自的基础上增加齿轮或其它方法进行减速。
另外,两者的控制方式也大不相同,步进电机正常运行的前提条件是必需要在输入端形成控制节拍,小型步进电机可以用ULN2003驱动,而小型的直流电机利用L298N芯片驱动,用PWM调速进行控制,考虑到小地鼠需要做直线与转弯运动,而且使用直流电机比用步进电机所用的元器件少。
又因为步进电机的转子具有一定的惯性,所以步进电机在工作中不能立即启动和停止。
在启动时应慢慢地逐渐加速到预定速度,而在停止前应逐渐减速到停止,否则电机将产生失步现象。
如果用软件利用单片机定时器控制步进电机,在加速阶段时,需要通过建立库或表,把定时器的初值存放在表中,而且定时器的初值应从小到大排列;同理,减速时,也应把定时器的初值放在另一表中,初值按照从大到小排列。
而直流减速电机的控制相对简单,只需要改变占空比就可以做加速、减速运动。
所以,直流电机更适合驱动小地鼠运行。
因为直流电机转速很大,实际生活中若不加控制很容易失控。
比如做小车,速度太大很容易使小车飞出跑道。
而加了减速装置时,用单片机就很容易控制了。
选好了电机,下面该选择驱动了。
驱动方法一般分为搭建电路驱动和L298N芯片进行驱动。
该电机可以使用三极管的放大电路进行驱动。
事实上由于缺少元器件而且自己搭建外围电路时,缺少焊接电路所需的烙铁和锡,所以被迫取消搭建电路的方案。
下面我想介绍一下L298N电机驱动芯片。
驱动芯片:
内部含有双H桥形式的芯片L298N。
驱动端子的供电范围是5V~35V,如果需要从芯片板的内部直接获取电源电压,则供电的范围改变为7V~35V。
逻辑部分端子供电范围5V~7V——可从芯片板的内部直接获取5V电源电压。
使能端信号控制为高电平有效。
有四个输入端和四个输出端,可以驱动两个直流减速电机,电源使用的是7.2V可充电电池包。
2.4数字光模块
在这里我想首先解释一下为什么选数字量而不是开关量。
选用数字量的好处是结果直观、方便。
开关量输出的只有0和1两种结果,显而易见,当地鼠的两个光芯片在一定范围内同时接受到光时,并不能保证光就在小地鼠的正前方。
此时,如果小地鼠做直线运动,那么小地鼠便会与光失之交臂,也就是说小地鼠无法正确寻光。
因此,为了能保证小地鼠可以正确寻光,我选择数字光模块芯片。
因为只有当光在小地鼠正前方所在的平面上,小地鼠两边光芯片输出的值才相等。
这样小地鼠才不会因为与光不在同一直线上而跑偏。
下面该讲光强模块了:
数字光,顾名思义就是把光的强弱转变成数字的大小。
这样我们只要通过比较数字的大小就可以比较光的强弱,进而实现寻光。
本文选取的内置数字光芯片为BH1750FVI的数字光模块GY_30。
该芯片特点如下:
1、
总线接口(f/s模式支持)
2、光谱的范围与人眼相近
3、照度数字转换器
4、宽范围和高分解(1勒克斯-65535勒克斯)
5、低电流关机功能
6、50HZ/60HZ光噪声reject-function
7、1.8V逻辑输入接口
8、无需任何外部零件
9、光源依赖性不大
10、是有可能的选择的2类型
slave-adress
11、可调的光学窗口测量结果的影响
12、小测变异
13、红外线的影响很小
GY-30光强模块引脚及功能描述如下:
VCC:
供给电压3V-5V
SCL:
IIC总线时钟线
SDA:
IIC总线数据线
ADDR:
IIC地址引脚
GND:
电源地
第三章软件部分
本章主要讲地鼠的软件部分内容,分为三大部分:
单片机基本指令部分、PWM的调试部分和数字光的测试部分。
系统讲述了各部分内容、调试原理、方法以及详细过程。
本章是本篇论文的核心部分,它不仅为小地鼠提供理论支持,还可以让小地鼠在现实中准确寻光。
3.1单片机指令
单片机指令一般有两种,一种是汇编语言,特点是直接操纵硬件、生成代码高、简单明了,相当于机器语言的缩写。
另一种是C语言,移植性比较好,代码效率也比较高,可以对部分硬件直接访问。
因C较熟悉,本章仅简单介绍基本汇编语言。
3.1.1基本指令
MOVA,Rn;寄存器送A
MOVCA,@A+DPTR;由((A)+(DPTR))寻址的程序存贮器字节选A
MOVXA,@Ri;送外部数据(8位地址)送A
PUSHdirect;直接字节进栈,SP加1
POPdirect;直接字节退栈,SP减1
XCHA,Rn;交换A和寄存器
SWAPA;
3.1.2算数操作
(A的二个半字节交换)
ADDA,Rn;寄存器加到A
SUBBA,Rn;A减去寄存器和进位位
MULAB;A乘以B
DIVAB;A除以B
DAA;A的十进制加法调整
3.1.3逻辑操作
ANLA,Rn;寄存器“与”到A
ORLA,Rn;寄存器“或”到A
XRLA,Rn;寄存器“异或”到A
CLRA;清零
3.1.4程序转移
LCALLaddr16;长子程序调用
RETIaddr11;中断调用返回
LJMPaddr16;长转移
JZ;A为零转移
CJNEA,direct,rel;直接字节与A比较,不等则转移
DJNZRn,rel;寄存器减1,不为零则转移
3.1.5布尔变量操作
ANLC,bit;直接数“与”到进位
ORLC,bit;直接位“或”到进位
JCrel;进位位为1转移
3.2PWM调试
讲到PWM大家肯定都不陌生,根据电力学可以知道:
PWM有等幅和不等幅之分。
为了实验的简单性,本文没有选用外接电路,而是根据PWM的特点,利用单片机软件编程做出简易的PWM。
下面本文来重点介绍一下PWM的主要思想以及软件实现的方法。
脉冲宽度调制(PWM)在单片机中是一种通过软件编程——写0或者写1的方式使得外部所获取的模拟信号发生变化的编码方法。
利用单片机定时器或计数器可以进行高低电平转换的功能,输出一系列不同占空比的方波。
那么,所获取的模拟信号就可以被调制出来。
由于在任意的最小时间段中,直流供电如果不是满幅值供电,那肯定就是完全不供电。
所以,此时的PWM信号就是由一系列的0和1组成的信号。
我们通过导通在负载上的电压或电流源或关断在负载上的电压或电流源的两种基本方式,把重复脉冲序列的电压或电流源连接到模拟负载上去。
即利用高频脉冲通过控制通电与断电之间的比例来控制输出部分的电压。
综上所述:
在单片机中只要带宽能够满足要求,那么任何范围的模拟量都可以通过PWM技术的形式实现。
3.2.1软件实现方法
可以采用单片机的定时器中断的功能来实现PWM技术,只需要在一定周期内的某段时间对管脚进行置1或清0即可。
即把一个周期分为若干个时间段,在一段时间内对管脚进行操作。
所以可以把每个时间段作为一个中断。
这样只需要根据中断次数改变对管脚的操作就可以改变占空比,进而实现软件PWM,也就可以对小地鼠的运行速度进行控制了。
具体程序见附录
(一)。
具体调试过程如下:
本次调试的内容主要是中断周期和PWM总驱动时间和PWM开驱动时间。
所达到的效果是小车可以持续运行。
如果中断周期过小会出现小车由于物理惯性来不及运动而静止不动;反之,中断周期过大则会出现小车走一会停一会的现象;另外占空比过小会让小车不能持续运行;占空比过大则使小车速度增大,不易控制。
因此,经测试中断周期设置为THT1=0EBH,TLT1=00H;占空比为70%(可以改变占空比而改变速度)可以满足要求。
3.31602简介
所谓1602液晶显示芯片,顾名思义指的是显示的内容为上下两行并且每一行都可以显示出16个字符。
字符型LCD1602通常分为两种形式——14条引脚线的字符型LCD和16条引脚线的字符型LCD。
而16条引脚线的字符型LCD比14条引脚线的字符型LCD多了背光电源线VCC(15脚)和接地线GND(16脚),并且它的控制原理和14个引脚线的字符型LCD一致,字符型LCD各引脚的定义及其作用如下表(3-3-1)所示:
表3-1LCD引脚功能表
1602芯片测试程序见附录
(二)。
3.4数字光模块测试
在介绍数字光测试之前,本文想先介绍一下IIC总线。
IIC即IIC,一种总线结构。
例如:
内存中的SPD信息,通过IIC,与BX芯片组联系,IIC存在于英特尔PIIX4结构体系中。
随着集成电路的普及与发展发展,通过集成的手段把CPU和一个最小工作系统所必需的模块,如:
程序存储器、数据存储器、输入输出端口、模数、数模转换模块等外围电路放在一个单元内对目前社会来说已然不是什么难题了。
因此,单片机或微处理器应运而出……现在,整个世界中已经有许多公司具备生产单片机的能力、并且生产的品种很多。
但众所周知的是,单片机运用最多的还是扩展技术,毕竟单片机的品种的规格十分有限。
而串行总线的出现又为单片机扩展硬件设计提供了基础。
因为扩展分为连接线多、结构复杂的并行总线扩展和连接线少而且结构也简单的串行总线扩展两种方式。
因此,现实生活中为了简化系统的硬件设计我们往往不采取专门为设备连接而设计的母板和插座,而是直接采用很少的几根导线——串行总线的方式来连接各个设备。
如PHILIPS公司早在十几年前就已经利用该总线可实现多主机系统所需的裁决和高低速设备同步等功能推出了高性能的IIC串行总线。
为了能够让两个IIC主设备中的任意一个设备都能与共享资源直接连接,飞利浦电子公司推出了能够广泛适用于从MP3播放器到服务器等计算、通信和网络应用领域并且可以让制造商和终端用户都能够从中获益的新型二选一IIC主选择器。
IIC串行总线一般含有具备双向传递功能的数据线SDA和同样具备双向传递功能的时钟线SCL两类信号线。
接线时我们可以把所有的串行数据SDA都接到总线的SDA上,所有的时钟线SCL接到总线的SCL上。
所有设备上的串行数据线SDA的接口电路——用于向总线上发送数据的输出电路,用于接收总线上面数据的输入电路都应具备双向传递功能的。
而作为接受主机命令的从机——不但具有按总线上的SCL信号发送或接收SDA上信号的功能、也具有向SCL线发送低电平信号用来延长总线时钟信号周期的功能以及作为控制总线数据传送的主机——不仅拥有通过SCL输出电路发送时钟信号的功能、还要拥有检测总线上的SCL电平来确定发送下一个时钟脉冲电平具体时刻的能力,两者之间相连接的串行时钟线同样也要具备双向传递功能。
防止总线信号读取或传递错误的充分条件是规定所有的设备连接到总线的输出端时一定要为漏极开路(OD)输出或者为集电极开路(OC)输出。
所有设备的SDA信号线均为逻辑“与”的关系,SCL信号线同样均为逻辑“与”的关系。
由此可以得出一个非常重要的结论:
如果当总线的状态处于空闲的时候,上拉电阻就可以把SDA和SCL线均拉到高电平状态。
此时但凡有一个设备输出的状态是低电平,那么该设备均能把与之对应的总线状态拉到低电平状态。
总线对NMOS和CMOS都可以进行兼容、而在IIC总线上的数据传送率可以达到每秒十万位,在高速方式下的数据传送率为每秒四十万位以上。
从此可以看出:
对于IIC总线来说,设备接口电路的制造工艺所使用的具体材料无任何特殊要求。
需强调的是:
总线上所允许连接的设备数量最终的限制条件是规定其电容量应小于400pF。
总线的运行(数据传输)由主机——一种具备启动数据的传送信号、对设备发出时钟信号和在传送结束时发送停止信号这些功能的设备控制。
通常情况下主机均为微处理器。
而从机的定义就是指能够被主机寻访的设备。
在主机与从机之间进行的数据传送应当是具有双向传递的功能,只要能够把数据成功发送到总线的设备均是发送器,同理,只要能够从总线上可以成功接收数据的设备就叫做接受器,且为了方便被主机进行准确寻访,规定所有接到IIC总线的设备均备有唯一的且与之相对应的一个地址。
IIC总线上可以允许连接多个微处理器和多个外围设备电路,如存储器、数码管和液晶显示屏驱动器、模数和数模转换器等。
IIC总线可以允许连接不同传送速率的设备。
多台设备之间的时钟信号的同步过程叫做同步化。
总线处于任意一个时刻时只能被其中一台主机控制,只有当总线状态处于空闲状态时,微处理器才能向其发送用于启动的数据指令。
只有满足上面的条件,才能保证数据在总线上能够进行可靠地传送。
才能更好的解决多台微处理器同时向总线发送启动的数据传送指令(总线控制权)冲突,和更加明确的确定到底是由由哪一台微处理器来控制总线的相关问题,
在IIC总线数据传输过程中可以首先定义两种特定的情况——当时钟信号线SCL状态为“高”电平时,数据信号线SDA的状态从“高”电平翻转成“低”电平时就是IIC总线开始传送数据的启动指令;当时钟信号线SCL的状态保持“高”电平并且数据信号线SDA的状态由“低”电平翻转成“高”电平时就是IIC总线停止数据传送的指令。
如果利用硬件接口技术则能够很轻松地检测到IIC总线的启动指令和停止指令,如果微机上没有这种硬件的接口的话,只需要通过软件技术在每个时钟周期中对数据信号线SDA的状态至少取样两次就能够把启动指令和停止指令检测出来。
所以,我们可以知道:
IIC总线的启动指令和停止指令都是从主控制器中发出。
在时钟信号线SCL位于在“高”电平期间数据信号线SDA线上的数据一定要处于稳定状态;反之,只有当时钟信号线SCL线上的状态变成“低”电平时,数据信号线SDA上的“高”或“低”两种状态才可以进行改变。
每次传输的字节没有特殊要求,但是输出到数据信号线SDA线上的每个字节一定要为8位,而且传输的每个字节必须要有一个应答信号ACK与之对应。
假若有一个接收器件在完成其他功能(例:
响应内部中断程序)前对另一组数据的字节无法进行完整的接收时,那么接收器件应当让时钟信号线SCL为“低”电平的状态,用来控制发送器呈现“等待”状态;而只有在接收器为数据的其它字节接收做好准备后时钟信号线SCL才能得到释放,数据的传输工作才可以继续进行。
当发送器处于应答期间时一定要把数据信号线SDA的状态下拉至“低”电平状态,而和应答信号对