第一范文网 - 专业文章范例文档资料分享平台

黄金军的论文正文

来源:用户分享 时间:2025/6/9 4:16:43 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

本科毕业设计说明书(论文)

调用小车驱动函数car_move,并且该循环是允许中断的。

第 13 页 共 30 页

(2)图4.2为数据发送流程图,在数据发送时,首先,读取所需发送数据的长度,数据内容和目的地址,然后通过相应的算法在数据上加上帧头和帧尾。然后进入数据发送过程,发送时,先关中断,判断UDRE,为0等待,直到为1时,把数据帧以串行形式发送给Txd-1000,数据以字节发送,发送完一个字节,判断一次数据帧是否发送完成,未完成,就发送下一个数据字节,完成,则完成本次发送,并打开中断。数据帧的数传输中,需要关中断,防止有新中断的进入,破坏一个数据帧的完整发送。

图4.3为数据接收程序流程图:

发重发指令报开中断No目的地址是否为自Yes翻译数据报,判断校验Yes存储数据NoNo判断上条指令是否被取走YesNo判断RXC为1接受缓冲器满,调用19号中断关中断NoYes数据接受是否到结束位Yes时间序列大于记录值Yes时间序列置数No丢弃数据包Yes是否超过跳针上限No跳针数加1,发送原数据报 图4.3 数据接收流程图

本科毕业设计说明书(论文)

第 14 页 共 30 页

从图4.3中可以看出,当输入缓冲器满时,单片机产生19号中断,进入中断调用子程序,在进入该子程序后,为防止新的高优先级中断的进入,中断子程序首先进行关中断操作。在接收新数据前,首先判断上一条指令是否被取走,如果没被取走则等待。在数据帧接收过程中,首先判断数据帧是否已经接收过,如果接收过,则表明此帧为重复帧,丢弃此帧,只有在发现数据帧为新帧时,节点才处理此帧。而新旧数据帧判断的依据为时间序列,如果节点所时间序列小于数据帧的时间序列时,表明为新数据帧,否则为旧帧。

当接收到新数据帧时,接收节点进入数据处理阶段。首先把数据帧中的时间序列记录下来,以供查验。然后接收的是目的地址,接收节点和己地址进行对比判断是否为自己的数据,是则接收数据,生成校验位,并和数据帧的校验位比较,判断所接收的数据是否正确。如果不是自己的地址,就判断跳针数,如果跳针数没有超出跳针数上限的话,修改原数据帧的跳针数,使跳针数加1,然后转发数据帧,如果达到了数据帧的上限则丢弃数据帧。在接收完数据后,程序进行开中断。

4.2驱动程序总体设计

4.2.1运动指令——运动方式、速度、距离

小车(节点)的驱动程序所要实现的功能为: (1)能够识别运动方式指令并做出响应

这些运动方式分别为:前进、后退、左转45度/90度、右转45度/90度、左后转45度/90度、右后转45度/90度。

(2)能够识别运动速度指令并做出响应

指令中给出要求小车运动速度的信息,这个运动速度不能超过小车最大的运动速度,否则以最大速度运行。

(3)能够根据距离指令的要求运动相应的距离 4.2.2驱动程序流程图

图4.4为小车驱动程序流程图:

本科毕业设计说明书(论文)

主函数运行第 15 页 共 30 页

调用驱动函数 car_move驱动函数运行判断标志位order_ok=1yes保存指令数据到变量control,speed,distance,并令order_ok=0判断control的值为0为1为2为3为4为5为6为7为8为9其他no左转度再前进左转度再前进右转度再前进右转度再前进前进后退左后转度再后退左后转度再后退右后转度再后退右后转度再后退不动作说明:从数据接收程序中接受到的最终运动指令为全局变量unsigned char order_out[10]中的order_out[0]、order_out[1]、order_out[2],其中order_out[0]指明运动方式,如前进、后退、左转等;order_out[1]指明运动速度;order_out[2]指明运动距离。全局变量order_ok为新运动指令就绪标志位,进入函数car_move后首先读取order_ok的值,为0说明暂时没有可执行的指令,返回到主函数;为1则说明有新的指令传来,保存所有新的指令数据:

4590图4.4小车驱动程序流程图

45返回主函数9045904590

本科毕业设计说明书(论文)

order_out[0]保存到变量

第 16 页 共 30 页

control,order_out[1]保存到变量

speed,order_out[2]保存到变量distance,同时把order_ok清零,说明数据已经取走,接下来根据control的值进入对应的运动形式,运动结束后回到主函数。这样,一次调用car_move函数过程结束。

4.3各功能模块的实现

4.3.1硬件电路中用于控制小车的I/O口介绍

小车的驱动控制电平以及PWM波来源于ATMega128的I/O口,硬件电路设计时将PB2、PB3分别控制左轮的MOT1、MOT2(记为MOTL1、MOTL2),PB5、PB6分别控制右轮的MOT1、MOT2(记为MOTR1、MOTR2)。PB4、PB7设置为PWM波发生接口,分别由T/C0和T/C2提供PWM波,由于小车的PWM速度控制接口设置成了左右轮共用一个,故在程序设计时仅用PB4口(T/C0产生波形,由PB4口输出)。

每个端口都有三个I/O存储器:数据寄存器——PORTX、数据方向寄存器——DDRX和端口输入引脚寄存器——PINX。数据寄存器和数据方向寄存器为读/写寄存器,而端口输入引脚寄存器为只读寄存器。当DDRX中的某一位为“1”时,则该引脚被定义为输出,此时可通过读取PINX寄存器来得到该引脚的输出电平;当DDRX中的某一位为“0”时,则表示该引脚被定义为输入,此时如果PORTX中的对应位为“1”的话,表示该引脚输入时带内部上拉电阻。当寄存器SFIOR的上拉禁止位PUD置位时所有端口的全部引脚的上拉电阻都被禁止。 4.3.2节点(小车)运动方向控制的实现 (1)小车向前、向后运动的实现

小车前进程序的基本设计思想是:当接受到命令时,PB2、PB3设置为0和1(左轮向前运动);PB5、PB6也设置为0和1(右轮向前运动),根据有关命令参数开启T/C0产生PWM波,从PB4口输出;然后运行延时程序一段时间让小车运动,再将PB2、PB3、PB5、PB6全部置0,小车停止运动。

向后运动的设计思想和前进很类似:当接受到命令时,PB2、PB3设置为1和0(左轮向后运动);PB5、PB6也设置为1和0(右轮向后运动),根据有关命令参数开启T/C0产生PWM波,从PB4口输出;然后运行延时程序一段时间让小车运动,再将PB2、PB3、PB5、PB6全部置0,小车停止运动。

搜索更多关于: 黄金军的论文正文 的文档
黄金军的论文正文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c0x60s2jl2k175lm25rsn_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top