
一、项目介绍摘 要一台能自主规避障碍、边行进边吸尘的小型机器人设计并实现了一款基于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位cpu8k字节可编程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最高运作频率35m6t12t可选。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外部中断0P3.3为/INT1外部中断1P3.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-d80nkl298nbd681 1 引言 本设计主要由stc89c52单片机最小系统电路、按键电路、e18-d80nk红外避障传感器接口电路、bd681风扇驱动电路、l298n电机驱动电路组成如图1所示。各模块电路简单元器件价格低廉成本低适合制作和调试。利用c语言在keil环境下编写出主程序以及各个子程序模块程序结构合理功能明确采用模块化设计思想方便后期维护和修改。先调试单片机最小系统再连接各个外围模块电路最后调试整个程序保证系统各项功能正常运行稳定。通过本次设计更加深入的了解单片机控制系统开发的全过程了解硬件电路设计编程调试的基本方法。加深了对红外传感技术直流电机驱动技术嵌入式c语言编程的理解。该系统也可以作为智能清扫机器人的原型也可以作为单片机课程设计的案例有一定的参考价值和实用价值。