一、项目介绍
摘 要
一台能自主规避障碍、边行进边吸尘的小型机器人,设计并实现了一款基于STC89C52单片机的小型清扫机器人系统。系统以STC89C52单片机作为核心控制器,将E18-D80NK红外避障传感器、L298N电机驱动模块、BD681风扇驱动电路与按键输入电路有机整合,最终实现了自动避障与吸尘清扫的联动功能。其工作逻辑清晰而紧凑:按下启动键后小车向前行进;一旦左侧传感器探测到障碍,小车即刻右转,右侧传感器触发则自动左转;转向动作的同时,风扇随之启动完成吸尘;按下停止键后,行进与吸尘同步终止。
硬件设计是这套系统得以稳定运行的物质基础。单片机最小系统由复位电路、时钟电路与电源电路共同构成,为主控芯片提供可靠的工作环境。在感知层,E18-D80NK光电传感器以其3至80厘米可调的检测距离和干净的数字信号输出,为避障决策提供了精准的环境信息。然而,感知到障碍仅是第一步,如何将这一信息转化为有效的执行动作,才是设计的关键所在。在驱动层,BD681达林顿三极管有效弥补了单片机自身驱动能力的不足,使风扇得以可靠运转;L298N双H桥芯片则承担起对两路直流电机的独立转向控制,赋予小车灵活机动的基础能力。正是这种从感知到决策再到执行的完整驱动链路,构成了整个系统的硬件骨架。
软件设计在此基础上为系统注入了行为逻辑。程序采用C语言在Keil环境下编写,以循环扫描机制持续轮询按键与传感器状态,并据此实时调度电机与风扇的工作模式。整体架构遵循模块化原则,主程序之下清晰划分了按键处理、红外避障、电机控制与风扇控制四个功能子程序。这种结构上的解耦,不仅降低了各模块之间的逻辑耦合度,更在实际调试与后续维护中展现出明显的工程价值。
经过硬件调试、软件联调与完整的功能验证,系统各项指标均稳定达到设计要求。低成本、简洁的架构设计使本系统兼具双重意义:作为智能清扫机器人的简易原型,它验证了以最小硬件冗余实现核心功能的可行路径;作为单片机课程设计的典型案例,它将感知、决策与执行三个核心环节浓缩于一个完整且可复现的工程实践之中,这本身便是其超越产品层面的教学价值所在。
关键词:STC89C52;单片机;清扫机器人;红外避障;L298N;电机驱动
主要研究内容
本论文的主要内容如下:系统总体方案设计,确定了系统的功能需求以及实现方式,系统硬件模块和软件模块的划分;接着进行了硬件电路设计,包括stc89c52单片机最小系统电路、按键电路、红外避障传感器接口电路、风扇驱动电路、l298n电机驱动电路的设计与实现;然后进行了软件程序设计,在keil开发环境下使用c语言编写了主程序及相关子程序模块,实现了避障判断、电机控制和风扇启停等功能;最后进行了系统调试与功能验证,对系统功能进行测试,看是否满足设计要求,对测试结果进行分析。
系统组成结构
根据功能要求,本系统由以下几个部分组成:
(1)控制核心模块:采用STC89C52单片机,负责接收输入信号、进行逻辑判断、输出控制信号。单片机最小系统包括复位电路、时钟电路和电源电路,确保单片机能够正常工作。
(2)输入模块:包括2路红外避障传感器和2路按键。红外避障传感器用于检测前方是否有障碍物,输出数字信号给单片机;按键用于输入启动和停止指令,实现人机交互。
(3)输出模块:包括L298N电机驱动模块和BD681风扇驱动模块。电机驱动模块控制两个直流电机的正转、反转和停止,实现小车的前进、左转和右转;风扇驱动模块控制吸尘风扇的启停。
(4)电源模块:由电池盒供电,为单片机、传感器、驱动模块等提供稳定的工作电压。各模块的工作电压均为5V,便于统一供电。
系统工作流程
初始化程序: 开机后单片机初始化,包括初始化io口、定时器等,然后单片机进入等待状态。按键检测程序: 单片机循环检测启动键和停止键,若启动键被按下,则进入运行程序;若停止键被按下,则单片机进入停止程序。运行程序: 单片机反复检测两个红外避障接收器的输出电平,根据输入信号控制小车前进后退以及风扇的转动。若左侧接收器检测到障碍物,则反向驱动电机使小车右转并启动风扇;若右侧接收器检测到障碍物,则反向驱动电机使小车左转并启动风扇;若两个接收器都没有检测到障碍物,则正向驱动电机使小车前进并关闭风扇。停止程序: 反向驱动电机使小车停止运动,风扇停止转动。单片机回到等待状态,等待下次启动。
STC89C52单片机核心电路设计
stc89c52rc是stc专门为需要低功耗、高性能cmos8位微控制器,系统可编程flash存贮器。stc89c52是具有传统mcs-51兼容性的低功耗,高性能cmos8位单片机。在单芯片上,包括了8位cpu,8k字节可编程flash快擦写存储器,是传统51不具备的。stc89c52在单芯片上把具有8位cpu和在系统可编程flash存贮器结合在一起,为众多嵌入式控制应用系统提供了高灵活,高经济性的解决方案。
stc89c52主要特征: 8k字节flash程序存储器 512字节ram数据存储器 32位i/o口线 看门狗定时器 内置4kb eeprom max810复位电路 3个16位定时器计数器 4个外部中断 一个7向量4级中断结构 全双工串行口。stc89c52允许逻辑操作和掉电运行。stc89c52通过内部振荡器在0hz和高于fosc12t周期内部逻辑操作。stc89c52支持2种软件可选节电模式: 空闲模式: cpu停机,而ram和定时器计数器pwm,串行口及中断系统仍旧工作。掉电保护方式: ram保存,振荡器停止振荡,单片机一切停止工作,直到下一个中断或硬件复位。stc89c52最高运作频率35m,6t12t可选。
stc89c52的特点: 8k字节的程序空间;512字节的数据空间;内置4k字节eeprom;可以通过串口直接下载程序。主要参数: 增强型8051单片机,6或12clock唯机器周期,指令与传统8051指令代码兼容,工作电压范围5.5v3.3v,工作频率040mhz,通用io口32个,上电后p1p2p3口是准双向口,弱上拉,p0口是漏极开路输出,具有ispiap功能,可以通过串口直接下载用户程序,16位定时器计数器共有3个,外部中断4路。工作温度范围: -40~+85℃。
STC89C52单片机相关引脚说明如下:VCC为供电电压引脚,GND为接地引脚;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脚两个机器周期的高电平时间;ALE/PROG为地址锁存允许输出;/PSEN为外部程序存储器的选通信号;/EA/VPP为外部程序存储器允许引脚;XTAL1和XTAL2为晶振输入输出引脚。单片机引脚图如图所示。
二、文档介绍
三、項目设计
编程语言选择
由于程序相对比较复杂,涉及到许多的输入输出信号的检测和控制,需要编写主要程序和几个子程序模块,程序的编写采用c语言。对于一般的单片机应用开发,使用c语言这样的高级语言与使用汇编语言相比有许多优点。1、使用c语言,就不必去研究处理器的指令集,不必去烦人地研究存储器结构,可以把精力集中在算法和逻辑功能部分的实现上。2、寄存器分配、地址的指定和寻址方式由编译器自动生成,编程时不再去费脑子考虑存储器的绝对地址,也不再去记忆和查找数据类型在存储器中的格式和存放地址,减轻了程序员的负担。3、指定某一个操作的变量选择组合,使得程序员更容易掌握,也使得程序更清晰,更便于后期的维护和修改。4、c语言使用类英文关键字和操作函数,更容易让人想起,使用也更简单。
5与汇编语言相比,c语言程序的编程和调试时间大为缩短。在keil等集成开发环境中,可以单步跟踪、设置断点、观察变量等进行调试,调试方便。6c语言提供了许多标准的库文件,如数学、字符串等常用程序已经编好,可以直接调用,不需自己编写,节省了编程时间。8c语言可移植性好,应用广泛 c语言编译器几乎适用于所有的目标系统,用c语言编写的程序很容易从一个系统移植到另一个系统。已编制好的程序模块可以通过修改或重新编写部分模块而方便地加入到新程序中,从而节省新程序的编制时间。7利用c语言可编制模块化编程技术,从而可将已编制好的程序模块方便地加入到新程序中,节省新程序的编制时间。9汇编语言不易学,不易用,功能不强,结构性、可读性差,可移植性、可维护性差。c语言有上述汇编语言的功能优势,有结构性、可读性好,易学易用,可移植性好,可维护性强等优点,因此,本系统选用c语言编程。
Keil软件设计思想
keil软件是单片机开发者常用的开发软件,比较简单的单片机系统就是使用这种开发软件进行开发的,可以减少开发周期,这样就可以减少很多成本,所以keil软件深受开发人员的喜欢和使用。本系统采用keil软件进行程序编写、编译和调试。
keil软件提供了丰富的使用环境和调用子程序库,在全体打开窗口中可以方便的调用和查看这些资源。keil软件的一个特点是提供了大量的集成代码,使用者可以知道其中的乐趣,会感觉到此keil软件非常好用,也正因为如此,keil软件越来越受到广大使用者的欢迎,其中最主要的原因就是它大多数代码都是集成的,调用非常方便,即使初学者也会感觉很好用,上手的门槛可以不高。
keil软件支持c语言和汇编语言的混合编程,具有强大的编译和调试功能。在开发较大的软件时,更能体现出高级语言的优越性。keil软件有多种调试方式:软件模拟调试和硬件仿真调试。软件模拟调试方式下,在没有硬件的情况下也能运行程序,观察程序执行流程和变量变化。在硬件仿真调试方式下,通过仿真器连接目标硬件,方便观察程序的运行情况,设置断点,单步执行,方便查找和解决程序中的问题。
本系统在keil uvision4环境下进行开发,利用其强大的编辑、编译和调试功能,完成所有程序的编写和测试。
主函数程序流程图
系统主程序采用循环扫描工作方式。上电后初始化,包括设置io口方向(输入或输出)、初始化定时器、初始化变量等。初始化完成后进入主循环,在主循环里面不断地检测按键输入、传感器输入,根据输入作相应的控制输出。
程序main流程如下: 第一步:初始化。设置各个io口工作模式。设置电机、风扇驱动引脚为输出模式,设置按键、传感器引脚为输入模式,初始化相关变量。第二步:检测启动按键。如果有启动按键按下,设置运行标志为1,即程序进入运行状态;否则,第三步:检测停止按键。如果有停止按键按下,清除运行标志,控制电机停,风扇停;否则,第四步:如果运行标志为1,读取左右红外避障传感器输入状态。如果左侧传感器检测到障碍物,控制小车右转并启动风扇,接着返回第三步;如果右侧传感器检测到障碍物,控制小车左转并启动风扇,接着返回第三步;如果两侧均未检测到障碍物,控制小车前进并关闭风扇,接着返回第三步;如果运行标志不为1,返回第二步,继续循环检测。
这种循环扫描的工作方式结构简单,逻辑清晰,能够满足本系统的实时性要求。主程序流程图如图所示。
按键电路设计
轻触按键与按键产品 轻触按键是按键的一种。一般可以把它当作电子开关,轻轻一压,开关接通,松开即断开。其主要原理就是轻触按键内的金属弹片受力弹动而达到接通与断开。在系统中,轻触按键是系统的输入,是人机交互的枢纽。 按键电路原理 按键的一端接地,另一端接单片机的io口,然后在io口和vcc之间接上一个上拉电阻。当按键没有按下时,单片机的io口通过上拉电阻连接到vcc,因此单片机接到的输入信号为高电平;当按键按下时,io口通过按键接地,因此单片机接到的输入信号为低电平。单片机是通过检测io口的电平来判断按键是否被按下的。 软件去抖动 由于按键在按下和释放时都存在机械抖动,因此电平会在短时间内变化数次,如果不进行处理单片机就会误判为按键多次动作。软件去抖动最简单的方法就是,在检测到电平变化后,延时20ms左右再重新检测,如果此时还是有效电平,则确认按键动作。
本系统设计了两个按键:一个用于启动系统,一个用于停止系统。按键的单片机控制引脚默认为高电平,当按键按下后,单片机的相关引脚则变成低电平,进而实现对系统的手动输入。
BD681风扇驱动电路设计
散热风扇其原理是: ①电能转化为电磁能;②电磁能转化为机械能;③机械能转化为动能,使风扇叶片旋转。
风扇工作电流比较大,一般在100ma以上,而单片机io口的驱动能力较弱,标准51的io口的驱动能力只有几毫安,直接用单片机驱动风扇是不行的,必须加电流放大电路才能驱动风扇。
本系统采用bd681达林顿三极管来驱动风扇。达林顿三极管是用两个三极管复合而成,有极大的电流放大倍数,可用小的基极电流控制大的集电极电流。电路连接如图所示:风扇的一端连接vcc,另一端连接三极管的集电极;三极管的发射极接地;三极管的基极通过一个限流电阻连接到单片机的控制口。
当单片机的控制口输出高电平时,三极管基极得到正向偏置电流后导通,风扇的电流形成回路,风扇开始转动。当单片机的控制口输出低电平时,三极管基极无偏置电流,三极管截止,风扇停止转动。电阻r为限流电阻,其作用是:限制基极电流,保护三极管。若单片机控制口为高电平时,没有限流电阻,过大的基极电流会把三极管烧毁。限流电阻把基极电流限制在一定范围内,保证三极管可靠工作。
这种驱动电路结构简单、成本低廉、可靠性高,适用于开关控制方式的直流风扇驱动。
E18-D80NK红外避障传感器模块设计
E18-D80NK-N发射和接收合一的光电传感器,发射光经调制发出,接收头解调接收反射回来的光输出。因为采用调制解的工作方式,所以能避免干扰可见光,提高抗干扰能力。由于透镜的应用,使传感器的光线更加集中,距离更远,最长能检测80厘米处的物体。但由于是利用红外光特性,不同颜色的物体反射红外光的系数不同,因此能检测的最大距离也不同,白色反射系数最大,检测距离最远,黑色吸收红外光最多,检测距离最短。
检测障碍物的距离可以根据要求通过尾部电位器旋钮调节。顺时针调节电位器,检测距离延长;逆时针调节电位器,检测距离缩短。用户可以根据要求设定合适检测距离。传感器探测距离远,受可见光干扰小、价格便宜、容易装配、使用方便,被广泛应用在机器人检测障碍避障、流水线计件等场合。
模块参数说明如下:工作电压5VDC,工作电流10-15mA,驱动电流100mA,感应距离3-80CM可调,响应时间小于2ms,检测物体包括透明或不透明体,工作环境温度-25℃~+55℃,外壳材料为塑料。输出类型为NPN常开型,即正常情况下输出高电平,当检测到前方有遮挡物时输出低电平。
模块接口说明如下:棕色线为电源正极,外接5V电压;蓝色线为电源负极,外接GND;黑色线为信号输出线,数字量输出接口,输出0和1电平信号。这种三线制接口设计简单明了,便于与单片机连接。E18红外避障传感器模块接口原理图如图所示。
总 结
abstract: 本文设计并实现了基于stc89c52单片机的简易清扫机器人系统。系统采用stc89c52单片机作为控制模块,e18-d80nk红外避障传感器进行自动避障,l298n电机驱动模块驱动直流电机使小车运动,bd681风扇驱动电路驱动小车上的风扇进行吸尘清扫,按键输入模块接收用户指令。当用户按下启动键后,小车开始运动,遇到障碍物后自动避让并启动小车上的风扇进行吸尘清扫;当用户按下停止键后,小车停止运动,小车上的风扇也停止转动。关键词:单片机;stc89c52;清扫机器人;e18-d80nk;l298n;bd681 1 引言 本设计主要由stc89c52单片机最小系统电路、按键电路、e18-d80nk红外避障传感器接口电路、bd681风扇驱动电路、l298n电机驱动电路组成,如图1所示。各模块电路简单,元器件价格低廉,成本低,适合制作和调试。利用c语言,在keil环境下,编写出主程序以及各个子程序模块,程序结构合理,功能明确,采用模块化设计思想,方便后期维护和修改。先调试单片机最小系统,再连接各个外围模块电路,最后调试整个程序,保证系统各项功能正常,运行稳定。通过本次设计,更加深入的了解单片机控制系统开发的全过程,了解硬件电路设计,编程,调试的基本方法。加深了对红外传感技术,直流电机驱动技术,嵌入式c语言编程的理解。该系统也可以作为智能清扫机器人的原型,也可以作为单片机课程设计的案例,有一定的参考价值和实用价值。