




文档简介
基于机器人项目的开发 摘 要 随着人类工作环境变得更加恶劣,危险。避障机器人得到了广泛应用,环境对机器人避障技术要求也越来越高。以 AT89S52 为控制基本单元,采用C语言和汇编语言对 AT89S52 进行编程,进行避障机器人设计。分别采用触觉传感器,红外线传感器采集单一地面信息并将信息输入到单片机内部,单片机基于传感器信息做出决策,执行程序通过控制PWM脉冲来调节电机转速,实现机器人的两种不同导航控制,最后通过将上述两种传感器进行结合,实现多传感器信息采集,最终完成机器人的多传感器导航,并将状态信息显示在 LCD 上。最终能够让机器人在充满不同障碍的弯道环境中顺利避障,走出弯道,实现避障功能,并能在 LCD上同步显示机器人的运行状态。最终设计机器人能够成功避障,达到设计要求。 关键词 : AT89S52 单片机,避障,触觉,红外线,延时程序 I基于机器人项目的开发 Abstract As human working, environment becomes even worse, dangerous. Robot of obstacle avoidance has been widely used, Environment demands robot more and more technology. Design regards the robot as a project object and AT89S52 as the control of the basic unit ,using SCM principles and application of systems and using of C language programming on the AT89S52, so the robot to achieve detection of the surrounding environment. separately use tactile sensors and infrared sensors to collect the single ground information and input it to the internal MCU, microcontroller makes decisions based on sensor information, executes procedures through PWM pulse to adjust the motor speed, finish two different robot navigation control, at last, by the combination of the two sensors, the robot achieves multi sensor data acquisition, the final completion of multi-sensor robot navigation and status information displayed in the LCD. Eventually the robot can be filled with different barriers smooth curve environment, obstacle avoidance, out of the corners, to achieve obstacle avoidance capabilities, and can synchronize the LCD display on the robots operating status. Final design of the robot can successfully avoid obstacles, meet the design requirements.Key words: AT89S52,singlechip,avoidance,touch,infrared II基于机器人项目的开发 目 录 第一章 绪 论 .1 1.1 选题背景 .1 1.2 研究意义 .1 1.3 设计目标 .2 1.4 论文内容与安排 .2 第二章 软件设计 .3 2.1 使用定时器/ 计数器实现精确延时 .3 2.2 软件延时 .3 2.2.1 短暂延时 .4 2.2.2 C51 中嵌套汇编程序段实现延时 .4 第三章 单片机伺服电机控制与巡航控制 .7 3.1 单灯闪烁控制 .7 3.2 机器人伺服电机控制 .7 3.3 机器人的巡航控制 .10 第四章 机器人触觉导航 .12 4.1 安装测试机器人胡须 .12 4.1.1 元件清单 .12 4.1.2 胡须安装 .12 4.2 胡须导航 .13 第五章 机器人红外线导航 .16 5.1 搭建并测试IR发射和探测器对 .17 5.1.1 元件清单 .17 5.1.2 红外线安装 .17 5.2 红外线导航 .18 第六章 机器人距离检测 .20 6.1 定时/计数器的运用 .20 6.2 红外线测距 .21 第七章 多传感器智能机器人 .23 7.1 电路搭建 .23 7.2 设计思路 .23 第八章 多传感器和LCD 应用显示编程 .26III基于机器人项目的开发 8.1 LCD显示器介绍 .27 8.1.1 LCD显示器连接 .27 8.1.2 LCD 控制器接口说明 .28 8.2 编写LCD 模块驱动程序 .28 8.3 LCD显示多传感器机器人运动状态 .33 第九章 结论与展望 .41 9.1 结论 .41 9.2 展望 .41 参考文献 .42 致 谢 .43 附录 1 .44 附录 2 .45 附录 3 .48 附录 4 .51 附录 5 .52 附录 6 .53 附录 8 .58 声 明 .63 IV基于机器人项目的开发 第一章 绪 论 1.1 选题背景 21 世纪是世界科学与技术快速发展的时代,而机器人的发展代表着科技的最高成就。机器人是一种智能型的机器,它能够代替人类的部分工作,从处理个别问题的速度和可靠性来看,它在一定程度上已经超过了人类,所以机器人的出现改变了社会各个领域的发展现状。 从第一台工业机器人出现开始,到现在也就短短的几十年的时间,机器人技术飞速发展,出现了日新月异的变化。如今,世界上有上百万个机器人在为我们服务,机器人已经和我们的生产、生活密不可分。它作为人类的新型生产工具,在减轻劳动强度,提高生产率,改变生产模式,把人从危险,恶劣的工作环境下解放出来等方面,显示出机套 的优越性;它在原子能利用,海洋开发,宇宙探测及社会生活等方面也具有重要的应用价值。机器人的研制和应用充分反映了机器进行和生产系统的发展方向,并将对人类的生产和生活方式产生深远的影响。因此机器人技术已成为当今应用广泛,发展迅速,最引人瞩目的高技术之一。自20世纪80年代以来,许多国家把机器人作为高技术领域的战略目标列入国家计划,各种机器人的研制和生产方兴未艾。可以预料,它将成为21世纪先进制造技术的重要组成部分。机器人已经逐渐成为人类的好助手、好朋友。 1.2 研究意义 随着人类认知领域的不断扩展和研究层次的不断深入,人类的工作环境也开始身着更为复杂的空间发展,例如核辐射场所,深海,太空,有毒环境或高温高压等,这些环境的作业远远走出了人类所能承受的极限。因此人们就开始寻找可以代替人来完成作业的物体,而机器人能很好解决上述问题。它作为人类的新型生产工具,在减轻劳动强度,提高生产率,改变生产模式,把人从危险、恶劣的工作环境下解放出来等方面,显示出极大的优越性;它在原子能利用、海洋开发、宇宙探测及社会生活方面具有重要的应用价值。 由于当今工作环境经常变得更复杂,更恶劣,所以对机器人的性能要求也大大的提高了。为了能够推动生产力的发展,能够为人类提供更优质的服务,我们就必须提高机器人运动的灵敏性,鲁棒性和适应性,而这就需要我们先从根本入1基于机器人项目的开发 手,研究如何实现机器人的巡航,导航基本功能,如何让机器人通过触觉,视觉等各种传感器准确获取外部环境信息,研究多传感器信息融合技术在机器人中的应用,因为这是机器人能完成更多功能的一个基本铺垫。例如避障在机器人的工作中起着非常重要的作用,特别是在矿井救援等任务中,要顺利完成救援任务,机器人首先必须通过传感器准确获取外部环境信息,正确导航,躲开障碍物,才能顺利完成任务,所以对机器人的基本功能和属性的研究意义非常重要。 1.3 设计目标 本次设计最终能够让机器人完成一般的避障功能,机器人可以在充满不同障碍的弯道环境中顺利避障,走出弯道,并在LCD上同步显示机器人的运行状态。 1.4 论文内容与安排 本文的内容安排总体思路是先进行软件总体设计,然后介绍伺服电机工作原理和如何完成机器人基本巡航控制,随后分别触觉导航,红外线导航设计,最后才将前两者进行结合实现带 LCD 的多传感器机器人。 第一章 就避障机器人研究的背景、意义进行了分析,确定设计目标。 第二章 软件总体设计。 第三章 熟悉单片机伺服电机的工作原理,了解上些机器人基本巡航控制。 第四章 利用触觉传感器进行机器人触觉导航控制。 第五章 利用红外线传感器进行机器人红外线导航控制。 第六章 进行机器人距离检测。 第七章 将前面触觉导航与红外线导航相结合,设计多传感器机器人。 第八章 总结论文,介绍研究成果,给出展望。 2基于机器人项目的开发 第二章 软件设计 AT89S52单片机支持的编程语言有C语言和汇编语言,它们可以被单独分开进行编程,也可以进行混合编程。所以在进行基础机器人的设计之前一定要掌握如何用C语言或汇编语言进行软件编程。在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。本设计中也必不可少的要用到单片机延时功能,舵机的启动关键是调节PWM脉冲,而这就是一个延时实现的过程。所以必须先掌握延时子程序的编写。 实现延时通常有两种方法:一种是硬件延时,要用到定时器/ 计数器,这种方法可以提高CPU 的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。 2.1 使用定时器 / 计数器实现精确延时 单片机系统一般常选用11.0592MHz 、 12MHz 或6MHz 晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 s 和2 s ,便于精确时。由于AT89S52的时钟频率为12MHz 的晶振。最长的延时时间可216=65536 s 。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期) 。在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/ 计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC 、PUSH PSW 、POP PSW 和POPACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。 2.2 软件延时 在很多情况下,定时器/ 计数器经常被用作其他用途,这时候就只能用软件方法延时,以下为几种常见的软件延时方法: 3基于机器人项目的开发 2.2.1 短暂延时 可以在C文件中通过使用带_NOP_( ) 语句的函数实现,定义一系列不同的延时函数, 如Delay10us( ) 、Delay25us( ) 、Delay40us( )等存放在一个自定义的C文件中,需要时在主程序中直接调用。如延时10 s 的延时函数可编写如下: void Delay10us( ) _NOP_ ( ); _NOP_ ( ); _NOP_ ( ); _NOP_ ( ); _NOP_ ( ); _NOP_ ( ); Delay10us( )函数中共用了6个_NOP_( ) 语句,每个语句执行时间为1 s 。主函数调用Delay10us( ) 时,先执行一个LCALL 指令(2 s) ,然后执行6个_NOP_ ( ) 语句(6 s) ,最后执行了一个RET指令 (2 s) ,所以执行上述函数时共需要10 s。 2.2.2 C51 中嵌套汇编程序段实现延时 DEL: MOV R7,#200 DEL1: MOV R6,#125 DEL2: DJNZ R6,DEL2 DJNZ R7,DEL1; RET 延时总时间为(250+1+2)*200+1=50ms. C51语言兼顾了多种高级语言的特点,提供了丰富的库函数,具有很强的数据处理能力,但是在编写延时程序时要求时间精确,时序要求严格,所以该设计所有延时程序皆采用汇编实现。这样一来用C51 来编写主程序,采用汇编编写延时程序。这就涉及到C51 与ASM 混合编程实现问题。 以下为几种实现方法: 方法一:直接在函数体内的每个汇编语句前加“asm” 预编译指令. 4基于机器人项目的开发 void reset_data(void) asm MOV R1, #0AH asm LOOP:INC A asm DJNZ R0,LOOP return; 方法二:把asm作为关键字后续汇编用大括号括起来即可. void reset_data(void) asm MOV R1, #0AH LOOP: INC A DJNZ R0, LOOP return; 方法三:在C模块内通过语句“#pragma”嵌入 汇编代码. void reset(void) #pragma asm MOV R1, # 0AH LOOP: INC A DJNZ R0,LOOP #pragma endasm return; 方法四:通过C51主函数调用汇编函数。 name shi1 /定义子函数名称为shi1 ?PR?_DELAY100?shi1 SEGMENT CODE /函数以 “?PR?函数名? 模块名 ”为名 PUBLIC _DELAY100 的命名规则被分配到一个独立的段CODE 5基于机器人项目的开发 RSEG ?PR?_DELAY100?shi1 /程序代码段 _DELAY100: /以下为汇编程序 USING 0 MOV R1, # 0AH LOOP: INC A DJNZ R0,LOOP RET END 在用方法四时就会有C51 函数与汇编函数相互调用的问题,这就涉及到参数传递问题。这里主要介绍通过寄存器传递函数参数,如下表2-1 所示: 表2-1 寄存器参数传递规则 数目 char int Long ,float 一般指针 1 R7 R6,R7 R4,R5,R6,R7 R1,R2,R3 2 R5 R4,R5 R4,R5,R6,R7 R1,R2,R3 3 R3 R2,R3 R1,R2,R3 假设一函数:delaynus(char a,int b) 则a传递到R7 中,而b传递到R4,R5 中。 最后要运行带有汇编的C51程序还需进行以下设置: 将嵌有汇编语句源文件加入要编译的工程文件,将鼠标指向此文件,如下图3-1选择菜单“option for file shi.c”,将属性单“ properties”中的“G enerateAssembler SRC File”与 “Assemble SRC File”两项设置成黑体的“ ”,将“Link Public Only ”的“ ”去掉,如图3-2 所示。然后编译即可。用此方法可以在c源程序里嵌入汇编程序。如果编译时未用SRC指令则 C51中的汇编代码会被编译器忽略. 6基于机器人项目的开发 第三章 单片机伺服电机控制与巡航控制 3.1 单灯闪烁控制 在进行伺服电机控制实验之前要先验证单片机输出端口电平是否是本人编写的程序输出的电平,采取验证的端口位接一个发光二极管。当输出高电平时,发光二极管灭;输出低电平时,发光二极管亮。电路图如图 3-1 所示用P1_0端口引出一根导线接上一 470 欧电阻,电阻另一端与一二极管相连,二极管再接 VCC。这样就形成了一个简单的电路。实物图如图 3-2 所示。 图3-1 发光二极管接线原理图 图3-2 发光二极学接线实物图 操作如下: 1)接通板上的电源 2)输入、保存、下载并运行程序 HighLowLed.c (见附录1 ) 3)观察与 P1_0 连接的 LED 是否每隔一秒发光、关闭一次。 3.2 机器人伺服电机控制 机器人舵机是通过PWM来控制的,如图所示,图3-3 所示是高电平持续1.5ms 低电平持续20ms ,然后不断重复的控制脉冲序列。该脉冲序列发给经过零点标定后的伺服电机,伺服电机不会旋转。如果此时你的电机旋转,表明电机需要标定,需要对伺服电机进行调零操作。由于控制电机运动转速的是高电平持续的时间,当高电平持续时间为1.3ms 时,电机顺时针全速旋转,如图3-4 所示。当高电平持续时间1.7ms时,电机逆时针速旋转,如图3-5 所示。 7基于机器人项目的开发 图3-3 电机转速为零时序图 图3-4 电机顺时针旋转时序图 图3-5 电机顺时针时序图在进行舵机实验之前,先确认机器人两个伺服电机的控制线是否正确连接到了C51 单片机教学板的两个专用电机控制接口上。照图3-6所示的电机连接原理图和实际接线图进行检查。从图3-6可知, P1_0引脚的控制输出用来控制右的伺服电机,而P1_1 则用来控制左边的伺服电机。 图3-6 伺服电机与教学底板的连线图(左)和实际接线图(右) 显然这里对微控制器编程发给伺服电机的高、低电平信号必须具备更精确的时间。因为单片机只有整数,没有小数,所以要生成伺服电机的控制信号,要求具有比delay_nms()函数的时间更精确的函数,这就需要用另一个延时函数delay_nus(unsigned int n)。这个函数可以实现更小的延时,它的延时单位是微秒,即千分之一毫秒,参数n为延时微秒数。以下程序实现机器人两个轮子全速运行: #include #include sbit P1_0=P10; sbit P1_1=P11; void delay_nus() #pragma asm 8基于机器人项目的开发 MOV R1,#13 MOV R2,#50 TEMP:DJNZ R1,TEMP MOV R1,#13 DJNZ R2,TEMP RET #pragma endasm void delay_nus1() #pragma asm MOV R1,#17 MOV R2,#50 TEMP1:DJNZ R1,TEMP1 MOV R1,#17 DJNZ R2,TEMP1 RET #pragma endasm void delay_nms() #pragma asm MOV R1,#50 MOV R2,#200 TEMP2: DJNZ R1,TEMP2 MOV R1,#50 DJNZ R2,TEMP2 RET #pragma endasm 9基于机器人项目的开发 void main() UART_init(); while(1) P1_0=1; delay_nus(); P1_0=0; P1_1=1; delay_nus1(); P1_1=0; delay_nms(); 以上程序有三个延时函数: delay_nus(),delay_nus1(),delay_nms().其中delay_nus()使与右轮相接的 P1_0 高电平延时 1.3ms, delay_nus1()使与左轮相接的 P1_1 高电平延时 1.7ms。右轮全速顺时针旋转,左轮全速逆时针旋转,最终使得机器人全速向前运行。 3.3 机器人的巡航控制 通过上面可以知道通过调节PWM我们可以实现机器人的各种巡航动作。在这介绍通过编程实现机器人在无感情况下完成前后左右转基本动作。如果按照图 3-7前进方向的定义,机器人向前走时,从机器人的左边看,它向前走时轮子是逆时针旋转的;从右边看另一个轮子则是顺时针旋转的。发给单片机控制引脚的高电平持续时间决定了伺服电机旋转的速度和方向。 for 循环的参数控制了发送给电机的脉冲数量。由于每个脉冲的时间是相同的,因而 for 循环的参数也控制了伺服电机运行的时间。运行程序 turnaround.c(见附录 2)是使机器人完成向前走,左转,右转及向后走。 10基于机器人项目的开发 图3-7 机器人及其前进方向的定义示意图 11基于机器人项目的开发 第四章 机器人触觉导航 4.1 安装测试机器人胡须 4.1.1 元件清单 编程让机器人通过触觉胡须导航之前,首先安装并测试胡须。安装机器人触觉胡须所需的硬件元件清单包括: 1)金属丝2根 2)平头M322盘头螺钉2个 3)13m m圆形立柱2个 4)M3 尼龙垫圈2个 5)3-pin 公-公接头2个 6)220 电阻2个 7)10k 电阻2个 4.1.2 胡须安装 1)拆掉连接主板到前支架的两颗螺钉,参考图4-1 ,进行下面操作 2)螺钉依次穿过M3尼龙垫圈、13mm圆形立柱 3)螺钉穿过主板上的圆孔之后,拧进主板下面的支架中,但不要拧紧 4)把须状金属丝的其中一个钩在尼龙垫圈之上,另一个钩在尼龙垫圈之下,调整它们的位置使它们横向交叉但又不接触, 拧紧螺钉到支架上 5) 参考接线图4-2 ,搭建胡须电路。注意:右边胡须状态信息输入是通过P1 口的第4脚完成,而左边胡须状态信息输入是通过P2口的第3脚完成 6) 确定两条胡须比较靠近,但又不接触面包板上的3-pin 头。推荐保持3mm 的距离。 图 4-1 胡须安装实物图 图 4 -2 胡须电路示意图 12基于机器人项目的开发 实际的参考接线图和安装好触觉胡须的机器人如图5-3 所示: 图 4-3 实际接线图 如图4-3 所示胡须电路示意图,每条胡须都是一个机械式的、接地常开的开关。胡须接地(GND )是因为教学板外围的镀金孔都连接到GND 。金属支架和螺丝钉提供电气连接给胡须。通过编程让单片机探测什么时候胡须被触动。连接到每个胡须电路的I/O 引脚监视着10K 上拉电阻上的电压变化。当胡须没有被触动,连接胡须的I/O 管脚的电压是5V ;当胡须被触动时, I/O短接到地,所以I/O 管脚的电压是0V 。 4.2 胡须导航 由图 5-1 可知右胡须是与单片机输入端口 P1_4 相连,而左胡须是与单片机输入端口 P2_3 相连。当右胡须被触动时,P1_4 信号为低电平,当左胡须被触动时,P2_3 信号为低电平,所以可以通过检测这两个输入端信号的状态,当 P1_4为低电平时,编程实现机器人左转,同样当 P2_3 为低电平时,编程实现机器人右转,从而实现避障功能。但是当机器人进入墙角时,发现其只能进行不断的死循环左右转,并不能走出死区,这时考虑如何编程使机器人走出死区。解决这一问题的方法是通过记下胡须交替触动的总次数。程序记住每个胡须的前一次触动状态,并和当前触动状态对比。如果状态相反,就在交替总数上加1.如果这个交13基于机器人项目的开发 替总数超过了程序给定的阈值,那么就该做一个“U”形转变,并且把胡须交替计数器复位。以下为实现机器人胡须触觉导航的源程序, 该程序包括三个文件 touch.c(见附录 3),delay1.a51 (见附录 4)和 delay2.a51(见附录5) touch.c 为主程序,另外两个都为延时程序。 touch.c 用 delay1.a51 和 delay2.a51实现机器人触觉避障功能。 主程序中的语句首先检查胡须的状态。如果两个胡须都触动了即P1_4state() 和P2_3state()都为0,调用backward() ,紧接着调用leftturn() 两次;如果只是右胡须被触动即只有P1_4state()=0 ,程序调用Backward(),然后再 leftturn();如果左胡须被触动即只有P2_3state()=0 ,程序调用 Backward(),然后再调用rightturn() ;如果两个胡须都没有触动,在这种情况下,在else中调用forward() 语句。函数leftturn() ,rightturn()以及backward()看起来应该相当熟悉,但是函数Forward() 有一个变动。它只发送一个脉冲,然后返回。这点相当重要,因为机器人可以在向前行走中的每两个脉冲之间检查胡须的状态。意味着,机器人在向前行走的过程中,每秒检查触须状态大概43次(1000ms/23ms=43 )。因为每个全速前进的脉冲都使得机器人前进大约半厘米。只发送一个脉冲,然后回去检查胡须的状态是一个好主意。每次程序从forward() 返回后,程序再次从while 循环的开始处执行,此时ifelse 语句会再次检查胡须的状态。 三个特别的变量用于探测墙角。Int 型变量counter用来存储交替探测的次数。设定的交替探测的最大值为3。 int 型变量old2、 old3存储胡须旧的状态值。每当old2、old3交替变化一次,counter值 加一。当counter值 大于4 时,就表明机器人已处于死角,必须通过两个左转逃离死区,同时counter重新复位,这就完整的实现机器人的触觉导航控制。流程图如4-4 所示。 14基于机器人项目的开发 图4-4 触觉导航流程图 15基于机器人项目的开发 第五章 机器人红外线导航 前一章的触须接触导航是依靠接触变形来探测物体,而在许多情况下,人们希望机器人不必接触物体就能探测到物体。许多机器人使用雷达(RADAR )或者声纳(SONAR )来探测物体而不需同物体接触。本章的方法是使用红外光来照射机器人前进的路线,然后确定何时有光线从被探测目标反射回来,通过检测反射回来的红外光就可以确定前方是否有物体。 在机器人上建立的红外光探测物体系统在许多方面就像汽车的前灯系统。当汽车前灯射出的光从障碍物体反射回来时,人的眼睛就发现了障碍物体,然后大脑处理这些信息,并据此控制身体动作驾驶汽车。机器人使用红外线二极管LED 作为前灯,如图5-1 所示。 图5-1 红外光探测障碍物实物图 图5-2 本章需要用到零件红外线二极管发射红外光,如果机器人前面有障碍物,红外线从物体反射回来,相当于机器人眼睛的红外检测(接收)器,检测到反射回的红外光线,并发出信号来表明检测到从物体反射回红外线。机器人的大脑单片机AT89S52基于这个传感器的输入控制伺服电机。 红外线(IR )接收/ 检测器有内置的光滤波器,除了需要检测的980 nm 波长的红外线外,它几乎不允许其它光通过。红外检测器还有一个电子滤波器,它只允许大约38.5 kHz 的电信号通过。检测器只寻找每秒闪烁38,500次的红外光。这就防止16基于机器人项目的开发 了普通光源像太阳光和室内光对IR 的干涉。太阳光是直流干涉(0Hz )源,而室内光依赖于所在区域的主电源,闪烁频率接近100或120 Hz 。由于120 Hz 在电子滤波器的38.5 kHz 通带频率之外,它完全被IR 探测器忽略。 5.1 搭建并测试 IR 发射和探测器对 6.1.1 元件清单 1) 两个红外检测器 2) 两个IR LED 3) 四个470电阻 4) 两个9013三极管 5.1.2 红外线安装 电路板的每个角安装一个IR组(IR LED和检测器)。 1)断开主板和伺服系统的电源 2)建立图5-3所示的电路. 图5-3 左侧和右侧IR组原理图 17基于机器人项目的开发 由于C51 的IO 驱动能力较弱,这时我们加入三极管使其工作在开关状态。三极管是一种控制元件,主要用来控制电流大小,是用小电流去控制大电流 。通过工艺的方法,把两个二极管背靠背地连接起来就组成了三极管。按PN 结的组合方式不同分为PNP 型和NPN 型,NPN 型三极管型号为9013,结构示意图及符号图如图5-4,管脚如图5-5. 图5-4 9013结构示意图 图5-5 9013管脚图 9013的工作原理:9013基区做得很薄,当按图2连接时,发射结正偏。集电结反偏,发射区基区注入电子,这时由于集电结反偏。对基区的电子有很强的吸引力。所以由发射区注入基区的电子大部分进入集电区,于是集电极的电流得到了增大。三极管相当于一个开关:当P1_3(P3_6) 置高时,从集电区经基区到发射区电路导通,加载在IR LED 上的电压为VCC(5V),IR LED 向外发射红外线;当P1_3(P3_6) 置低时,电路又断开,IR LED 停止发射。 5.2 红外线导航 由图6-3 可知右检测器是与单片机输入端口P3_5相连,而左检测器是与单片机输入端口P1_2相连。当右检测器检测到反射回来的红外线时,P3_5信号为低电平,当左检测器检测到反射回来的红外线时, P1_2信号为低电平,所以可以通过检测这两个输入端信号的状态,当P1_2为低电平时,编程实现机器人右转,同样当P3_5为低电平时,编程实现机器人左转,从而实现避障功能。该程序包括三个文件infrared.c(见附录6),delay1.a51( 见附录 4)和delay2.a51( 见附录 5).infrared.c为主程序,另外两个都为延时程序。infrared.c 调用delay1.a51 和delay2.a51 实现机器人红外线避障功能。 18基于机器人项目的开发 主程序中的语句首先执行IRlaunch(R) 和IRlaunch(L) 这两条语句,发射稳定的红外线信号,然后检查左右两个检测器的状态。如果两个检测器都检测到反射红外线了,即P1_2state() 和P3_5state() 都为 0,调用 backward(),紧接着调用leftturn() 两次;如果只是右检测器检测到信号即只有P3_5state()=0 ,程序调用backward(),然后再leftturn();如果左检测器检测到信号即只有P1_2state()=0,程序调用backward() ,然后再调用rightturn() ;如果两个检测器都没有检测到信号,这种情况下在else 中调用forward() 语句。程序流程图如5-6 所示。 图 5-6 红外线导航流程图 19基于机器人项目的开发 第六章 机器人距离检测 6.1 定时/计数器的运用 单片机AT89S52 有两个定时/计数器,通过TCON和TMOD 这两个特殊功能寄存器控制。TCON和TMOD你都可以在头文件uart.h中看到其应用。 TCON为定时器控制寄存器,有8位,每个位的含义为如表6-1所示。TCON的低4位与定时器无关,它们用于检测和触发外部中断。 表6-1 TCON控制寄存器 位 符号 描述 TCON.7 TF1 定时器1溢出标志位。由硬件置位,由软件清除 TCON.6 TR1 定时器1运行控制位。由软件置位或清除:置1为启动;置0为停止 TCON.5 TF0 定时器0溢出标志位 TCON.4 TR0 定时器0运行控制位 TCON.3 IE1 外部中断1边沿触发标志 TCON.2 IT1 外部中断1类型标志位 TCON.1 IE0 外部中断0边沿触发标志 TCON.0 IT0 外部中断0类型标志位 表6-2 TMOD模式寄存器 位 名字 定时器 描述 7 GATE 1 门控制。当被置为1时,只有INT为高电平时,定时器才开始工作 6 C/T 1 定时/计数器选择位:1计数器;0定时器 5 M1 1 模式位1(见表3) 4 M0 1 模式位0(见表2) 3 GATE 0 定时器0的门控制位 2 C/T 0 定时器0的定时/计数选择位 1 M1 0 定时器0的模式位1 0 M0 0 定时器0的模式位0 20基于机器人项目的开发 表6-3 定时器工作模式 M1 M0 模式 0 0 0 0 1 1 1 0 2 1 1 3 每个定时/ 计数器都有一个16位的寄存器Tn (n=0 或1)来控制计数长度,由高8位THn 和低 8位TLn置初值。定时/ 计数器有四种工作模式表7-3 。 模式0:定时 /计数器按13位自加1计数器工作。这13位由TH 的全部 8位和TL中的低5位组成,TL中的高3位没有用到。 模式1:定时/ 计数器按16位自加1计数器工作。 模式2:定时/ 计数器被拆成一个8位寄存器TH 和一个8位计数器TL,以便实现自动重载。这种模式使用起来非常方便,一旦设置好TMOD和 THn,定时器就可以按设定好的周期溢出。 模式3:TH0 和TL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大使馆防诈骗知识培训内容课件
- 桥梁工程信息化管理方案
- 公司紧固件镦锻工综合考核试卷及答案
- 公司胶基糖制造工数字化系统操作考核试卷及答案
- 公司配料熔制工职业技能考核试卷及答案
- 户型产品基础知识培训
- 乙烯生产线项目建设工程方案
- 建筑项目工程费用审核方案
- 项目进度延误补救措施方案
- 建筑综合维修保养方案
- 2025年屠检考务试卷及答案
- 五金材料知识培训课件
- 2025年学校少先队知识应知应会题库(含答案)
- 2026中国农业银行秋季校园招聘备考考试题库附答案解析
- 校园科技教育主题班会活动方案
- 世界粮食日节粮我先行节约粮食我在行动宣传课件
- 施工机械设备情况及进场计划
- 关注儿童保护眼睛健康科普知识PPT
- 红十字会救护员培训理论试题附答案
- SF∕T 0097-2021 医疗损害司法鉴定指南
- T∕CCCMHPIE 1.2-2016 植物提取物 槟榔多糖多酚
评论
0/150
提交评论