基于单片机的避障小车设计内容摘要:

: 开始 检测端口值 判断端口值 执行左拐函数 执行右拐函数 左拐 右拐 : 第二版程序,我们采用芯片 L298N,实现了小车的后退和变速功能。 小车的变速有一个独立按键来控制。 另外,我们又加了一个光电开关来检测小车正前方的情况。 如果前方有障碍物的话,小车会避开障碍物后再沿壁行驶。 T0溢出中断,检测端口反馈值是多少 , 前方是否有障碍物 , 每次左转或右转都记录一次,如果连续左转或右转超过 5次,就认为小车卡住了,执行防卡程序。 离墙太近并且前方无障碍物: 0x02 小车右拐 离墙太远并且前方无障碍物: 0x03 小车左拐 前方有障碍物: 0x00或 0x01 小车后退并 右拐 卡住:后退一段距离再右拐 T0溢出中断 检测端口值 判断端口值 执行左拐函数 执行右拐函数 左拐 右拐 是否卡住 执行卡住函数 是 等待下次中断触发 否 原地转弯 有障碍物 : 系统时钟模块 通过 T0 定时器产生 秒的溢出中断,作为小车周期性的探测和动作的时钟。 相关函数: timer0_init(void) timer0_ovf_isr(void) 调速模块 用 TI 定时器产生两路 PWM 波形来控制两个电机的转速,采用独立按键来实现变速。 相关函数: timer1_init(void) int0_isr(void) 距离及障碍探测模块 通过读取 PIND值来判断外界情况。 相关函数 timer0_ovf_isr(void) 常规动作模块 根据探测模块的返回值,有三个函数控制小车的动作。 相关函数 move_left() move_right() move_back() move_b_r() 防卡模块 首先判断小车是否被卡住,读取 count 值,如果 count 大于 10,说明小车连续左拐十次,被认为卡住,执行防卡程序。 相关函数: trap() 3第三版程序(最终版) ,更改了软件模块的代码。 在第二版程序调试过程中,我们发现小车还是左右摇摆,轨迹不是很圆滑。 为使小车的轨迹变得圆滑,我们又改进了程序。 使小车拐弯通过改变左右电机的速度来实现,而不是控制左右电机的停和运转来实现,这样,小车走的轨迹就比较圆滑了。 这版程序是我们的最终程序。 : 通过 T0定时器产生 ,作为小车周期性的探测和动作的时钟。 相关函数: timer0_init(void) 对 T0 定时器进行初始化,使能溢出中断,系统时钟采用 64分频。 timer0_ovf_isr(void) 溢出中断服务程序,再改程序中判断端口值,并进行相应的动作。 设定全局变量 a, a=PINDamp。 0x03。 a=0x00,。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。