51单片机驱动智能小车原理图

合集下载

51单片机驱动智能小车原理图

51单片机驱动智能小车原理图
count1=0; }
13
void time1()interrupt 3 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count2++; if(count2>=1000)//周期是 1s
count2=0; }//**********第五部分 中断服务程序 End********************************
2
方案 4:直接采用 9V 直流电源,由稳压模块将 220v 交流电转换为 9V 直流电,再经 7805 稳压到 5V 供单片 机,电机使用。但其不能用于远距离,且在运行中要注意电线的干扰。由于用于本次设计演示的标轨道不太大, 在演示时我们可以人为控制电源线部分,所以我们采用此方案,因为它最经济实惠。电路图如下:
void forward_turn2()//电机 2 前进
9
{ IN3=0; IN4=1;
}
void reverse_rutn2()//电机 2 后退 {
IN1=1; IN2=0; }
void speed1(int ct,int sd)//电机 1 速度控制函数,其中参数 sd 为生成 PWM 波形的比较基准 {
speed1(ct1,sd1); speed2(ct2,sd2); }
void right_turn1(int ct1,int sd1,int ct2,int sd2)//小车右转 {
forward_turn1(); forward_turn2();
speed1(ct1,sd1); speed2(ct2,sd2); } //*************以下是方案 2, 通过使两轮一正传,一反转来实现转向************************ void left_turn2(int ct1,int sd1,int ct2,int sd2)//小车左转 { forward_turn1(); reverse_rutn1();

基于51单片机智能小车设计

基于51单片机智能小车设计

北华航天工业学院课程设计报告(论文)设计课题:基于51单片机智能循迹小车设计专业班级:B12242学生姓名:***指导教师:**设计时间:2014年6月15日北华航天工业学院电子工程系基于51单片机智能循迹小车课程设计任务书指导教师:王晓教研室主任:王晓2014年06 月15 日注:本表下发学生一份,指导教师一份,栏目不够时请另附页。

课程设计任务书装订于设计计算说明书(或论文)封面之后,目录页之前。

内容摘要本设计主要有单片机模块、地面寻线模块、发光二极管模块,电机驱动模块以及电源模块组成,小车具有自主寻迹的功能。

本次设计采用ATMEL公司的AT89C2051单片机作为控制芯片,传感器模块采用红外接收管和比较器实现,能够轻松识别黑白两色路面,同时具有抗环境干扰能力,电机模由LM393芯片和两个直流电机构成,组成了智能车的动力系统,电源采用5V的直流电池,经过系统组装,从而实现了小车的自动循迹的功能。

索引关键词:智能小车AT89C2051 单片机LM393 红外接收管目录一概述 (1)二方案设计与论证 (8)三单元电路设计及各模块具体电路 (3)3.1. 电路中51单片机芯片介绍 (13)3.2 最小系统部分电路 (19)3.3控制模块电路电路 (20)3.4电机驱动及二极管模块电路 (20)3.5寻线检测模块部分电路 (21)3.6软件设计 (22)四总原理图及元器件清单4.1总原理图 (23)4.2元器件清单 (23)五安装与调试5.1.电子元器件的装配 (24)5.2.机械装配 (25)5.3.总装 (25)六性能测试与分析6.1测试方法及注意事项 (26)6.2源程序 (26)七结论 (27)八心得体会 (28)九参考文献 (29)一、概述目前,在企业生产技术不断提高、对自动化技术要求不断加深的环境下,智能车辆以及在智能车辆基础上开发出来的产品已成为自动化物流运输、柔性生产组织等系统的关键设备。

51单片机控制智能小车(3)

51单片机控制智能小车(3)

51单片机控制智能小车(毕业论文)目录前言方案设计与论证控制器模块选取电机模块选取电机驱动器模块选取电源模块选取硬件设计主控系统电机模块电机驱动模块电源模块按键模块软件设计直行设计转弯设计调试中存在的问题参考文献一、前言:随着汽车工业的迅速发展,关于汽车的研究也就越来越受人关注。

全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。

可见其研究意义很大。

本设计就是在这样的背景下提出的,指导教师已经有充分的准备。

本题目是结合科研项目而确定的设计类课题。

我们设计的智能电动小车该具有圆形运行、三角形运行、矩形运行和三者一起运行的功能。

都是运行一循环自动停车。

根据题目的要求,确定如下方案:在现有玩具电动车的基础上,加了四个按键,实现对电动车的运行轨迹的启动,并将按键的状态传送至单片机进行处理,然后由单片机根据所检测的各种按键状态实现对电动车的智能控制。

这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。

本设计采用STC89C52单片机。

以STC89C52为控制核心,利用按键的动作,控制电动小汽车的轨迹。

实现四种运行轨迹。

STC89C52是一款八位单片机,它的易用性和多功能性受到了广大使用者的好评。

二、方案设计与论证控制器模块选取我们采用STC公司的STC89S52单片机作为主控制器,STC公司的单片机内部资源比起ATMEL公司的单片机来要丰富的多,它在5V供电情况下,最多支持80M晶振、且内部有512B的RAM数据存储器、片内含8k空间的可反复擦些1000次的Flash只读存储器、1K的EEPROM、8个中断源、4个优先级、3个定时器、32个IO口、片机自带看门狗、双数据指针等。

但是不兼容Atmel。

从方便使用的角度考虑,我们选择了此方案电机模块选取采用普通直流电机。

直流电机运转平稳,精度有一定的保证。

直流电机控制的精确度虽然没有步进电机那样高,但完全可以满足本题目的要求。

基于51单片机的模块化智能小车(超声波避障)

基于51单片机的模块化智能小车(超声波避障)

基于51单片机的模块化智能小车(有图有真相)!L298N 电机驱动芯片L电机驱动模块背面STC89C52最小系统背面小车底盘(拆自玩具遥控工程车)!5线4相步进电机(512:1)超声波测距模块装配好51最小系统和电机驱动模块的小车步进电机+超声模块装上了步进电机和超声模块连接好线后的造型+步进电机驱动电路ULN2003大功告成!土豆网上传了视频,但程序没有好好写,导致跑起来很不爽,这是很久以前的一个视频链接:/programs/view/q0naSUSlV-Q/欢迎大家多多交流QQ769942445这是源代码:#include "reg51.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#define Moto3 P0/* sbit Moto3_a=P0^0; //5线4相步进电机sbit Moto3_b=P0^1;sbit Moto3_c=P0^2;sbit Moto3_d=P0^3;*/sbit Moto1_l=P2^0; //左电机sbit Moto1_r=P2^1;sbit Moto2_l=P2^2; //右电机sbit Moto2_r=P2^3;sbit TX=P2^4;sbit RX=P2^5;bitflag,flager;ucharhehe,flag_front,flag_left,flag_right;uint time;ulong S;ucharabcd[4]={0x01,0x02,0x04,0x08}; //电机导通相序A-B-C-D uchardcba[4]={0x08,0x04,0x02,0x01}; //电机导通相序D-C-B-Avoid delay1(uchar x){ uchara,b;for(a=0;a<x;a++)for(b=0;b<100;b++);}void Moto3_left(){ uchari,j;for(j=0;j<80;j++){ for(i=0;i<4;i++){ Moto3=abcd[i];delay1(10);}}}void Moto3_right(){ uchari,j;for(j=0;j<80;j++){ for(i=0;i<4;i++){ Moto3=dcba[i];delay1(10);}}}void delay(uchar n) //延时n*1ms{uchara,b,c;for(c=n;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}void left(){ Moto1_l=1;Moto1_r=0;Moto2_l=0;Moto2_r=1;}void right(){ Moto1_l=0;Moto1_r=1;Moto2_l=1;Moto2_r=0;}void go(){ Moto1_l=0;Moto1_r=1;Moto2_l=0;Moto2_r=1;}void back(){ Moto1_l=1;Moto1_r=0;Moto2_l=1;Moto2_r=0;}void stop(){ Moto1_l=1;Moto1_r=1;Moto2_l=1;Moto2_r=1;}void TX_10us() //启动一次模块{ TX=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TX=0;}void count() //计算{ time=TH0*256+TL0;S=(time*1.7)/100; //距离单位:cmTH0=0x00;TL0=0x00;if(S>30||flag==1) //10cm以内有效{ flag=0;}else{ flager=1; //障碍标志}}void test(){ TX_10us();while(!RX); //当RX为零时等待TR0=1; //开启计数while(RX); //当RX为1计数并等待TR0=0; //关闭计数count();}void delayer(uint n){ uinta,b,c;for(c=n;c>0;c--)for(b=100;b>0;b--)for(a=500;a>0;a--);}voidinit(){ TMOD=0x01;TH0=0x00;TL0=0x00;ET0=1;EA=1;}main(){ init();while(1)flag_front=flager;flager=0;Moto3_left();test();flag_left=flager;flager=0;aa: Moto3_right();test();flag_front=flager;flager=0;Moto3_right();test();flag_right=flager;flager=0;hehe=flag_front+(flag_left<<1)+(flag_right<<2);switch(hehe){ case 0x01:back();delayer(3);right();delayer(3);break;case 0x02:right();delayer(1);break;case 0x03:right();delayer(2);break;case 0x04:left();delayer(1);break;case 0x05:left();delayer(2);break;case 0x07:back();delayer(3);right();delayer(3);break;default:break;}go();flag_front=0;flag_left=0;flag_right=0;test();flag_right=flager;flager=0;Moto3_left();test();flag_front=flager;flager=0;Moto3_left();test();flag_left=flager;flager=0;hehe=flag_front+(flag_left<<1)+(flag_right<<2);switch(hehe){ case 0x01:back();delayer(3);right();delayer(3);break;case 0x02:right();delayer(1);break;case 0x03:right();delayer(2);break;case 0x04:left();delayer(1);break;case 0x05:left();delayer(2);break;case 0x07:back();delayer(3);right();delayer(3);break;default:break;}go();flag_front=0;flag_left=0;flag_right=0;gotoaa;}}void time0()interrupt 1{ flag=1;}。

基于51单片机的四驱无线遥控小车(附电路图,源代码)

基于51单片机的四驱无线遥控小车(附电路图,源代码)

基于51单片机的四驱无线遥控小车(附电路图,源代码)遥控小车大家都玩过,网上也有各种DIY小车的制作详解,本文介绍的这个遥控小车和其他的作品大同小异,但作为单片机设计,这次设计主要强调单片机控制,就是说,这个小车是由单片机控制的,把单片机按键发送程序、无线模块使用、电机驱动是本教程的核心内容。

一硬件组装1 小车运动部分所需工件:直流电机4个,L293D电机驱动模块,蓄电池一块,车身底盘说明:车身底盘大家根据自己的购买力自行购买,蓄电池也是,至于L293D模块,淘宝上卖的比较贵,不过我用的就是成品模块,效果非常好,钱不多的同学可以自己买芯片,自制模块,原理很简单,官方资料是很详细的;或者改为继电器控制都可以,具体看自己的实际购买力。

用模块的好处是,模块可以输出5V 电源给系统供电,详细请参考淘宝网。

如果你买的是现成的底盘,那就和我的一样了,组装实在是没啥可说的,把电机固定上去就是,不行?别开玩笑了,小学生都会的!至于想自己做底盘的,我想说,要搞结实点,咱这次的小车马力是很足的,因为有电机驱动,速度比较快(不带减速齿轮的底盘一定要小心,速度非常的快),后劲也足,不小心撞墙很正常,所以不好的底盘就得小心了!组装好后,就是电机和驱动模块的接线了,下面我就详细的说一下L293D模块的使用:L293D是专门的电机驱动芯片,工作电压5V,驱动电压输入可达36V,输出电流正负600ma,4个控制端,4个输出端,原理如图:其中A为输出控制端,Y为输出控制端,1A即控制1Y,以此类推。

1,2EN 3,4EN需要短接,芯片最大工作电压不得超过7V。

封装图:Vcc1接工作电压,5V,Vcc2接电机的驱动电源,一般来说,这个电压要比5V 高,我用的是12V蓄电池,就把12v的正极接到VCC2,要记住的是,芯片、单片机、蓄电池电源是需要共地的,不要觉得你电机是12V,单片机控制部分是5V就把电源完全独立开来,正极是完全独立的没错,但是GND(负极)都必须是接在一起的。

51单片机四驱无线遥控小车制作详解

51单片机四驱无线遥控小车制作详解

51 单片机四驱无线遥控小车制作详解
小车参数:控制键5 个:前进、后退、左转、右转、停止;有效距离200 米;速度:
我想遥控小车大家都玩过,网上也有各种DIY 小车的制作详解,我做的这个遥控小车和其他的作品大同小异,但作为单片机设计,这次设计我主要强调单片机控制,就是说,这个小车是由单片机控制的,这次我把单片机按键发送程序、无线模块使用、电机驱动作为本教程的核心内容。

一硬件组装
1 小车运动部分
此图是我师弟组装好的,请大家作为参考
所需工件:直流电机4 个,L293D 电机驱动模块,蓄电池一块,车身底盘。

基于51单片机的智能避障小车开发

基于51单片机的智能避障小车开发

L298N的详细资料驱动直流电机电机驱动电路;电机转速控制电路(PWM信号)主要采用L298N,通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转。

驱动原理图L298电机驱动模块实物图我正在用L298N驱动我的小车的两个直流减速电机,其实它很好用,1和15和8引脚直接接地,4管脚VS接2.5到46的电压,它是用来驱动电机的,9引脚是用来接4.5到7V的电压的,它是用来驱动L298芯片的,记住,L298需要从外部接两个电压,一个是给电机的,另一个给L298芯片的6和11引脚是它的使能端,一个使能端控制一个电机,至于那个控制那个你自己焊接,你可以把它理解为总开关,只有当它们都是高电平的时候两个电机才有可能工作,5,7,10,12是298的信号输入端和单片机的IO口相连,2,3,13,14是输出端,输入5和7控制输出2和3, 输入的10,12控制输出的13,14L298N型驱动器的原理及应用L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。

是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。

L298N的恒压恒流桥式2A驱动芯片L298N说明及应用L298是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。

可以方便的驱动两个直流电机,或一个两相步进电机。

L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。

L298N 可接受标准TTL逻辑电平信号V SS,V SS可接4.5~7 V电压。

4脚VS接电源电压,VS电压范围VIH为+2.5~46 V。

输出电流可达2.5 A,可驱动电感性负载。

1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。

基于51单片机的智能小车设计

基于51单片机的智能小车设计
检测铁片电路原理图如图3所示。
图3 检测铁片电路原理图
3)声音提示
方案一:采用单片机产生不同的频率信号来完成声音提示,此方案能完成声音提示功能,给人以提示的可懂性比较差,但在一定程度上能满足要求,而且易于实现,成本也不高,我们出自经费方面考虑,采用方案一。
方案二:采用DS1420可分段录放音模块,能够给人以直观的提示,但DS1420录放音模块价格比较高,也可以采用此方案来处理,但方案二性价比不如方案一。
图4 黑带检测电路图
3)计量路程方案
方案一:利用红外线对射方式,在小车的车轮开一些透光孔来计量车轮转过圈数,从而间接地测量路程。
方案二:利用霍尔元件来对转过的车轮圈数来计程,在车轮子上装小磁片,霍尔元件靠近磁片一次计程为车轮周长。此方案传感的信号强, 电路简单,但精度不高。
如果想达到一定的计量精度,用霍尔传感元件比较难以实现,因为在车轮上装一定量的小磁片会相互影响,而利用红外线对射方式不会影响各自的脉冲,可达到厘米的精度,因此采用方案一来实现。计量路程示意图见图5。
图 10 外部中断0服务子程序
图 11 外部中断1服务子程序
图12 定时器1中断子程序
6.调试及性能分析
整机焊接完毕,首先对硬件进行检查联线有无错误,再逐步对各模块进行调试。首先写入电机控制小程序,控制其正反转,停机均正常。加入避障子程序,小车运转正常,调整灵敏度达最佳效果。加入显示时间子程序,显示正常。铁片检测依靠接近开关,对检测信号进行处理并实时显示和发出声光信息,无异常状况。路程显示部分是对霍尔管脉冲进行计数,为了尽量达到精确,车轮加装小磁片。接着对黑带检测模块调试,发现有时小车会跑出黑带,经判断是因为红外线收发对管灵敏度不高,调整灵敏度后仍然达不到满意效果,疑是受环境光影响,利用塑料套包围红外线收发后问题解决。趋光电路主要由三个光敏电阻构成,调整三个光敏电阻的角度同时测试软件,以最佳效果完成趋光功能。

51单片机智能小车PWM调速前进程序源代码、电路原理图和器件表

51单片机智能小车PWM调速前进程序源代码、电路原理图和器件表

51单片机智能小车PWM调速前进程序源代码、电路原理图、电路器件表从控制电路角度划分,智能小车电路板分为核心板和驱动板。

核心板上的处理器的芯片型号是:STC15W4K56S4,这是一款51单片机。

驱动板上有电源电路、电机驱动电路以及一些功能模块接口。

智能小车前进只要控制智能小车四个轮子向前转动就可以了。

智能小车四个轮子由四个直流减速电机驱动。

直流减速电机驱动芯片采用L293D,一片电机驱动芯片L293D可以驱动两个直流减速电机,智能小车用到4个直流减速电机,需要用到两片L293D电机驱动芯片。

但有时候我们需要控制智能小车的速度,不希望智能小车全速前进。

比如在“智能小车循迹实验”中,如果智能小车速度过快,来不及反应做出方向的调整,智能小车会很容易跑离轨迹,这样就需要调整控制智能小车的速度了。

那么怎么样实现智能小车前进速度的调节呢?调节智能小车的速度,实际上是调节电机的运转速度,PWM调速是目前电机的主流调速方式。

智能小车采用脉宽调制(PWM)的办法来控制电机的转速,从而控制智能小车的速度。

在此种情况下,电池电源并非连续地向直流电机供电,而是在一个特定的频率下为直流电机提供电能。

不同占空比的方波信号,调节对直流电机的通断电,能起到对直流电机调速作用。

这是因为电机实际上是一个大电感,它有阻碍输入电流和电压突变的能力,因此脉冲输入信号被平均分配到作用时间上。

这样,改变L293D使能端EN1和EN2上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了直流电机转速。

智能小车PWM调速前进程序如下:首先,定义了2个变量,这2个变量用于设置智能小车的速度。

unsigned char pwmval_left_init=6; //调节此值可以调节小车的速度。

unsigned char pwmval_right_init=6; //调节此值可以调节小车的速度。

通过以下函数初始化定时器0,每1毫秒中断一次。

void Timer0_Init(void) //定时器0初始化{TMOD=0x01;TH0=0xf8;TL0=0xcd;TR0=1;ET0=1;EA=1;}下面我们看定时器0的中断处理函数。

基于51单片机的智能循迹小车设计

基于51单片机的智能循迹小车设计

********************** ************************参赛学校:******************参赛队号:******************参赛题目:(A题)智能小车控制参赛学生:*******************指导教师:*******************参赛日期:2011.7.18~2011.7.22智能小车控制摘要智能作为现代的新发明,是以后的发展方向,它可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等用途。

我们通过软件编程实现它的行进、绕障、停止的精确控制以及遇障次数的显示,并再次寻找到原来的轨道。

一、功能说明1、基本功能:小车能够在设计的线路上完成寻迹功能;2、拓展功能:在循迹线路上设置障碍物,小车遇到障碍物能够自动绕道行驶,完成避障功能;二、方案论证方案一:以AT89S51单片机为核心的控制电路,采用模块化的设计方案,运用传感器检测电路,实现小车在行驶中自动寻迹、躲避障碍物的功能。

并将循迹过程中遇障次数等数据传至单片机进行处理,然后由单片机根据所检测数据实现对电动小车的智能化控制。

方案二:采用各类数字电路来组成电动小车的控制系统。

采用数字电路对外围探测轨迹信号,避障信号进行处理。

但对输入输出都是模拟量的小装置,如果采用数字化方案,则要先用A/D转换器和D/A 转换器实现数字量与模拟量之间的转换。

这样必然带来高成本、电路复杂等缺点。

因此,本方案灵活性不高,效率低,不利于电动小车智能化的扩展。

同时,对各路信号处理也比较困难。

比较以上两种方案的优缺点,方案一简洁、灵活、可扩展性好,能达到设计要求,因此本设计采用方案一来实现。

三、各模块设计电路分为电源模块、单片机系统模块、电机驱动板、寻迹模块、避障模块。

智能小车运行基本原理框图见图1。

图11、电源模块首先我们想到的是稳压电源供电,稳压电源供电稳定方便调试,但是稳压电源体积大,只适合调试阶段的使用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5
10K 电阻
5
5.1K 电阻
2
10K 电位器
2个
开关
5
电路板
1
33pf

12M晶振

Led
1
7805
1
7
排阻 1K 二极管 4148
八、程序流程图
1 10
开始 启动寻迹程序
探测黑线
否 是否探测到黑线
是 判断处理程序(switch)
左轮探测到黑线
右轮探测到黑线
左右轮同时探测到黑线
向左转
向右转
继续前进
2
方案 4:直接采用 9V 直流电源,由稳压模块将 220v 交流电转换为 9V 直流电,再经 7805 稳压到 5V 供单片 机,电机使用。但其不能用于远距离,且在运行中要注意电线的干扰。由于用于本次设计演示的标轨道不太大, 在演示时我们可以人为控制电源线部分,所以我们采用此方案,因为它最经济实惠。电路图如下:
count1=0; }
13
void time1()interrupt 3 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count2++; if(count2>=1000)//周期是 1s
count2=0; }//**********第五部分 中断服务程序 End********************************
speed1(ct1,sd1); speed2(ct2,sd2); }
void right_turn1(int ct1,int sd1,int ct2,int sd2)//小车右转 {
forward_turn1(); forward_turn2();
speed1(ct1,sd1); speed2(ct2,sd2); } //*************以下是方案 2, 通过使两轮一正传,一反转来实现转向************************ void left_turn2(int ct1,int sd1,int ct2,int sd2)//小车左转 { forward_turn1(); reverse_rutn1();
十、总结
这次课程设计,不仅锻炼了我单片机硬件设计的能力,也进一步掌握了 C51 语言的编程,让我对自动控制领 的相关理论有了更深刻的认识,同时也看到了教学知识与工业应用的差距。
继续前进 结束
九、循迹小车程序
8
#include<reg52.h> //*********************第一部分 Start*************************************** sbit IN1=P1^0;//以下是点击驱动芯片 L298 管脚位声明 sbit PWM1=P1^1; sbit IN2=P1^2;
5
RPR220 参数如下:
图 5 光电对管检测电路 2
六、总电路原理图图:
6
七、元器件清单:
图 6 循迹小车电路图(详见附页)
元器件
数量
电机(带轮)

L298
1
LM339
2
RPR220
4
Max232
1
Stc89c51(带底座)
1
104 电容
10
10uf 电容
2
1k 电阻
5
2k 电阻
5
510 欧姆
//**********第 4 部分 主函数 Start******************************** main() {
TMOD=0x11;//中断模式设置 TH0=(65536-1000)/256;//定时器 1 初始化 TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1;
if(ct<=sd) PWM1=1;
else PWM1=0;
}
void speed2(int ct,int sd)//电机 2 速度控制函数,其中参数 sd 为生成 PWM 波形的比较基准 {
if(ct<=sd) PWM2=1;
else PWM2=0;
} //*********************第二部分 子函数定义 End*********************
| 反馈值
光电传感器
图 1 循迹小车框架图
五、小车各模块电路图及说明
1 电源部分: 方案 1: 采用 6 节 1.5V 干电池供电,电压达到 9v,经 7805 稳压后给支流电机供电,给单片机系统和其他 芯片供电。但干电池电量有限,使用大量的干电池给系统调试带来很大的不便,因此,我们放弃了这种方案。 方案 2:采用 2 节 4.2V 可充电式锂电池串联共 8.6V 给直流电机供电,经过 7805 的电压变换后给支流电机 供电,给单片机系统和其他芯片供电。但由于电压不太够,价格昂贵,因此,我们放弃了。 方案 3:采用:9V 蓄电池为直流电机供电,将 12V 电压降压、稳压后给单片机系统和其他芯片供电。蓄电池 具有较强的电流驱动能力以及稳定的电压输出性能。但蓄电池的体积过于庞大,使用极为不方便,因此,我们放 弃了。
//**********第三部分 小车直线前进,左转,右转函数定义 Start********
void advance(int ct1,int sd1,int ct2,int sd2)//小车直线前进函数
10
{ forward_turn1(); forward_turn2();
speed1(ct1,sd1); speed2(ct2,sd2); } //*************以下是方案 1, 通过使两轮一快一慢来实现转向****************************** void left_turn1(int ct1,int sd1,int ct2,int sd2)//小车左转 { forward_turn1(); forward_turn2();
图 2 电源模块电路图 2、电机驱动控制部分: 这部分采用专门的电机控制芯片 L298,它可同时对两个电机进行驱动控制,电路简单,控制效果好,干扰 小,因此我们采用此方案,电路图如下
L298 的具体参数如下:
图 3 电机驱动控制部分电路图
3
L298 管脚排列如下:
3 传感器探测部分: 方案 1:用光敏电阻组成光敏探测器。光敏电阻的阻值可以跟随周围环境光线的变化而变化。当光线照射到 白线上面时,光线发射强烈,光线照射到黑线上面时,光线发射较弱。因此光敏电阻在白线和黑线上方时,阻值 会发生明显的变化。将阻值的变化值经过比较器就可以输出高低电平。 但是这种方案受光照影响很大,不能够 稳定的工作。因此我们考虑其他更加稳定的方案。 方案 2:用红外发射管和接收管自己制作光电对管寻迹传感器。红外发射管发出红外线,当发出的红外线照 射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管 发出的光线则检测出黑线继而输出高电平。这样自己制作组装的寻迹传感器基本能够满足要求,但是工作不够稳 定,且容易受外界光线的影响,因此我们放弃了这个方案。 方案 3:用 RPR220 型光电对管。RPR220 是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光 二极管,而接收器是一个高灵敏度,硅平面光电三极管。
//*********************第二部分 子函数定义 Start**************************** void forward_turn1()//电机 1 前进 {
IN1=0; IN2=1; }
void reverse_rutn1()//电机 1 后退 {
IN1=1; IN2=0; }
计 算 机 控 制 课程设计说明书
题目: 循 迹 小 车
学生姓名: 学 号: 院 (系): 专 业: 指导教师:
王荣明 200706040123 电信学院(自动化系) 测控技术与仪器 刘文波、姜丽波
2011 年 2 月 25 日
1
循迹小车方案书
一、课设题目:循迹小车 二、课设要求:
1、完成基本设计功能 (顺利走一个“8“字型的黑色轨迹一周) 2、所用时间长短 3、自己发挥部分(音乐、彩灯、壁障、显示等) 4、指导老师:郑恩让 周强 黄建兵 姜丽波 刘文波
} } //**********第 4 部分 主函数 End********************************
//**********第五部分 中断服务程序 Start******************************** void time0()interrupt 1 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count1++; if(count1>=1000)//周期是 1s
TH1=(65536-1000)/256;//定时器 2 初始化 TL1=(65536-1000)%256; EA=1; ET1=1; TR1=1; while(1)
12
{ if(RPR1==0&&RPR2==0)//未检测到黑线,小车继续前进 { advance(count1,500,count2,500); } if(RPR1==1&&RPR2==0)//仅左轮检测到黑线,小车向左转弯 { left_turn1(count1,200,count2,500); } if(RPR1==0&&RPR2==1)//仅右轮检测到黑线,小车向右转弯 { right_turn1(count1,500,count2,200); } if(RPR1==1&&RPR2==1)/*左右轮均检测黑线,小车继续前进*/ /*(此处用来处理"8"字型路线交叉处小车如何前进的问题)*/ { advance(count1,500,count2,500); }
相关文档
最新文档