基于单片机的避障小车设计内容摘要:
: 开始 检测端口值 判断端口值 执行左拐函数 执行右拐函数 左拐 右拐 : 第二版程序,我们采用芯片 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,。基于单片机的避障小车设计
相关推荐
池组中各单体电池的最高充电电压也有差别,因此采用这种方法不可能非常准确地判断电池己足充电。 电压负增量 (- △ V):由于电池电压的负增量与电池组的绝对电压无关,而且不受环境温度和充电速率等因素影响,因此可以比较准确地判断电池己充足电。 这种控制方法的缺点是: ① 从多次快速充电实验中发现,电池充足电之前,也有可能出现局部电压下降的情况,使电池在未充足电时,由于检测到了负增量而停止快充; ②
另外一般在三端稳压器的输入输出端接一个二极管,用来防止输入端短路时 ,输出端存储的电荷通过稳压器 ,而损坏器件。 图 23 电源电路原理图 显示器 DRIVER 根据需要显示当前时间、用户设置的闹钟时间 或用户通过键盘输入的新时间,同时判断当前时间是否已到 了闹钟时间,实际上是一个多路选择比较器。 多路选择器是数据选择器的别称。 在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做
键盘输入检测模块 LCD显示模块; 算术运算模块 错误处理及提示模块。 4 总体程序框图 系统总体 框图 设计 单片机课程设计 12 开始 初始化参数 初始化 LCD 显示 有键输入。 读取键码 LCD 显示 数字键 清零键 功能键 状态清零 输入数值 数值送显示缓冲 Y N 等待数值输入 结果送显示缓冲 根据上 次功能键和输入的数据计算结果 本次功能键。 等待数值输入 结果送显示缓冲
﹣ 20 ﹣ 10 0 10 20 30 100 声波 /( ) 313 319 325 323 338 344 349 386 超声波 5 序送出一个超声波脉冲。 为了避免超声波从发射器直接传到接收器引起的直射波,需要延时约 (这也就是超声波测距器会有一个最小可测距离的原因)后才可打开外中断 0 接收返回的超声波信号。 由于采用的是 12MHz 的晶振,计数器每计一个数就是 1us
K! zn%M z849Gx^Gjqv^$UE9wEwZQc@UE%amp。 qYp@Eh5pDx2zVkum amp。 gTXRm 6X4NGpP$vST amp。 ksv*3t nGK8! z89AmYWv*3t nGK8! z89Am YWpazadNuKNamp。 M uWFA5uxY7JnD6YWRr Wwc^vR9CpbK! zn%M z849Gx^Gjqv^$U*3t nGK8!
定时已超过了定时器可提供的最大定时值。 为了实现一秒的定时,采用定时和计数相结合的方法实现。 选用定时/计数器T0作定时器,工作于方式1产生50 ms的定时,定时完成所得的计数值乘以20即为所测信号频率。 2 T1计数部分: 将定时器/计数器的方式寄存器TMOD,用软件赋初值51H,即01010001B。 这时定时器/计数器1采用工作方式1,方式选择位C/T设为1,即设T1为16位计数器。