C51单片机应用与C语言程序设计第六章ppt课件.ppt

上传人:牧羊曲112 文档编号:2002781 上传时间:2022-12-30 格式:PPT 页数:30 大小:584.50KB
返回 下载 相关 举报
C51单片机应用与C语言程序设计第六章ppt课件.ppt_第1页
第1页 / 共30页
C51单片机应用与C语言程序设计第六章ppt课件.ppt_第2页
第2页 / 共30页
C51单片机应用与C语言程序设计第六章ppt课件.ppt_第3页
第3页 / 共30页
C51单片机应用与C语言程序设计第六章ppt课件.ppt_第4页
第4页 / 共30页
C51单片机应用与C语言程序设计第六章ppt课件.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《C51单片机应用与C语言程序设计第六章ppt课件.ppt》由会员分享,可在线阅读,更多相关《C51单片机应用与C语言程序设计第六章ppt课件.ppt(30页珍藏版)》请在三一办公上搜索。

1、第六章 机器人的距离检测,深圳市鸥鹏科技有限公司黄曦2009.3.21, 2008 Open-Tech. All rights reserved.,http:/,摘要,用同样的IR LED/探测电路检测距离任务一 定时/计数器的运用任务二 测试扫描频率任务三 尾随小车任务四 跟踪条纹带工程素质和技能归纳科学精神的培养, 2008 Open-Tech. All rights reserved.,http:/,用同样的IR LED探测电路检测距离,元件搭建: 参考第五章任务一新增工具和原料: (1)尺子 (2)一张纸, 2008 Open-Tech. All rights reserved.,ht

2、tp:/,任务一 定时/计数器的运用,本任务主要介绍51单片机定时/计数器的使用方法,单片机STC89C52的定时/计数器可以分为定时器模式和计数器模式。其实这两种模式没有本质上的区别,均使用二进制的加一计数:当计数器的值计满回零时能自动产生中断的请求,以此来实现定时或者计数功能。它们的不同之处在于定时器使用单片机的时钟来计数,而计数器使用的是外部信号。, 2008 Open-Tech. All rights reserved.,http:/,任务一 定时/计数器的运用,定时/计数器的控制 51系列单片机有两个定时/计数器,通过TCON和TMOD这两个特殊功能寄存器控制。TCON和TMOD你都

3、可以在头文件uart.h中看到其应用 TCON为定时器控制寄存器,有8位,每个位的含义为如下表所示。TCON的低4位与定时器无关,它们用于检测和触发外部中断。, 2008 Open-Tech. All rights reserved.,http:/,任务一 定时/计数器的运用,定时/计数器的控制TMOD为定时器模式寄存器,它也有8位,但不能像TCON一样可以一位一位的设置,只能通过字节传送指令来设定TMOD的各个状态。TMOD的各位定义如下表所示:, 2008 Open-Tech. All rights reserved.,http:/,任务一 定时/计数器的运用,工作模式 每个定时/计数器都

4、有一个16位的寄存器Tn(n=0或1)来控制计数长度,由高8位THn和低8位TLn置初值。定时/计数器有四种工作模式。模式0:定时/计数器按13位自加1计数器工作。这13位由TH的全部8位和 TL中的低5位组成,TL中的高3位没有用到。模式1:定时/计数器按16位自加1计数器工作。模式2:定时/计数器被拆成一个8位寄存器TH和一个8位计数器TL,以便 实现自动重载。这种模式使用起来非常方便,一旦设置好TMOD和THn,定时器就可以按设定好的周期溢出。模式3:TH0和TL0均作为两个独立的8位计数器工作。定时器1在模式3下不工作。, 2008 Open-Tech. All rights rese

5、rved.,http:/,任务一 定时/计数器的运用,定时/计数器初值的计算 定时/计数器是在计数初值的基础上加法记数的,假设Tn(TLn和THn)中写入的值为TC,在该模式下最大计数值为2n,程序运行的计数值为CC TC=2n-CC通过定时/计数器来实现LED测试电路 源程序:参考教材P105例程TimeApplication.c, 2008 Open-Tech. All rights reserved.,http:/,任务一 定时/计数器的运用,例程TimeApplication.c是如何工作的在程序中,一个函数的定义可以放在任意位置,既可放在主函数main之前,也可放在main之后,但如

6、果放在main之后的话,那么应该在main函数的前面加上这个函数的声明: void initial(void); / 子函数声明 主函数main(): 首先对中断进行初始化设置,然后等待中断。 IE=0 x82; EA=1且ET0=1, 打开了全局和定时器0的中断 TCON=0 x00; 停止定时器,并清除了中断标志。 TMOD=0 x02; M1=0且M0=0, 定时器0选择模式2 TH0=0 x38; TL0=0 x38; 设置计数初值和重载值。 TR0=1; 启动定时器0, 2008 Open-Tech. All rights reserved.,http:/,任务一 定时/计数器的运用

7、,中断中断即发生了某种情况(事件),使得CPU暂时中止当前程序的执行,转去执行相应的处理程序。中断在单片机应用的设计与实现中起着非常重要的作用。使用中断允许系统响应事件并在执行其他程序的过程中处理该事件。中断驱使系统能够在同一时间处理许多任务。在某种程度上,中断与子程序有些相似:CPU执行另一个程序子程序然后返回主程序。, 2008 Open-Tech. All rights reserved.,http:/,任务一 定时/计数器的运用,中断:单片机AT89S52有5个中断源:2个外部中断源;2个定时器中断;1个串口中断。每个中断源可以单独允许或禁止,通过修改可位寻址的专用寄存器IE(允许中断

8、寄存器)实现,如下表所示, 2008 Open-Tech. All rights reserved.,http:/,任务一 定时/计数器的运用,中断优先级AT89S52的中断分为2级,高和低。利用“优先级”的概念,允许拥有高优先级的中断源中断系统正在处理的低优先级的中断源。中断的优先级由高到低依次为:外部中断0,定时器0,外部中断1,定时器1,串口中断,定时器2中断。 编译器Keil uVision2支持在C源程序中直接开发中断程序,提高了工作效率。中断服务程序是通过按规定语法格式定义的一个函数,语法格式如下: 返回值 函数名(参数)interrupt musing n 其中,m(031)表示

9、中断号,C51编译器允许32个中断,定时器0的中断号为1;n(03)表示第n组寄存器,例程没有使用该参数,默认为寄存器组0。, 2008 Open-Tech. All rights reserved.,http:/,任务一 定时/计数器的运用,该你了调整定时器时间为了可以看见LED灯闪烁,你可以使用定时器模式0,由于在此方式下最大延时时间为8ms(213=8192)。对比第二章的LED程序,分析它们有何不同之处,使用示波器观察,你会发现使用定时器方式可以产生更精确的时间。若效果还不明显,你可设计一个循环,如当检测到2500次中断后更改一次IO口的电平,即将闪烁时间改为2500*0.4ms=1s

10、,有利于肉眼观察。, 2008 Open-Tech. All rights reserved.,http:/,任务二 测试扫描频率,对频率扫描进行编程做距离探测 下图举例说明机器人如何用红外发射频率做距离测试。在这个例子中,目标物体在区域3。也就是说,发送35700Hz和38460Hz频率能发现物体,发送29370Hz、31230Hz以及33050Hz频率就不能发现物体。如果你移动物体到区域2,那么发送33050Hz、35700Hz以及38460Hz可以发现物体,发送29370Hz和31230Hz频率不能发现物体。, 2008 Open-Tech. All rights reserved.,h

11、ttp:/,任务二 测试扫描频率,源程序:参考教材P109例程TestLeftFrequencySweep.c 例程TestLeftFrequencySweep.c是如何工作的建立机器人复杂运动中,你用字符型数组存储机器人的运动,这里你将用整数型数组存储五个频率值: unsigned int frequency5=29370,31230,33050,35700,38460; uart_Init();串口的初始化,这个函数已多次用到。 timer_init();定时器的初始化。此例程使定时器0工作在模式1,16位定时模式,不具备自动重载功能。注意,timer_init()并没有开启定时器。 Ge

12、t_lr_Distances();, 2008 Open-Tech. All rights reserved.,http:/,任务二 测试扫描频率,机器人要发射某一频率,该给定时器设定多大的值呢?频率为f时,周期T=1/f,高低电平持续时间为t=1/(2T),根据公式TC=2n-CC可算定时器初值time, 2008 Open-Tech. All rights reserved.,http:/,任务二 测试扫描频率,运行程序时,在机器人前端放一白纸,前后移动白纸,调试终端将会显示白纸所在的区域,如下图所示。程序通过计算 “1” 出现的数量,就可以确定目标在哪个区域。, 2008 Open-Te

13、ch. All rights reserved.,http:/,任务二 测试扫描频率,该你了测试右边的IR LED/探测器修改程序TestLeftFrequencySweep.c,对右边的IR LED/探测器做距离探测测试运行该程序,检验这对IR LED/探测器能否测量同样的距离。你可参考教材配套光盘对应例程中的注释部分。尝试测量不同物体的距离,弄清物体的颜色和(或)材质是否会造成距离测量的差异, 2008 Open-Tech. All rights reserved.,http:/,任务三 尾随小车,让一个机器人跟随另一个机器人行走,跟随的机器人也叫尾随车。尾随车要正常工作必须知道距离引导车

14、有多远。如果尾随车落在后面,它必须能察觉并加速。如果尾随车距离引导车太近,它也要能察觉并减速。如果当前距离正好合适,它会等待直到测量距离变远或变近。 闭环控制是一种常用的维持控制目标数据的方法,它很好地帮助机器人保持与一个物体之间的距离。闭环控制算法类型多种多样,最常用的有滞后、比例、积分以及微分控制。, 2008 Open-Tech. All rights reserved.,http:/,任务三 尾随小车,下图所示的方框图描述了机器人用到的比例控制过程的步骤,即机器人用右边的IR LED/探测器探测距离并用右边的伺服电机调节机器人之间的位置以维持适当的距离。, 2008 Open-Tech

15、. All rights reserved.,http:/,任务三 尾随小车,左边的IR LED/探测器以及左边的伺服电机的控制框图如下图所示,与右边的运算法则类似。不同的是比例系数Kp的值由+70变为为-70。假设与右边的测量值一样,输出修正的脉冲宽度应该为1640。下面是该框图的计算等式: Left servo output= (Left distance set point Measured left distance) Kp+ Center pulse width = (2 4)(70) +1500 = 1640, 2008 Open-Tech. All rights reserved

16、.,http:/,任务三 尾随小车,对尾随车编程 源程序:参考教材P116例程FollowingRobot.c 例程FollowingRobot.c是如何工作的主程序做的第一件事是调用Get_lr_Distances子函数。Get_lr_Distances函数运行完成之后,变量leftdistance和rightdistance分别包含一个与区域相对应的数值,该区域里的目标被左、右红外线探测器探测到。随后两行代码对每个电机执行比例控制计算: pulseLeft =(SetPoint - leftdistance)* Kpl + CenterPulse pulseRight =(SetPoint

17、 rightdistance) * Kpr + CenterPulse最后调用子函数Send_Pulse对电机的速度进行调节。因为你要做的实验是尾随,串口线的连接影响了机器人的运动,故可去掉, 2008 Open-Tech. All rights reserved.,http:/,任务四 跟踪条纹带,搭建和测试线路 下图是所要搭建的路径路径中每个条纹带是由三条1/4英寸宽的聚乙烯绝缘带边对边并行放置在白色招贴板上组成的,绝缘带条纹之间不能漏出白色板。, 2008 Open-Tech. All rights reserved.,http:/,任务四 跟踪条纹带,测试条纹带调节IR LED/探测器

18、的位置向下和向外,如下图所示确保绝缘带路径不受荧光灯干扰用1k电阻代替与IR LED串联的470电阻,使机器人更加近视运行程序DisplayBothDistances.c。机器人与串口电缆相连,以便你能看到显示的距离, 2008 Open-Tech. All rights reserved.,http:/,任务四 跟踪条纹带,测试条纹带如下图所示,把机器人放在白色招贴板上验证你的区域读数是否表示被探测的物体在很近的区域,两个传感器给你的读数都是1或0, 2008 Open-Tech. All rights reserved.,http:/,测试条纹带,放置机器人使两个IR LED/检测器都直接

19、指向三条绝缘带的中心,如下左图和右图所示,然后调整机器人的位置(靠近或远离绝缘带)直到两个区域的值都达到4或者5,这表明要么发现一个很远的物体,要么没有发现物体 。 高区域测试顶视图 高区域测试(侧视图), 2008 Open-Tech. All rights reserved.,http:/,任务四 跟踪条纹带,绝缘带路径排错 如果当IR LED/检测器指向绝缘带路径的中心的时候你不能获得比较高的读数值时,参考教材P122绝缘带路径排错编程跟踪条纹带 你只需对程序FollowingRobot.c做一点小小的调整,就可以使机器人跟踪条纹带行走。(参考教材P123例程StripeFollowin

20、gRobot.c), 2008 Open-Tech. All rights reserved.,http:/,任务四 跟踪条纹带,该你了沿着条纹带行走比赛倘若机器人能忠实地在“Start”和“Finish”条纹带处等待,你可以把这个试验转化为比赛,费时最少者获胜。你也可以搭建其它的路径。为了最好的性能,用不同的SetPoint,Kpl和Kpr做试验。, 2008 Open-Tech. All rights reserved.,http:/,工程素质和技能归纳,定时/ 计数器的应用及编程实现。C51单片机终端服务函数的概念和使用。C语言一维数组的使用。机器人红外测距及跟随策略的实现。, 2008 Open-Tech. All rights reserved.,http:/,科学精神的培养,请查找C51单片机定时/计数器的其他操作除了本章用到的一维整型数组外,还有哪些类型数组?数组除了初始化赋值外,还有哪些赋值方法?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号