基于at89s52单片机的循迹小车的系统设计内容摘要:

作原理当 Rs1 过流 U5A 产生一个负脉冲经过微分后脉冲触发 555 的 2 脚电路置位 3 脚输出高电平由于放电端 7 脚开路 C1R5 及 U6A 组成积分器开始积分电容 C1 上的充电电压线性上升延时运放积分常数为 C1 当 C1 上充电电压即 6脚电压超过 2/ 3 VCC555电路复位输出低电平电机启动时间一般 小于 0. 8 sC1 充电时间一般为 0. 8~ 1 sU5A 输出电平与 555 的 3 脚输出电平经U7 相或如果 U5A 输出低电平大于 C1 充电时间 U7在 C1 充电后输出低电平由与门U8 输入到 L298N 的 6脚 ENA 端使电机停止如果 U5A 的输出电平小于 C1 充电时间6 脚不动作电机的正常启动长延时电路吸收电机启动过流电压波形从而使电机正常启动 下图是其引脚图 图 35 L298 引脚图 115 脚是输出电流反馈引脚其它与 L293 相同在通常使用中这两个引脚也可以直接接地上图是其与 51 单片机连接的电路图 图 36 74HC573 的管脚 该芯片 共有 20 个管脚管脚 D 端与单片机管脚相接 Q 端与 4 位共阴八段数码管的 abcdefghdp 端分别相连数码管的位选端与单片机的 IO 口相接 该芯片所驱动的显示电路如图 47所示显示驱动采用动态显示利用 LED代码查询得共阴什么管的显示断码代码如表 33 所示 图 37 数码管驱动电路 表 33 74HC573 驱动 数字 0 1 2 3 4 5 6 7 断码 0x3f 0x60 0x5b 0x4f 0x66 0x6d 0x7d 0x07 数字 8 9 a b c d e f 断码 0x7f 0x6f 0x77 0x7c 0x39 0x5d 0x79 0x71 4 软件设计 系统软件设计说明 在进行微机控制系统设计时除了系统硬件设计外大量的工作就是如何根据每个生产对象的实际需要设计应用程序因此软件设计在微机控制系统设计中占重要地位对于本系统软件更为重要 在单片机控制系统中大体上可分为数据处理过程控制两个基本类型数据处理包括数据的采集数字滤波标度变换等过程控制程序主要是使单片机按一定的方法进行计算然后再输出以便控制生产 为了完成上述任务在进行软件设计时通常把整个过程分成若干个部分每一部分叫做一个模块所谓模块实质上就是所 完成一定功能相对独立的程序段这种程序设计方法叫模块程序设计法 模块程序设计法的主要优点是 1 单个模块比起一个完整的程序易编写及调试 2 模块可以共存一个模块可以被多个任务在不同条件下调用 3 模块程序允许设计者分割任务和利用已有程序为设计者提供方便 本系统软件采用模块化结构由主程序、定时子程序避障子程序、中断子程序显示子程序、调速子程序、算法子程序构成 41 主程序设计 主程序清单如下 函数声明 include define uchar unsigned char define uint unsigned int define pwm_t 4000 周期为 4 毫秒 bit flag_pwm PWM_EN 脉冲给 M1 或是 M2 电机的标志位 bit direction 方向标志位 bit PWM_EN 脉冲标志位 uchar get_speed 测试装置测得到电机转速 uchar t0 定时器 0 计数变量 uchar baishige 数码管的前三位变量 uint hight_M1 既保存 M1 上次的脉冲大小等待下次新脉冲的刷新 uint hight_M2 既保存 M2 上次的脉冲大小等待下次新脉冲的刷新 uint hight 高电平运作时间 uint pluseB_count 外中断次数变量 uint k 数码管显示变量 uint qian 数码管的第一位变量 uint low 电平运作时间 sbit dula P11 数码管断选使能 sbit wela P10 数码管位选使能 uchar code table[] 0x3f0x060x5b0x4f0x660x6d0x7d 0x07 0x7f0x6f0x770x7c0x390x5e0x790x71 共阴四位数码管 0f 的断 码 uchar code table_pwm[] 1234567 ①高速前进②减速向左③减速向右④高速向左⑤高速向右⑥自动循迹⑦停车 红外扫描端口管脚的定义 sbit center_L P20 左边红外信号接口 sbit center_L P21 中间偏左的红外信号接口 sbit center_R P22 中间偏右的红外信号接口 sbit right P23 右边红外信号接口 L298 两路电机接口管脚的定义 sbit EN1 P00 接 L298 的一路电机驱动使能端 6 当 bit6 1 时电机 sbit EN2 P01 接 L298 二路电机驱动使能端 11 当 bit11 1 时电机转 sbit M1 P02 电机 M1 的极性控制端 M1 0 电机正转 if 1 电机负转 sbit M2 P03 电机 M2 的极性控制端 M2 0 电机正转 if 1 电机负转 数码管位选管脚定义 sbit one P04 sbit two P05 sbit three P06 sbit fore P07 数码管位选的个位十位百位千位 软件流程 如图 N Y 41 流程图 42 显示子程序设计 程序清单如下 函数名称 void display 函数功能四位一体数码管显示小车速度和停止后行驶的路程 void display qian k1000 bai k1000100 shi k100010010 ge k100010010 fore 0 dula 1 P0 table[qian] dula 0 fore 1 P0 0xff delay_1ms 1 three 0 dula 1 P0 table[bai] dula 0 three 1 P0 0xff delay_1ms 1 two 0 dula 1 P0 table[shi] dula 0 two 1 P0 0xff delay_1ms 1 one 0 dula 1 P0 table[ge] dula 0 one 1 P0 0xff delay_1ms 1 函数名称 INT0_rupt 函数功能外部测试装置的中断每中断一次显示实参 1 void INT0_rupt interrupt 0 pluseB_count if pluseB_count4 0 pluseB_count 0 k display 数码管显示 43 红外扫描子程序设计 程序清单如下 函数名称 signals ∩ _∩ ∩ _∩∩ _∩ ∩ _∩ 函数功能四个红外 RPR220 传感器路线情况的采集 void signals if center_Lcenter_R 0 0 0 中间两个管子得到高电平了吗 if rightleft 0 最外边两个管子为高电平吗 若是 delay_pwm 7 四个管子都是高电平小车检测到了停止线 else delay_pwm 2 高电平脉宽达到最大值 pwm_t 小车全速前进 else if center_Lcenter_R 0 中间两个管子有为高电平的吗 if center_L 0 左边的那个管子为高电平吗 delay_pwm 2 黑线在左边小车 微左 else delay_pwm 3 黑线在右边小车微右 else 中间的两个管子都为低电平这时候小车要快转了 if leftright 1 外边两个管子也为低电平 delay_pwm 6 小车就自动表演寻找线路 else if left 0 判断黑线是否在左边 delay_pwm 4 小车快速转向左边 else 黑线就在最 右边 delay_pwm 5 小车快速转向右边 函数名称 delay_pwm 函数功能根据路面情况调整电机工作方式。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。