51单片机小车实验方案设计.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
51单片机小车实验方案设计

1.轨迹探测模块设计与比较 方案一:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。但是这种方案受光照影响很大,不能够稳定的工作。 方案二:红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断红外发射管发出红外线,当发出的红外线照射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管发出的光线则检测出黑线继而输出高电平。 单片机就是通过接收到的高低电平为依据来确定黑线的位置和小车的行走路线。对于发射和接收红外线的红外探头,可以自己制作或直接采用集成式红外探头。 经测试,此种方法简单可靠。 经反复对比后,采用方案二。 2、 控制电机方案比较 方案一 :利用步进电机的准确定长步进性能方便的实现调速和方向的偏转,且能准确的测量速度、路程以及时间,简化编程和硬件连接的工作量。但是步进电机在与机械配合的小车改装上难度极大,非短时间所能完成。该方案实现较困难。 方案二 :用玩具小车上自带的双直流电机,只需对后轮电机进行简单改造,加上一个齿轮减速装置即可,两电机分别负责小汽车的驱动和转向的功能,依据外围红外反射传感器所采集到的信息可以补足直流电机定位不准的缺点,同时红外反射传感器的使用还能实现比较准确的寻迹行驶,用较好的控制算法及特色硬件来提高小车的整体性能,可具有很高的性能/价格比。 经比较验证,显然方案一的机械结构也短时间内难以满足题目的要求,而方案二本身是与小车相兼容的,性能也比较好,采用方案二。 3、电机驱动方案的比较 方案一:采用传统的功率三极管作为功率放大器的输出控制直流电机。线性型驱动的电路结构和原理简单,成本低,加速能力强,但功率损耗大,特别是低速大转距运行时,通过电阻R的电流大,发热厉害,损耗大。 方案二:采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整.此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。 方案三:采用专用芯片L298N作为电机驱动芯片。L298N是一个具有高电压大电流的全桥驱动芯片,它相应频率高,一片L298N可以分别控制两个直流电机,而且还带有控制使能端。用该芯片作为电机驱动,操作方便,稳定性好,性能优良。且由L298N结合单片机可实现对小车速度的精确控制。这种调速方式有调速特性优良、调整平滑、调速范围广、过载能力大,能承受频繁的负载冲击,还可以实现频繁的无级快速启动、制动和反转等优点。 因此决定采用方案三L298N电机驱动芯片控制直流电机。 本系统采用STC89C52作为核心控制部件,通过对小车前下端的左中右三对红外对管组成的寻迹带电路所采集的信号进行分析使小车在行驶偏离正常轨道时及时进行分析校正,以保证其直向行驶;用单片机控制电机专用驱动芯片驱动左右两个电机使后轮做匀速行驶,前轮为左右转向轮; 系统总体框架图: 电机驱动原理图: 3.循迹模块原理图 程序清单: #includereg52.h #define uchar unsigned char #define uint unsigned int uchar K; sbit SEN_1=P3^0;//左传感器信号输入 都是为1有效 sbit SEN_2=P3^1;//中传感器信号 都是为1有效 sbit SEN_3=P3^2;//右传感器信号 sbit SEN_4=P3^3;//最右传感器信号 当SEN_4~SEN_1=1111时表示小车在线上 小车直线前进 sbit IN1=P2^0;//左电机 驱动模块与单片机接线 sbit IN2=P2^1;//左电机 sbit IN3=P2^2;//右电机 sbit IN4=P2^3;//右电机 sbit ENB=P2^4;//右电机转动与停止使能信号 sbit ENA=P2^5;//左电机转动与停止使能信号 void delay_1ms(uint d) { uint i; while(d--) for(i=0;i75;i++); } void motor_run() //电机起动 { IN1=0; IN2=1; ENA=1; //左电机 正转 IN3=0; IN4=1; ENB=1; //右电机 正转 delay_1ms(150); P2=0x0F; /无信号 delay_1ms(20); } void

文档评论(0)

kabudou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档