基于单片机的智能循迹小车本科毕业论文(编辑修改稿)内容摘要:

并联使用的集成稳压电路应采用同一厂家、同一批号的产品,以保证参数的一致。 另外在输出电流上留有一定的余量,以避免个别集成稳压电路失效时导致其他电路的连锁烧毁。 运动单元介绍 本系统采用 9V直流电动机作为智能玩具车的动力源。 用电机驱动专用芯片 L298作为电机的驱动。 L298N 是 SGS 公司的产品,内部包含 4通道逻辑驱动电路。 是一种二相和四相电机的专用驱动器,即内含二个 H 桥的高电压大电流双全桥式驱动器,接收标准 TTL 逻辑电平信号,可驱动 46V、 2A以下的电机。 电机驱动模块硬件电路图如图 36 所示。 西南科技大学本科生毕业论文 13 图 36 电机驱动模块硬件电路图 循迹单元介绍 循迹单元工作原理 循迹是指小车在白色地板上循黑线行走通常采取的方法是红外探测法 ,红外探测法即利用红外线在不同颜色的物体表面具有不同的反射性质的特点 ,在小车行驶过程中不断地向地面发射红外光 ,当红外光遇到白色纸质地板时发生漫反射反射光被装在小车上的接收管接收 ,如果遇到黑线则红外光被吸收小车上的接收管接收不到红外光 ,单片机就是否收到反射回来的红 外光为依据来确定黑线的位置和小车的行走路线 ,从而实现小车的循迹功能。 红外探测器探测距离有限一般最大不应超过 3cm。 循迹功能如图 37所示 图 37 循迹功能图 西南科技大学本科生毕业论文 14 本设计需要检测 小车的运行状态,沿着路面黑线运动。 采用反射取样式,单光束红外传感器接收信号,再分别用运放 LM393比较电压信号进行放大。 图 35的电路在5V 电压下工作,根据该型号传感器红外发射管所需的工作压降(红外发射管的正向压降在 1~ )和工作电流(红外发射管的电流为 2~ 10mA),选取负载电阻R1= ,红外 发射 管负 载电阻 R2=220Ω。 调节电位器使检测信号能被识别。 LM393比较器简介 比较器是将一个模拟电压信号与一个基准电压相比较的电路。 比较器的两路输入为模拟信号,输出则为二进制信号,当输入电压的差值增大或减小时,其输出保持恒定。 因此,也可以将其当作一个 1位模 /数转换器( ADC)。 对路面检测的电路设计就是通过电位器设定一个阈值,以此确定是否有光反射。 并且以此阈值为标准,向单片机输入满足 TTL 电平的数字信号。 如图 38所示。 图 38 LM393芯片示意图 西南科技大学本科生毕业论文 15 第 4章 智能循 迹小车软件部分 软件调试平台 Keil for C51是美国 Keil Software 公司出品的 C 语言软件开发系统,与汇编相比, C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。 Keil C51 软件提供丰富的库函数和功能强大的集成开发调试工具,全 Windows 界面。 另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到 Keil for C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。 在开发大型软件时更能体现高级语言的优势。 下面详细介绍 Keil for C51 开发系统各部分功能和使用。 C51 开发中除必要的硬件外,同样离不开软件,我们写的源程序要变为 C51可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。 随着 C51 开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展, Keil 软件 除了致力于单片机的编程开发平台外,还针对 目前最流行 C51 开发 项目出品了Keil for 51软件 平台以及支持在线调试的 串口烧写。 从近年来各仿真机厂商纷纷宣布全面支持 Keil 即可看出。 Keil 提供了 包括C 编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境( uVision2)将这些部份组合在一起。 如图41 所示。 图 41 Keil for 51 开发平台截图 西南科技大学本科生毕业论文 16 KEIL for C51 编译平台对 51 单片机的器件选型设置。 如图 42 所示。 图 42 MCU选型设置 系统软件流程 系统软件流程图如图 43所示。 图 43 系统流程图 西南科技大学本科生毕业论文 17 系统软件 程序 include //包含单片机寄存器的头文件 include //包含延时子程序的头文件 //宏定义 define uchar unsigned char //无符号八位字符型数据 define uint unsigned int //无符号 16 位整形数据 define ulong unsigned long //无符号三十二位长整型 //状态定义 uchar go=0xFA。 //1111_1010 前进 uchar back=0xF5。 //1111_0101 后退 uchar left=0xFE。 //1111_1110 左转 uchar right=0xFB。 //1111_1011 右转 //延时函数 void delay() { uint i,j。 for(i=0。 i500。 i++) for(j=0。 j800。 j++)。 } 西南科技大学本科生毕业论文 18 //启动软件看门狗 WDTRST 防止程序跑飞增加系统的稳定性 sfr WDTRST=0xA6。 //看门狗寄存器 0xA6 //喂狗程序 void FeedDog() { WDTRST=0x1e。 //给寄存器装值 WDTRST=0xe1。 } //定时器初始化程序 void Initial() { TMOD=0x01。 //定时器 0 工作在方式 1 TH0=0xf0。 //高八位装值 1111—— 0000 TL0=0xf0。 //第八位装值 1111_0000 TR0=1。 //启动定时器 ET0=1。 // 定时器中断允许 EA=1。 //开放总中断 } //主程序 //对传感器输入信号进行轮询并决定当前小车行驶方式 void main() 西南科技大学本科生毕业论文 19 { FeedDog()。 //刚入主程序喂一次狗 Initial()。 //定时器初始化 P1=0xFF。 //端口初始化用于控制电机 P3=0xFF。 //传感器状态接收 while(1) //对传感器输入信号不断地进行查询 { if(P3 == 0x7F)//0111_1111 P1=left。 //执行左转指令 else if(P3 == 0xBF)//1011_1111 P1=right。 //执行右转指令 else P1=go。 //否则就向前行驶 } } //定时器中断函数执行喂狗定时器重装初值 void timer0() interrupt 1 //使用中断 { TH0=0xf0。 TL0=0xf0。 //定时器重载初值高八位第八位 FeedDog()。 //每过一定时间喂下狗,不然程序会自动复位 西南科技大学本科生毕业论文。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。