小车循迹壁障等流程图

合集下载

pwm调速控制小车循迹壁障c程序

pwm调速控制小车循迹壁障c程序

pwm调速控制小车循迹壁障c程序#include< reg51.h >#define uchar unsigned char#define uint unsigned int#define MOTOR_C P1 //P1口作为电机的控制口。

//#define SIGNAL P3 //P3口的低两位为循迹传感器输入口。

#define SHELVES 10 //速度总档数。

#define BACK 0xfa //后退。

#define FORWARD 0xf5 //前进。

sbit senserr = P3^2; //(右)循迹。

sbit senserl = P3^3; //(左)循迹。

sbit hwf = P3^0; //(前)红外壁障传感器入口。

sbit hwb = P3^1; //(后)红外壁障传感器入口。

sbit PWM_R = P1^0; //右电机PWM输入口。

sbit PWM_L = P1^2; //左电机PWM输入口。

sbit PWM_HR = P1^1; //(后退)右电机。

sbit PWM_HL = P1^3; //(后退)左电机。

void timer0_init( void ); //定时器0初始化函数。

void timer1_init( void ); //定时器1初始化函数。

void right( void ); //前进右转弯函数。

void left( void ); //前进左转弯函数。

void forward( void ); //前进函数。

void hright(void); //后退右转函数。

void hleft(void); //后退左转函数。

void back(void); //后退函数。

uchar percent_l = 0; //(前进)左轮占空比。

uchar percent_r = 0; //(前进)右轮占空比。

uchar percent_hl = 0; //(后退)左轮占空比。

循迹小车原理知识讲解

循迹小车原理知识讲解

寻迹小车在历届全国大学生电子设计竞赛中多次出现了集光、机、电于一体的简易智能小车题目。

笔者通过论证、比较、实验之后,制作出了简易小车的寻迹电路系统。

整个系统基于普通玩具小车的机械结构,并利用了小车的底盘、前后轮电机及其自动复原装置,能够平稳跟踪路面黑色轨迹运行。

总体方案整个电路系统分为检测、控制、驱动三个模块。

首先利用光电对管对路面信号进行检测,经过比较器处理之后,送给软件控制模块进行实时控制,输出相应的信号给驱动芯片驱动电机转动,从而控制整个小车的运动。

系统方案方框图如图1所示。

图1 智能小车寻迹系统框图传感检测单元小车循迹原理该智能小车在画有黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。

笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。

红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。

在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。

传感器的选择市场上用于红外探测法的器件较多,可以利用反射式传感器外接简单电路自制探头,也可以使用结构简单、工作性能可靠的集成式红外探头。

ST系列集成红外探头价格便宜、体积小、使用方便、性能可靠、用途广泛,所以该系统中最终选择了ST168反射传感器作为红外光的发射和接收器件,其内部结构和外接电路均较为简单,如图2所示:图2 ST168检测电路ST168采用高发射功率红外光、电二极管和高灵敏光电晶体管组成,采用非接触式检测方式。

ST168的检测距离很小,一般为8~15毫米,因为8毫米以下是它的检测盲区,而大于15毫米则很容易受干扰。

笔者经过多次测试、比较,发现把传感器安装在距离检测物表面10毫米时,检测效果最好。

R1限制发射二极管的电流,发射管的电流和发射功率成正比,但受其极限输入正向电流50mA的影响,用R1=150的电阻作为限流电阻,Vcc=5V作为电源电压,测试发现发射功率完全能满足检测需要;可变电阻R2可限制接收电路的电流,一方面保护接收红外管;另一方面可调节检测电路的灵敏度。

循迹小车制作过程

循迹小车制作过程

电子与信息工程系电子实训课题: 基于STC89C52RC和TCRT5000光电传感器的自动循迹小车设计专业:班级:学号:姓名:指导老师:完成日期:目录目录 0摘要: (1)1.任务及要求 (2)1.1任务 (2)2.系统设计方案 (2)2.1小车循迹原理 (2)2.2控制系统总体设计 (2)3.系统方案 (3)3.1 寻迹传感器模块 (3)3.1.1光电传感器TCRT5000简介 (3)3.1.2比较器LM324简介 (3)3.1.3具体电路 (4)3.1.4传感器安装 (4)3.2控制器模块 (5)3.3电源模块 (6)3.4电机及驱动模块 (6)3.4.1电机 (6)3.4.2驱动 (7)4.软件设计 (8)4.1 PWM控制 (8)4.2 总体软件流程图 (8)4.3小车循迹流程图 (9)4.4中断程序流程图 (10)4.5单片机测序 (11)5.参考资料 (15)摘要本设计是基于STC89C52单片机控制的简易自动寻迹小车系统,包括小车系统构成软硬件设计方法。

小车完成的主要功能是能够自主识别黑色引导线并根据黑线走向实现快速稳定的寻线行驶。

小车系统以 STC89S52 单片机为系统控制处理器;采用TCRT5000光电传感器获取赛道的信息,并通过驱动控制电路来对小车的方向和速度进行控制。

此外,对整个控制软件进行设计和程序的编制以及程序的调试,并最终完成软件和硬件的融合,实现小车的预期功能。

1.任务及要求1.1任务设计一个基于直流电机的自动寻迹小车,使小车能够自动检测地面黑色轨迹,并沿着黑色车轨迹行驶。

系统方案方框图如图1-1所示。

图1-1 系统方案方框图2.系统设计方案2.1小车循迹原理这里的循迹是指小车在白色地板上循黑线行走,由于黑线和白色地板对光线的反射系数不同,可以根据接收到的反射光的强弱来判断“道路”。

通常采取的方法是红外探测法。

红外探测法,即利用红外线在不同颜色的物体表面具有不同的反射性质的特点,在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色纸质地板时发生漫反射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,小车上的接收管接收不到红外光。

循迹小车原理图和部分程序

循迹小车原理图和部分程序

循迹小车原理图和部分程序其实循迹原理很简单,如下图,就是红外反射照到黑线上方时光都被黑线吸收了(注意要调节好反射管到地面的距离),接着反入射模块就输出一个低电平给控制器(单片机),然后单片机就根据这个低电平执行动作(左转或者右转)#include <iom16v.h>#include <macros.h>#define uchar unsigned char#define uint unsigned intuchar front;void delayus(uint us){while(us)us--;}/*一毫秒的延时*/void delay(uint i){unsigned int a, b;for (a = 1; a < i; a++){for (b = 1; b<1141; b++){;}}}/******************* 一毫秒的延时**********************/void delayms(uintms){uinti,j;for(i=0;i<ms;i++)for(j=0;j<1141;j++);}/**********************小车停车函数***************************/void stop(){OCR1A=0;OCR1B=0;PORTD&=~BIT(PD0);PORTD&=~BIT(PD1);PORTD&=~BIT(PD2);PORTD&=~BIT(PD3); }/*****************小车向前向后函数*****************/void go(uchar speed){OCR1A=speed;OCR1B=speed;if(front==1){PORTD&=~BIT(PD0);PORTD&=~BIT(PD1);PORTD|=BIT(PD2);PORTD|=BIT(PD3 );}else{OCR1A=200;OCR1B=200;PORTD&=~BIT(PD0);PORTD&=~BIT(PD1);PORTD|=BIT(PD2);PORTD|=BIT(PD3);}}/**************小车向左向右的函数*******************/void l_r(uchar p){switch(p){case 'r' :{PORTD&=~BIT(PD0);PORTD&=~BIT(PD6);PORTD|=BIT(PD1);PORTD|=BIT( PD7);OCR1A=200;OCR1B=0;break;}case 'l' :{PORTD&=~BIT(PD0);PORTD&=~BIT(PD6);PORTD|=BIT(PD1);PORTD|=BIT( PD7);OCR1A=0;OCR1B=200;break;}}}void main(){uchartemp,active;DDRA=0X00;DDRB=0X00;PORTB = 0xFF;DDRC = 0xFF;PORTC = 0x03;DDRD = 0xFF;PORTD = 0xFF;/*端口设置*/TCCR1A=0xA1;TCCR1B=0x03;/*8位相位修正PWM,64分频*/TCNT1H=0xFF;TCNT1L=0XFF;delay(300);while(1){front=1;temp=PINB&0XFF;if(temp!=0XFF){switch(temp)//////这就是根据反射模块传给单片机的信号进行各动作 {case 0b11111110:{l_r('r');break;}case 0b11111101:{l_r('l');break;}case 0b11111011:{l_r('r');break;}case 0b11110111:{l_r('l');break;}case 0b11101111:{l_r('r');break;}case 0b11011111:{l_r('l');break;}case 0b10111111:{stop();delay(1000);break;} default: go(80);}}}。

循迹小车基本原理

循迹小车基本原理
传感器的安装
正确选择检测方法和传感器件是决定循迹效果的重要因素,而且正确的器件安装方法也是循迹电路好 坏的一个重要因素。从简单、方便、可靠等角度岀发,同时在底盘装设4个红外探测头,进行两级方向纠
正控制,将大大提高其循迹的可靠性,具体位Fra bibliotek分布如图3所示。
图3红外探头的分布图
图中循迹传感器全部在一条直线上。其中X1与Y1为第一级方向控制传感器,X2与Y2为第二级方向控制
压的大小输岀不同的电压和功率,解决了负载能力不够这个问题。
结语
此方案选择的器件比较简单,实际中也很容易实现。经过多次测试,结果表明在一定的弧度范围内,小车 能够沿着黑线轨迹行进,达到了预期目标。不足之处,由于小车采用直流电机,其速度控制不够精确和稳 定,不能实现急转和大弧度的拐弯。
程序
#include<reg51.h>
软件控制单元
单片机选型及程序流程
此部分是整个小车运行的核心部件,起着控制小车所有运行状态的作用。控制方法有很多,大部分都
采用单片机控制。由于51单片机具有价格低廉是使用简单的特点,这里选择了ATMEL公司的AT89S51
作为控制核心部件,其程序控制方框图如图4所示。
图4系统的程序流程图
小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,一旦检测到某个I/O口有信
传感器的选择
市场上用于红外探测法的器件较多,可以利用反射式传感器外接简单电路自制探头,也可以使用结构
简单、工作性能可靠的集成式红外探头。ST系列集成红外探头价格便宜、体积小、使用方便、性能可靠、
用途广泛,所以该系统中最终选择了ST168反射传感器作为红外光的发射和接收器件,其内部结构和外接
图2ST168检测电路

智能小车的循迹避障行驶说明书

智能小车的循迹避障行驶说明书

智能小车的循迹避障行驶目录摘要 (III)Abstract (IV)第一章绪论 (1)1.1 课题背景 (1)1.2 研究目的及意义 (1)1.3 本设计完成的工作 (2)第二章总体设计方案 (3)2.1 方案选择及论证 (4)4446662.2 最终方案 (7)第三章硬件设计 (8)3.1 主控器STC89C52 (8)3.2 单片机复位电路设计 (10)3.3 单片机时钟电路设计 (10)3.4 避障模块 (10)3.5 电源设计 (11)3.6 电机驱动模块 (12)3.7 红外循迹模块 (13)3.8 小车车体总体设计 (15)第四章软件设计 (16)4.1 主程序流程图 (16)第五章系统的安装与调试 (18)5.1 系统的安装 (18)5.2 电路的调试 (19) (20)205.3 测试结果与分析 (20)结论 (21)参考文献 (22)致谢........................................................ 错误!未定义书签。

附录1 整机电路原理图.. (22)附录2 部分源程序 (23)智能小车的循迹避障行驶摘要在现代化的生产生活中,智能机器人已经渐渐普及到国防、工业、交通、生活等各个领域。

为了使生产更加有效率更加安全,使生活更加方便、轻松,智能机器人起到了越来越重要的作用。

智能小车属于智能机器人的一种,同样能给生产生活带来极大的便利。

它能够自己判断路面情况,并将各种信息反馈给单片机。

所用到的学科有自动控制原理、传感器技术、计算机和信息技术等多门学科。

智能车能够在一定程度上解放人的双手、减小工作强度从而改善人们的生活,提高生产的质量和效率。

能够自动循迹和避绕障碍物行驶则是智能小车需要的最基本的功能。

小车之所以能够自动避开障碍物并进行循迹是因为它可以感测引导线和行进路上的障碍物,因此这里采用超声波测距模块和红外传感器来实现这些功能。

本文先介绍了选题的背景及发展前景,描述了智能车在生产和生活中发展和应用的情况;接着对硬件部分所用器件的原理和特点进行了介绍;然后对软件设计和机械部分进行说明;在文章的最后就整个过程的体会及智能机器人的发展进行了总结和展望。

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

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

学科代码:学号:XXXXXXXXXXXXX 大学(本科)毕业论文题目:基于单片机的多功能智能小车设计学院:专业:年级:姓名:指导教师:完成时间:20 年月日、基于单片机的多功能智能小车设计摘要:近几年,我国经济的迅速的增长使得小车的销售量逐渐升高,2016年,我国新能源汽车的销售达到了51.7万辆,销售率同比增长了20.5%。

汽车数量的日益增多使得交通拥挤的现象越来越严重,因此,交通事故的发生的频率也在逐渐的增多。

为了提高小车运行的安全,本文提出了一种基于单片机的多功能智能型小车的设计。

本文以STC89C51的单片机为核心,设计了一款多功能的智能小车,由于STC89C51的单片机在市场上受到了消费者普遍的好评,利用它进行智能小车的设计,既满足了大众的需求,又提高了小车设计的性能。

同时,本文还结合了直流电机L298N型号的驱动芯片、E18-D80NK 红外避障传感器、TCRT5000红外反射式接近开关传感器对智能小车的整体进行了构架。

关键词:单片机;多功能;智能小车;设计AbstractIn recent years, China's rapid economic growth makes the car sales gradually increased, in 2016, China's new energy vehicle sales reached 517,000, sales rate increased by 20.5%. The increasing number of cars makes traffic congestion more and more serious, so the frequency of traffic accidents is gradually increasing. In order to improve the safety of car operation, this paper presents a multi-functional intelligent car based on single-chip design.In this paper, STC89C51 single-chip as the core, designed a multi-functional smart car, as STC89C51 microcontroller in the market by consumers generally praise, use it for intelligent car design, both to meet the needs of the public, but also improve The performance of the car design. At the same time, this article also combines the DC motor L298N model driver chip, E18-D80NK infrared obstacle avoidance sensor, TCRT5000 infrared reflector proximity switch sensor on the overall structure of the smart car.Key Words: Single-chip;multi-function;intelligent car;design目录Abstract (3)引言 (6)1方案选型 (6)1.1车体设计 (6)1.2电机驱动选择 (6)2.3 PWM调速技术 (8)2.4 循迹模块技术 (9)2.5 避障模块技术 (9)2.6 控制系统模块 (10)2.7电源选择 (10)2总体方案设计 (10)2.1设计任务描述 (10)2.2总体设计 (11)2.3需求分析 (11)2.4总体方案 (11)3硬件电路设计 (11)3.1电源电路设计 (11)3.2驱动电路设计 (12)3.3循迹避障部分电路 (13)4程序设计 (14)4.1主程序设计概述 (14)4.2 主程序流程图 (14)4.3 驱动程序流程图 (15)4.4 循迹程序流程图 (16)4.5 避障程序流程图 (17)5制作安装与调试 (18)5.1小车的安装 (18)5.2小车运动模式调试 (18)5.3小车循迹调试 (19)5.4小车避障调试 (19)5.3小车的功能 (19)结论 (20)参考文献 (21)引言当前,关于智能化小车的设计越来越成为当前学者们关注的热点问题,对于智能小车的设计,采用的方法也越来对多样,利用单片机的程序设计的智能小车也是其中的一种。

循迹避障智能小车设计ppt课件

循迹避障智能小车设计ppt课件
供电线电机驱劢15插入单片机控制模块将p10p11p12p1316安装传感器红外传感器注意放置在车辆的前端边沿以免影响灱灰度传感器注意保持与地面较近的距离红外传感器灰度传感17焊接排线板注意每排串联且相邻排并不可有排间短路同排断路发生18连接剩余排线将所有vcc高电平连一排所有gnd低电平连一排19固定完成20软件部分避障程序避障程序
电 位 器
6
红外传感器
当检测方向遇到障碍物(反射面)时,红外线反射 回来被接 收管接收,经过比较器电路处理之后,绿 色指示灯会亮起,同时信号输出接口输出数字信号 (一个低电平信号0),可通过电位器旋钮调节检 测距离,有效距离范围 2~30cm,工作电压为 3.3V-5V。
顺时针调电位器,检测距离增加;逆时针调电位器 ,检测距离减少。
17
连接剩余排线
将所有vcc高电平连一排 所有Gnd低电平连一排
18
Hale Waihona Puke 固定完成19软件部分
避障程序 .docx
避障.mp4
避障程序
20
循迹程序框图
循迹程序 .docx
循迹.mp4
21
2
总体设计
智能小车采用两轮驱动,左右轮各用一个直 流电机驱动。在车体前部装有用于检测距离 的红外传感器和底部装有用于检测黑白线的 灰度传感器。通过主控芯片对小车的电机驱 动进行控制,实现两个电机不同功能(前进 、停止、后退)组合运行。达到避障、循迹 的目的
3
硬件部分
4
智能小车结构
5
传感器
基于单片机的智能小车设计
指导老师: 班级:
制作:
1
智能小车介绍
智能小车是一种能够通过编程手段完成特定任务的 小型化机器人, 它具 有制作成本低廉,电路结构简单, 程序调试方便等优点.由于具有很强的趣味性,智能 小车深受广大机器人爱好者以及高校学生的喜爱.

智能寻迹避障小车寻线、避障控制程序设计

智能寻迹避障小车寻线、避障控制程序设计

1.1.2 寻迹电路原理
小车处于白色区域,这时小车就会沿直线行走 ,当红外发射管左边对准黑线(黑胶带),右 边对准白线(白色地面)时,左边的红外线被 黑线吸收,红外线无法反射回,则左边呈现高 电平,即单片机检测到P3.5=1(左边)、 P3.6=0,这时,小车便向左边修正(左转弯 ),使左边传感器重新回到白色区域。右转弯 过程与左转弯相类似,请学员自行分析。
//左边往前
//右边往前
湖南创博龙智信息 科技有限公司
2.1.4 参考程序代码
void hou() { zuo1=1; zuo2=0; you1=1; you2=0; } void zuo() { zuo1=1; zuo2=0; you1=0; you2=1; } void you() { zuo1=0; zuo2=1; you1=1; you2=0; } //左边往后 //右边往后
智能寻迹小车设计与制作 (寻线、避障控制程序设计)
主讲:雷道仲
湖南创博龙智信息 科技有限公司
任务及要求
任务一:智能寻迹避障小车寻线程序设计 固定路线寻线:学员编写程序使智能
寻线、避障控制模块共设置了两个任务,分别如下:
寻迹避障小车沿黑色圆圈行走,行走过程
中小车一直压着黑线走,不得冲出黑线圆
圈之外或之内。
湖南创博龙智信息 科技有限公司
1.1.4 程序代码
void you() { zuo1=0; zuo2=1; you1=1; you2=0; } void main() { while(1) { if(zuod==0&youd==0) { qian(); out=ZM[1]; } if(zuod==1&youd==0) { while(1) { zuo(); out=ZM[3]; D1=0; if(zuod==0)

小车循迹壁障等流程图

小车循迹壁障等流程图

#include<reg51.h> #include<math.h> #define uchar unsigned char #define uint unsigned int sbit en1=P1^0; /* L298的Enable A */ sbit en2=P1^1; /* L298的Enable B */ sbit s1=P1^2; /* L298的Input 1 */ sbit s2=P1^3; /* L298的Input 2 */ sbit s3=P1^4; /* L298的Input 3 */ sbit s4=P1^5; /* L298的Input 4 */ uchar t=0; /* 中断计数器*/ uchar m1=0; /* 电机1速度值*/ uchar m2=0; /* 电机2速度值*/ uchar tmp1,tmp2; /* 电机当前速度值*/ /* 电机控制函数index-电机号(1,2); speed-电机速度(-100—100) */ void motor(uchar index, char speed) { if(speed>=-100 && speed<=100) { if(index==1) /* 电机1的处理*/ { m1=abs(speed); /* 取速度的绝对值*/ if(speed<0) /* 速度值为负则反转*/ { s1=0; s2=1; } else /* 不为负数则正转*/ { s1=1; s2=0; } } if(index==2) /* 电机2的处理*/ { m2=abs(speed); /* 电机2的速度控制*/ if(speed<0) /* 电机2的方向控制*/ { s3=0; s4=1; } else { s3=1; s4=0; } } } } void delay(uint j) /* 简易延时函数*/ { for(j;j>0;j--); } void main() { uchar i; TMOD=0x02; /* 设定T0的工作模式为2 */ TH0=0x9B; /* 装入定时器的初值*/ TL0=0x9B; EA=1; /* 开中断*/ ET0=1; /* 定时器0允许中断*/ TR0=1; /* 启动定时器0 */ while(1) /* 电机实际控制演示*/ { for(i=0;i<=100;i++) /* 正转加速*/ { motor(1,i); motor(2,i); delay(5000); } for(i=100;i>0;i--) /* 正转减速*/ { motor(1,i); motor(2,i); delay(5000); } for(i=0;i<=100;i++) /* 反转加速*/ { motor(1,-i); motor(2,-i); delay(5000); } for(i=100;i>0;i--) /* 反转减速*/ { motor(1,-i); motor(2,-i); delay(5000); } } } void timer0() interrupt 1 /* T0中断服务程序*/ { if(t==0) /* 1个PWM周期完成后才会接受新数值*/ { tmp1=m1; tmp2=m2; } if(t<tmp1) en1=1; else en1=0; /* 产生电机1的PWM信号*/ if(t<tmp2) en2=1; else en2=0; /* 产生电机2的PWM信号*/ t++; if(t>=100) t=0; /* 1个PWM信号由100次中断产生*/ 有两路PWM,希望对你有帮助!#include "reg52.H"#include "MyType.h"//=============L298端口定义===============sbit ENA = P3^6; //左轮驱动使能sbit IN1 = P0^3; //左轮黑线(-)sbit IN2 = P0^4; //左轮红线(+)sbit IN3 = P0^5; //右轮红线(-)sbit IN4 = P0^6; //右轮黑线(+)sbit ENB = P3^7; //右轮驱动使能//=============PWM================#define PWM_COUST 100 //PWM细分等份100uchar MOTO_speed1; //左边电机转速uchar MOTO_speed2; //右边电机转速uchar PWM_abs1; //左边电机取绝对值后占空比uchar PWM_abs2; //左边电机取绝对值后占空比uchar PWM_var1=20; //左边电机直走速度(不同的电机,此参数不同)uchar PWM_var2=20; //右边电机直走速度uchar PWMAnd = 0; //PWM自增变量/******************************************************************名称:motor(char speed1,char speed2);功能:同时调节电机的转速参数:speed1:电机1的PWM 值;speed2:电机2的PWM值speed>0.正转;speed<0.反转(-100~100)调用:extern int abs(int val); 取绝对值返回:/******************************************************************/ void motor(char speed1,char speed2){ //==============左边电机============= if (speed1>0) { IN1 =0;IN2 =1;//正转} else if (speed1<0) { IN1 =1;IN2 =0;//反转} //==============右边电机============= if (speed2>0) { IN3 =1;IN4 =0;//正转} else if (speed2<0) { IN3 =0;IN4 =1;//反转}} /******************************************************************名称:motor_PWM();功能:PWM占空比输出参数:无调用:无返回:无/******************************************************************/voidmotor_PWM (){ uchar PWM_abs1; uchar PWM_abs2; PWM_abs1=MOTO_speed1; PWM_abs2=MOTO_speed2; if (PWM_abs1>PWMAnd) ENA=1; //左边电机占空比输出else ENA=0; if (PWM_abs2>PWMAnd) ENB=1; //右边电机占空比输出else ENB=0; if (PWMAnd>=PWM_COUST) PWMAnd=0; //PWM计数清零else PWMAnd+=1;} /******************************************************************名称:void TIME_Init ();功能:定时器初始化指令:调用:无返回:无/******************************************************************/ void TIME_Init () {//=========定时器T2初始化PWM================== TCON = 0x00; TMOD = 0x00; RCAPH = 0xff; //定时0.1ms RCAPL = 0x47; TH0 = 0xff; TL0 = 0x47; ET0 = 1; //定时器2中断开TR0 = 1; //PWM定时器关,PWM周期为10ms }/******************************************************************名称:void PWM_Time2 () interrupt 5功能:T2中断,PWM控制参数:调用:motor_PWM();//PWM 占空比输出返回:/******************************************************************/ void PWM_Time2 () interrupt 5{ TR2 = 0; TF2 = 0; ET2 = 0; //定时器0中断禁止motor_PWM();//PWM占空比输出ET2 = 1; //定时中断0开启TR2 = 1;}main(){ TIME_Init () ;motor(50,50);//左右电机的转速都是50}图 3-1 ST188实物图图 3-2 ST188管脚图及内部电路通过ST188检测黑线,输出接收到的信号给LM324 ,接收电压与比较电压比较后,输出信号变为高低电平,再输入到单片机中,用以判定是否检测到黑线。

循迹小车(程序)

循迹小车(程序)

附录程序目录一、前言------------------------------------------------------------二、小车功能------------------------------------------------------三、元器件选择--------------------------------------------------四、 I/O分配及硬件连接简图---------------------------------五、相关模块、算法---------------------------------------------六、系统框图------------------------------------------------------七、调试过程------------------------------------------------------八、小车图片资料---------------------------------------------------九、讲座所感------------------------------------------------------十、实习总结------------------------------------------------------一、前言感生产实习能给我们这次实现自己想法的机会,虽然实验条件异常简陋、资金投入非常有限,总体感觉我的队友们灰常灰常给力啊,我感觉我是抱到大腿了--王威,夏青、峰哥,团队气氛非常好,大家一起讨论,一起分工研究模块,最后一起解决问题调试程序,而且是不同的组合在不同阶段解决了不同的问题,大家合作,各显身手,在奋战中给大三学年画上了圆满的句号。

之前我们本来商量是不是可以拿往年电子设计大赛的题目过来做,如果难度太大就算只实现一部分功能也算是成功完成了,结果研究一天后发现电子设计大赛的题目需要很长时间的知识积累啊,基本上都是准备一个月以上然后开工的,后来王威提议要不我们做个小车吧,超声波测距实现自动物体追踪,控制核心采用单片机,传感器采用广泛用于避障和测距的超声波传感器,前进和后退用普通伺服电机和电机驱动模块实现。

多功能循迹避障小车原理图及PCB绘制过程

多功能循迹避障小车原理图及PCB绘制过程

设计报告课题名称多功能智能小车设计专业班级电子信息工程2班学号学生姓名指导教师2014 年 3 月 30 日1绘制电路原理图1、在桌面上新建一个文件夹,命名文件夹名称为【tfdi】并保存。

如图1-1。

图1新建文件夹2、打开DXP 2004 ,在文件目录下创建一个项目PCB项目文件,【File】→【New】→【Project】→【PCB Project】,并保存在桌面上新建的【dfd】文件夹内,保存的文件名为dfg,在Projects项目面板上出现一个项目dfd.PrjPCB。

3、在DXP2004面板中添加一个原理图文件并追加新文件到项目中:【File】→【New】→【Schatematic】,命名为都放到,保存原理图文件在【地方】文件夹内,则在项目dfd.PrjPCB中出现一个原理图文件dfd.SchDoc。

1.1在原理图右下脚绘制标题栏(1)在打开的电路原理图文件Sheet1.SchDoc的工作区右击→【Options】→【Document Options…】→打开【Document Options】对话框→【Sheet Options】,在【Sheet Options】中选【Title Block】,去掉选项中它前面方框内的【√】号,单击确定。

如图1-2所示:图1-2(2)使用Utility Tools工具栏中的画线和放置文本框工具绘制如图3的表格。

图1-3(3)放置文本框时按【Tab】键,可对字体进行修改如图1-4图1-4(4)为了使其美观,可以调节把它的电器栅长由10改为1,这样就可以把文本字符串挪到表格的正中央位置。

调整后的结果如图5图1-51.2、绘制电路图电容、电阻、电源、二极管、开关、三极管和地线,可以在基本元件库Miscellaneous Devices中找到后直接放置在原理图中。

如图1-6图1-6放置元件对于电机使用搜索功能如图1-7所示图1-7 搜索修改参数,已放置C1为例。

基于51单片机的循迹避障小车的设计ppt课件

基于51单片机的循迹避障小车的设计ppt课件
复位模式基本包括上电自动复位和开关 复位。如图所示,在上电瞬间,电容两端电 压不能突变,且电容负极和reset相连,此 时电压全部加在电阻上,rest引脚电压为高 电平,芯片复位。随后,5V电源开始给电容 充电,电阻上的电压逐渐降低至接近0V,芯 片正常工作。
复位电路
时钟电路
时钟电路是用来产生AT89C51单片机工 作时所必须的时钟信号,AT89C51本身就是 一个复杂的同步时序电路,为保证工作方式 的实现,AT89C51在唯一的时钟信号的控制 下严格的按时序执行指令进行工作,时钟的 频率影响单片机的速度和稳定性。
系统程序流程设计
本智能小车通过实时检测各个模 块传感器的输入信号,利用红外对 管检测黑线实现寻迹,通过光电传 感器实现避障,把所有采集到的信 息送到主处理器,让小车做出正确 的行驶路线。小车的启动与停止, 均采用了声控模块,实现对小车的 声音控制,其程序流程图如图所示。
请多指教
我们系统采用内部时钟方式来为系统提 供时钟信号,如图所示。AT89C51内部有一 个用于构成振荡器的高增益反向放大器,该 放大器的输入输出引脚为XTAL1和XTAL2它们 跨接在晶体振荡器和用于微调的电容,便构 成了一个自激励振荡器。
时钟电路
循迹模块
小车循迹,采用红外检测的方法,红外 检测法是通过黑线和白色对红外线的吸收效 果不同,当红外光线射到白色底板时,会发 生漫反射反射到智能车的接受管上,而射到 黑线则会被吸收不会产生发射,智能车红外 接收管就接收不到。故,整个智能车通过红 外接收管是否接收到红外线来判断黑线和白 线的,从而实现循迹。但需要主要的是,红 外传感器的检测距离有限,一般在3cm之内。 红外光电传感器由1个红外发射管(发射器) 和1个光电二极管(接收器)所构成,循迹 示意图如图所示。

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

51单片机驱动智能小车原理图
2
方案 4:直接采用 9V 直流电源,由稳压模块将 220v 交流电转换为 9V 直流电,再经 7805 稳压到 5V 供单片 机,电机使用。但其不能用于远距离,且在运行中要注意电线的干扰。由于用于本次设计演示的标轨道不太大, 在演示时我们可以人为控制电源线部分,所以我们采用此方案,因为它最经济实惠。电路图如下:
十、总结
这次课程设计,不仅锻炼了我单片机硬件设计的能力,也进一步掌握了 C51 语言的编程,让我对自动控制领 的相关理论有了更深刻的认识,同时也看到了教学知识与工业应用的差距。
继续前进 结束
九、循迹小车程序
8
#include<reg52.h> //*********************第一部分 Start*************************************** sbit IN1=P1^0;//以下是点击驱动芯片 L298 管脚位声明 sbit PWM1=P1^1; sbit IN2=P1^2;
sbit IN3=P1^3; sbit PWM2=P1^4; sbit IN4=P1^5;
sbit RPR1=P1^6;//此处是传感器 RPR220 管脚位声明 sbit RPR2=P1^7;
int count1=0;//用于定时计数的两个全局变量位声明 int count2=0; //*********************第一部分 End***************************************
count1=0; }
13
void time1()interrupt 3 {
TH0=(65536-1000)/256;//定时 1ms TL0=(65536-1000)%256; count2++; if(count2>=1000)//周期是 1s
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include<reg51.h>#include<math.h>#define uchar unsigned char#define uint unsignedint sbit en1=P1^0;/*L298的Enable A*/sbit en2=P1^1;/*L298的Enable B*/sbits1=P1^2;/*L298的Input1*/sbit s2=P1^3;/*L298的Input2*/sbit s3=P1^4;/*L298的Input3*/sbit s4=P1^5;/*L298的Input4*/uchar t=0;/*中断计数器*/ucharm1=0;/*电机1速度值*/uchar m2=0;/*电机2速度值*/uchar tmp1,tmp2;/*电机当前速度值*//*电机控制函数index-电机号(1,2);speed-电机速度(-100—100)*/voidmotor(uchar index,char speed){if(speed>=-100&&speed<=100){if(index==1)/*电机1的处理*/{m1=abs(speed);/*取速度的绝对值*/if(speed<0)/*速度值为负则反转*/{s1=0;s2=1;}else/*不为负数则正转*/{s1=1;s2=0;}}if(index==2)/*电机2的处理*/{m2=abs(speed);/*电机2的速度控制*/if(speed<0)/*电机2的方向控制*/{s3=0;s4=1;}else{s3=1;s4=0;}}}} void delay(uint j)/*简易延时函数*/{for(j;j>0;j--);}void main(){uchar i;TMOD=0x02;/*设定T0的工作模式为2*/TH0=0x9B;/*装入定时器的初值*/TL0=0x9B;EA=1;/*开中断*/ET0=1;/*定时器0允许中断*/TR0=1;/*启动定时器0*/while(1)/*电机实际控制演示*/{for(i=0;i<=100;i++)/*正转加速*/{motor(1,i);motor(2,i);delay(5000);}for(i=100;i>0;i--)/*正转减速*/{motor(1,i);motor(2,i);delay(5000);}for(i=0;i<=100;i++)/*反转加速*/{motor(1,-i);motor(2,-i);delay(5000);}for(i=100;i>0;i--)/*反转减速*/{motor(1,-i);motor(2,-i);delay(5000);}}}void timer0()interrupt1/*T0中断服务程序*/{if(t==0)/*1个PWM周期完成后才会接受新数值*/{tmp1=m1;tmp2=m2;}if(t<tmp1)en1=1;else en1=0;/*产生电机1的PWM信号*/if(t<tmp2)en2=1;else en2=0;/*产生电机2的PWM信号*/t++;if(t>=100)t=0;/*1个PWM信号由100次中断产生*/有两路PWM,希望对你有帮助!#include"reg52.H" #include"MyType.h" //=============L298端口定义=============== sbit ENA=P3^6;//左轮驱动使能sbit IN1=P0^3;//左轮黑线(-)sbit IN2=P0^4;//左轮红线(+)sbit IN3=P0^5;//右轮红线(-)sbit IN4=P0^6;//右轮黑线(+) sbit ENB=P3^7;//右轮驱动使能//=============PWM================#define PWM_COUST100//PWM细分等份100 uchar MOTO_speed1;//左边电机转速uchar MOTO_speed2;//右边电机转速uchar PWM_abs1;//左边电机取绝对值后占空比uchar PWM_abs2;//左边电机取绝对值后占空比uchar PWM_var1=20;//左边电机直走速度(不同的电机,此参数不同)uchar PWM_var2=20;//右边电机直走速度uchar PWMAnd=0;//PWM自增变量/****************************************************************** 名称:motor(char speed1,char speed2);功能:同时调节电机的转速参数:speed1:电机1的PWM值;speed2:电机2的PWM值speed>0.正转;speed<0.反转(-100~100)调用:extern int abs(int val);取绝对值返回:/******************************************************************/voidmotor(char speed1,char speed2) { //==============左边电机============= if(speed1>0) { IN1=0;IN2=1;//正转}else if(speed1<0) { IN1=1;IN2=0;//反转} //==============右边电机============= if(speed2>0) {IN3=1;IN4=0;//正转} else if(speed2<0) { IN3=0;IN4=1;//反转} }/****************************************************************** 名称:motor_PWM();功能:PWM占空比输出参数:无调用:无返回:无/******************************************************************/ voidmotor_PWM() { uchar PWM_abs1; uchar PWM_abs2; PWM_abs1=MOTO_speed1; PWM_abs2=MOTO_speed2; if(PWM_abs1>PWMAnd)ENA=1;//左边电机占空比输出else ENA=0; if(PWM_abs2>PWMAnd)ENB=1;//右边电机占空比输出else ENB=0; if(PWMAnd>=PWM_COUST)PWMAnd=0;//PWM计数清零else PWMAnd+=1; }/****************************************************************** 名称:void TIME_Init();功能:定时器初始化指令:调用:无返回:无/******************************************************************/void TIME_Init(){ //=========定时器T2初始化PWM================== TCON =0x00;TMOD=0x00; RCAPH=0xff;//定时0.1ms RCAPL=0x47; TH0=0xff; TL0=0x47; ET0=1;//定时器2中断开TR0=1;//PWM定时器关,PWM周期为10ms } /****************************************************************** 名称:void PWM_Time2()interrupt 5 功能:T2中断,PWM控制参数:调用:motor_PWM(); //PWM占空比输出返回:/******************************************************************/void PWM_Time2()interrupt5 { TR2=0; TF2=0; ET2=0;//定时器0中断禁止motor_PWM();//PWM占空比输出ET2=1;//定时中断0开启TR2=1; } main(){ TIME_Init();motor(50,50);//左右电机的转速都是50 }图3-1ST188实物图图3-2ST188管脚图及内部电路通过ST188检测黑线,输出接收到的信号给LM324,接收电压与比较电压比较后,输出信号变为高低电平,再输入到单片机中,用以判定是否检测到黑线。

图3-5传感器模块电路图PWM1为1,PWM2为1时,Q1和Q2导通,节点1和节点2都是低电平,Q15和Q16导通,电机不工作。

PWM1为0,PWM2为0时,Q1和Q2导通,节点1和节点2都是高电平,Q13和Q14导通,电机不工作。

PWM1为1,PWM2为0时,Q1导通但Q2不导通,节点1是低电平而节点2是高电平,Q14和Q15导通,电机逆时针转动。

PWM1为0,PWM2为1时,Q1不导通但Q2导通,节点1是高电平而节点2是低电平,Q13和Q16导通,电机顺时针转动。

甲乙各跑一圈第一圈乙超甲第二圈甲超乙甲乙小车各跑一圈图2-1系统实现原理结构图开始甲乙两车在起始点行驶检测第1条转弯标志线检测第2条转弯标志线检测超车标志区左转直行200cm右转驶于起始点甲乙两车在起始点行驶检测第1条转弯标志线甲车左转直行120cm停止检测第2条转弯标志线检测超车标志区甲车开始直行80cm右转驶于起始点无线通信乙车左转进入超车区直行120cm甲乙两车在起始点行驶检测第1条转弯标志线检测第2条转弯标志线乙车右转驶于起始点检测超车标志区乙车左转直行120cm停止乙车开始直行80cm右转驶于起始点无线通信甲车左转进入超车区直行120cm 甲车右转驶于起始点开始系统初始化任务计数器归零是否完成全部任务?N循迹子函数YN图4-1主程序流程图是否完成本次任务?Y结束小车进入循迹模式后,即开始不停地扫描与探测器连接的单片机I/O口,N启动循迹模式探测黑线是否检测到黑线Y判断处理程序向左转Turn _left2向左转Turn_left1向右转Turn_right1向右转Turn_Lright2继续前进图4-2循迹流程图上电运行后,放到没有障碍物的空地上,小车直走。

相关文档
最新文档