基于单片机89c51循迹小车原理与程序
- 格式:doc
- 大小:2.26 MB
- 文档页数:14
基于STC89C51单片机的智能小车设计摘要:该文主要简述了怎样才能借助STC89C51单片机来促成智能小车的设计。
本车使用LN298N驱动芯片驱动,红外传感器采集道路信息,并通过对所采集信息的分析,实现自动控制电机转向从而改变行驶路径,绕开障碍物,最终全面实现智能车的自动循迹、避障等等基本功能。
关键字:STC89C51单片机;循迹;避障;红外线传感器;PWM一、引言现今,智能化飞速发展,在国人的生活中中获得了广泛的应用。
其中,车辆工程的研究前沿必定是智能车辆,它涵盖了人工智能、自控原理、信息采集技术等多个领域的专业技能,是未来的发展趋势。
其中,智能小车便是一个典型代表,在小车上将加装传感器,借助传感器辨识外界信号,把信号信息反馈到传感器,传感器再按照编写的程序输入之下一步的指令给执行器,进而促成小车的自动智能管理控制。
本文所提及的自动避障智能车是基于STC89C51单片机开发,传感器采用红外发射和接受来探测道路信息,从而实现所需功能。
二、整体设计总体设计即以STC89C51单片机作为核心,组合而成的功能模块分别为:管控模块、供电模块、避障模块、金属探测模块、循迹模块。
2.1控制模块该文其所提到的智能小车即以STC89C51单片机作为管理控制核心,借助程序的设计以及编写来管理控制小车,即以达到对于小车的整体管理控制。
2.2驱动模块小车的驱动电机选用直流电机,使用极为方便,并选用集成处理器驱动。
集成芯片驱动外围电路简单,比较容易实现,且调试通过率高,故障的发生率较低。
该文选用的就是LN298N功能模块,该类功能模块提供4输出或6输出单片机信号源,可用跳线帽灵活多样选用,大力支持PWM调速,且板载上拉电阻,可在一定程度上解决STC89C51单片机I/O口驱动能力不足的问题。
控制器经由管控LN298N使能端,继而实现电机的摆动与否,以更进一步实现小车的不断前进与转向。
直流电机变向原理:向左转时,左轮静止不动,右轮转动;向右转时,右轮静止不动,左轮转动。
2020.19设计研发基于AT89C51单片机的智能寻迹小车设计桑吴刚(江苏省昆山第一中等专业学校,江苏昆山,215300)摘要:智能小车是近年来发展起来的一门新兴综合技术,在军事、科研和工业中有广阔的应用前景。
本文旨在从硬件和软件出发,设计一辆以单片机为控制核心的自动寻迹智能小车,智能小车探测和识别轨迹釆用红外管,同时将反馈回来的信号送入单片机,单片机将控制字送入电机,在整个系统设计中,我们釆用PWM技术,来控制智能小车舵机的转向和电机转速,使小车实现智能行走。
关键词:单片机;智能小车;硬件和软件Design of intelligent tracking car based on AT89C51Sang Wugang(Kunshan No.1Specialized Secondary School Jiangsu Province,Kunshan Jiangsu,215300)Abstrac t:Intelligent car is a new comprehensive technology developed in recent years,which has broad application prospects in military,scientific research and industry*The purpose of this paper is to design an automatic tracking intelligent car with MCU as the control core.The intelligent car uses infrared tube to detect and identify the track.At the same time,the feedback signal is sent to the MCU.The MCU sends th€control word to the motor.In the whole system design,we use PWM technology to control the steering gear and motor speed of the intelligerrt car,Make the car realize intelligent walking.Keywords;single chip microcomputer;intelligent car;hardware and software0引言智能寻迹小车系统主要由三部分组成,即机械结构部分、硬件部分和软件部分。
基于51单片机的循迹小车系统设计摘要80C51单片机是一款八位单片机,他的易用性和多功能性受到了广大使用者的好评。
在生活中但凡涉及到自动控制的地方都会出现单片机的身影,单片机的应用有利于产品的小型化、智能化,并且能够提高生产效率.这里介绍的是如何用AT89C52单片机来实现小车的循迹功能,该设计是结合科研项目而确定的设计类课题。
本系统以设计题目的要求为目的,采用AT89C52单片机为控制核心,利用红外传感器检测道路上的黑线,控制电动小汽车的自动循迹,快慢速行驶,以及自动停车,并可以自动记录时间、里程和速度,和寻光功能。
整个系统的电路结构非常简单,可靠性能很高。
实验测试结果满足要求,本文着重介绍了该系统的硬件设计方法及测试结果分析。
关键词:80C51单片机;电动小车;pwm调速;光电检测;自动调速系统Car tracking system based on microcontrollerAbstract80C51 is a 8 bit single chip computer。
Its easily using and multi—function suffer large users。
In life,whenever it comes to automatic control of the local microcontroller will appear figure, microcontroller applications in favor of product miniaturization,intelligent,and can improve productivity. Here is how to use AT89C52 microcontroller to achieve the car tracking feature, which is designed to determine the combination of scientific research and design class topic.This system design requirements of the subject for the purpose of using AT89C52 microcontroller core,the use of infrared sensors to detect the black line on the road,the automatic tracking control of electric cars,fast low traffic speeds,as well as automatic parking, and can automatically record time ,mileage and speed, and look for the light function.The circuit structureof the entire system is very simple, very high reliability. The test results meet the requirements,the paper focuses on the hardware design and test results of the system analysis.Keywords:80C51 microcontroller;Electric car Pwm speed; A photodetector;Automatic Speed Control System。
自循迹小车第一章引言1.1 设计目的通过设计进一步掌握51单片机的应用,特别是在嵌入式系统中的应用。
进一步学习51单片机在系统中的控制功能,能够合理设计单片机的外围电路,并使之与单片机构成整个系统。
1.2 设计方案介绍该智能车采用红外对管方案进行道路检测,单片机根据采集到的红外对管的不同状态判断小车当前状态,通过pid控制发出控制命令,控电机的工作状态以实现对小车姿态的控制。
1.3 技术报告内容安排本技术报告主要分为三个部分。
第一部分是对整个系统实现方法的一个概要说明,主要内容是对整个技术方案的概述;第二部分是对硬件电路设计的说明,主要介绍系统传感器的设计及其他硬件电路的设计原理等;第三部分是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、算法说明及代码设计介绍等。
第二章技术方案概要说明本模型车的电路系统包括电源管理模块、单片机模块、传感器模块、电机驱动模块.在整个系统中,由电源管理模块实现对其他各模块的电源管理。
其中,对单片机、光电管提供5V电压,对电机提供6V电压路径识别电路由3对光电发送与接收管组成。
由于路面存在黑色引导线,落在黑线区域内的光电接收管接收到反射的光线的强度与白色的路面不同,进而在光电接收管两端产生不同的电压值,由此判断路线的走向。
传感器模块将当前采集到的一组电压值传递给单片机,进而根据一定得算法对舵机进行控制,使小车自动寻线行走。
单片机模块是智能车的核心部分,主要完成对外围各个模块的管理,实现对外围模块的信号发送,以及对传感器模块的信号采集,并根据软件算法对所采集的信号进行处理,发送信号给执行模块进行任务执行,还对各种突发事件进行监控和处理,保证整个系统的正常运作。
电机驱动采用L293驱动芯片,该芯片支持2路电机驱动同时支持PWM 调速第三章硬件电路的设计3.1 单片机最小系统小车采用STC公司的STC89C52RC单片机作为控制芯片,图3-1是其最小系统电路。
专业整理基于 STC89C51 单片机智能小车控制项目名称:基于单片机 STC89C51 智能小车控制 小组成员:xx 班级:xx 指导教师:xx 开发结束时间:2011 年 7 月 10 日 星期日WORD 完美格式专业整理目录 1.1 项目概述................................................................. 3 1.2 项目要求................................................................. 3 1.3 系统设计................................................................. 31.3.1 框图设计 ........................................................... 3 1.3.2 知识点 ............................................................. 4 1.4 硬件设计................................................................. 4 1.4.1 电路原理图 ......................................................... 4 1.4.2 原件清单........................................................... 6 1.4.3 L293D 驱动单片机的原理简介 ......................................... 7 1.4.4 STC89C51 单片机管脚图及其功能 ...................................... 7 1.5 软件设计................................................................. 9 1.5.1 程序流程图......................................................... 9 1.5.2 L293D 驱动器管脚赋值表 ............................................ 10 1.5.3 程序清单.......................................................... 10 1.6 软件仿真及硬件调试...................................................... 21 1.6.2 硬件调试.......................................................... 21 1.6.1 软件仿真.......................................................... 22 1.7 总结.................................................................... 23 1.8 文献参考................................................................ 23WORD 完美格式专业整理1.1 项目概述随着单片机技术的不断发展和完善已经大量的运用在工业的控制、数据的采集、智能化 仪表、机电一体化、家用电器等领域,极大地提高了这些领域的技术水平和自动化控制水平。
基于51单片机四路循迹小车[导读]这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~这学期开设的51单片机课程的课程设计即将验收,今天开始正式着手做循迹小车~一. 任务要求二. 系统原理本系统以设计题目的要求为目的,采用STC89C52单片机为控制核心,利用红外传感器检测轨道,控制电动小汽车的自动循迹,快慢速行驶。
这里的轨道是指汽车沿着白色地板上的黑线行驶。
由于黑线与白地板的反射系数不同,可以根据接收到的反射光的强度来判断“道路”。
常用的方法是红外检测。
红外检测方法,即在汽车行驶过程中,利用红外光在具有不同颜色的物体表面的不同反射特性,不断向地面发射红外光。
当红外光与白纸地板相遇时,会发生漫反射,反射光被安装在车内的接收器接收,如果遇到黑线,就会变成红色。
外部光被吸收,车内的接收器不能接收红外线。
单片机根据是否接收到反射的红外光来确定黑线的位置和汽车的行驶路线。
三. 整体方案1. 控制模块小车的核心控制部件采用STC公司生产的8位单片机STC89C52。
它是一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。
STC89C52有3个16 位定时器/计数器,2个外部中断,1个串口中断。
最小系统51单片机的具体引脚功能不细说,不了解的可自行百度。
直接上最小系统电路图(自己画的,凑合着看)。
顺便说一句,在我看来一个没有指示灯的电路是最烦的电路<(`^´)> 我的复位一定要有灯才行!三部分:①电源电路:给单片机提供5V的电源②时钟电路:外接11.0592M石英晶振。
③复位电路:确保单片机是从一个确定的初始状态开始。
焊接时注意P0口要接上拉电阻,否则不能用,一般都用排阻做上拉电阻(当然如果能自己画板子就更好了)。
去除AD网格线记一下怎么去除AD网格线,如图步骤,最后去掉Visible前面的对勾即可,别忘记最后点OK:2. 电机驱动模块我使用的是最经典的LM298N电机驱动:我太喜欢用298了。
基于51单片机的红外遥控小车设计和制作本文介绍一款红外线遥控小车,以AT89S51单片机为核心控制器,用L289驱动直流电机工作,控制小车的运行。
本款小车具有红外线遥控手动驾驶、自动驾驶、寻迹前进等功能。
本系统采用模块化设计,软件用C语言编写。
一、设计任务和要求以AT98C51单片机为核心,制作一款红外遥控小车,小车具有自动驾驶,手动驾驶和循迹前进等功能。
自动驾驶时,前进过程中可以避障。
手动驾驶时,遥控控制小车前进、后退、左转、右转、加速等操作。
寻迹前进时小车还可以按照预先设计好的轨迹前进。
二、系统组成及工作原理本系统由硬件和软件两部分组成。
硬件部分主要完成红外编码信号的发射和接受、障碍物检测、轨迹检测、直流电机运行的发生等功能。
软件主要完成信号的检测和处理、设备的驱动及控制等功能。
AT89S51单片机查询红外信号并解码,查询各个检测部分输入的信号,并进行相应处理,包括电机的正反转,判断是否遇到障碍物,判断是否小车其那金中有出轨等。
系统结构框图如图1所示。
图1 系统结构框图三、主要硬件电路1、遥控发射器电路该电路的主要控制器件为遥控器芯片HT6221,如图2所示。
HT6221将红外码调制成38KHZ的脉冲信号通过红外发射二极管发出红外编码。
图2中D1是红外发射二极管,D2是按键指示灯,当有按键按下时D2点亮。
HT6221的编码规则是:当一个键按下超过36ms,振荡器使芯片激活,如果这个按键按下且延迟大约108ms,这108ms发射代码由一个起始码(9ms),一个结果码(4.5ms),低8位地址码(9ms~18ms),高8位地址码(9~18ms),8位数据码(9~18ms)和这8位数据码的反码(9~18ms)组成,如果按键按下超过108ms仍未松开,接下来发射的代码将仅由起始码(9ms)和结束码(2.5ms)组成。
按照上图的接法,K1~K8的数据码分别为:0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07。
自循迹小车第一章引言1.1 设计目的通过设计进一步掌握51单片机的应用,特别是在嵌入式系统中的应用。
进一步学习51单片机在系统中的控制功能,能够合理设计单片机的外围电路,并使之与单片机构成整个系统。
1.2 设计方案介绍该智能车采用红外对管方案进行道路检测,单片机根据采集到的红外对管的不同状态判断小车当前状态,通过pid控制发出控制命令,控电机的工作状态以实现对小车姿态的控制。
1.3 技术报告内容安排本技术报告主要分为三个部分。
第一部分是对整个系统实现方法的一个概要说明,主要内容是对整个技术方案的概述;第二部分是对硬件电路设计的说明,主要介绍系统传感器的设计及其他硬件电路的设计原理等;第三部分是对系统软件设计部分的说明,主要内容是智能模型车设计中主要用到的控制理论、算法说明及代码设计介绍等。
第二章技术方案概要说明本模型车的电路系统包括电源管理模块、单片机模块、传感器模块、电机驱动模块.在整个系统中,由电源管理模块实现对其他各模块的电源管理。
其中,对单片机、光电管提供5V电压,对电机提供6V电压路径识别电路由3对光电发送与接收管组成。
由于路面存在黑色引导线,落在黑线区域内的光电接收管接收到反射的光线的强度与白色的路面不同,进而在光电接收管两端产生不同的电压值,由此判断路线的走向。
传感器模块将当前采集到的一组电压值传递给单片机,进而根据一定得算法对舵机进行控制,使小车自动寻线行走。
单片机模块是智能车的核心部分,主要完成对外围各个模块的管理,实现对外围模块的信号发送,以及对传感器模块的信号采集,并根据软件算法对所采集的信号进行处理,发送信号给执行模块进行任务执行,还对各种突发事件进行监控和处理,保证整个系统的正常运作。
电机驱动采用L293驱动芯片,该芯片支持2路电机驱动同时支持PWM 调速第三章硬件电路的设计3.1 单片机最小系统小车采用STC公司的STC89C52RC单片机作为控制芯片,图3-1是其最小系统电路。
主要包括:时钟电路、电源电路、复位电路。
其中各个部分的功能如下:1、时钟电路:给单片机提供一个外接的12MHz的石英晶振。
2、电源电路:给单片机提供5V电源。
3、复位电路:在电压达到正常值时给单片机一个复位信号。
图3-1 单片机最小系统原理图3.2 传感器电路光电寻线方案一般由多对红外收发管组成,通过检测接收到的反射光强,判断黑白线。
原理图由红外对管和电压比较器两部分组成,红外对管输出的模拟电压通过电压比较器转换成数字电平输出到单片机。
芯片使用LM339具有4路电压比较器3-2赛道检测原理图3.3 电机驱动采用L293驱动芯片,该芯片支持2路电机驱动同时支持PWM调速L293驱动3.3 电源电路设计模型车通过自身系统,采集赛道信息,获取自身速度信息,加以处理,由芯片给出指令控制其前进转向等动作,各部分都需要由电路支持,电源管理尤为重要。
在本设计中,51单片机使用5V电源,电机使用6V电源。
考虑到电源为充电电池组,额定电压为7.2V,实际充满电后电压则为6.5-6.8V,所以单片机及传感器模块采用LM1117-5稳压后的5V电源供电,电机直接由电池供电。
***********************************程序说明:本附录:源程序主代码****************************************/ #include "reg52.h"#define uint unsigned int#define uchar unsigned charsbit K1=P2^0;sbit K2=P2^1;sbit K3=P2^2;sbit K4=P2^3;sbit LED1=P1^0;sbit LED2=P1^1;sbit LED3=P1^2;sbit LED4=P1^3;sbit PWM1=P3^2;sbit PWM2=P3^3;uchar PWM1_Cycle=0,PWM2_Cycle=0;//PWM占空比void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void PWM_Init(){TMOD = 0x11 ;TH0=(65535-100)/256;//定时5usTL0=(65535-100)%256;TH1=(65535-100)/256;//定时10usTL1=(65535-100)%256;ET0=1;ET1=1;TR0=1;TR1=0;EA=1;//开中断}/******************************************************************** ***函数功能:小车前进*时间:2013、3、29********************************************************************* */void Advance(){P0=0x50;}/******************************************************************** ***函数功能:小车后退*时间:2013、3、29********************************************************************* */void Retreat(){P0=0xa0;}/******************************************************************** ***函数功能:小车左转*时间:2013、3、29********************************************************************* */void Turn_left1(){P0=0x10;delay(500);P0=0;}/***********************************************************************函数功能:小车右转*时间:2013、3、29********************************************************************* */void Turn_right1(){P0=0x40;delay(500);P0=0;}void main(){PWM_Init();PWM1_Cycle=30;//初始速度,可改变其大小是速度使变化while(1){if(K1==1){Turn_right1();}else if(K2==1){Advance();}else if(K4==1){Turn_left1();}elseAdvance();}}/******************************************************************** ******函数功能:产生占空比可调的PWM波*参数:PWM1_Cycle********************************************************************* *****/void PWM1_Produce() interrupt 1static unsigned int t1 ; //tt用来保存当前时间在一秒中的比例位置t1++;TH0=(65535-100)/256;//定时100usTL0=(65535-100)%256;if(t1==100){t1=0;PWM1=1;}if(PWM1_Cycle==t1){PWM1=0;}}/******************************************************************** ******函数功能:产生占空比可调的PWM波*参数:PWM1_Cycle********************************************************************* *****/void PWM2_Produce() interrupt 3{static unsigned int t2 ; //tt用来保存当前时间在一秒中的比例位置t2++;TH1=(65535-100)/256;//定时100usTL1=(65535-100)%256;if(t2==100){t2=0;PWM2=1;}if(PWM2_Cycle==t2){PWM2=0;}}元件清单附录:源程序主代码#include <reg52.h>#include <intrins.h>#include <math.h>#define uchar unsigned char#define uint unsigned int#define MIDDLE 1390//舵机中心位置#define LEFT 1600#define RIGHT 1000#define T 20000#define HIGH 7300 //电机基准速度sbit rudder=P1^0; //定义舵机PWM波输出端口为P1.0口sbit pulse=P1^1; //定义后轮PWM波输出端口为P1.1口char flag1=0,flag2=0; //定义全局变量(flag1用于控制舵机//PWM标志位,flag2用于控制电机PWM)uint b=0,a=0; //b用来装载电机所需的高电平时间,a用于保存电机所需高电平时间void main(){uchar receive,ek[4]={7,7,7,7};uint pidr=0;uint pidlr=0;uint ppid=0;IE=0x8a;TMOD=0x11;TH0=0x00;TL0=0x00;TR0=1;TH1=0x00;TL1=0x00;TR1=1;while(1){ receive=P2; //采集光电传感器的值/*--------------switch----------------*/switch(receive) //根据采集到的值进行判断{case 0x7f:ek[3]=0;break; //0111 1111 最左边(或右边)1个光电传感器检测到黑线case 0x3f:ek[3]=1;break; //0011 1111 最左边(或右边)2个光电传感器检测到黑线case 0xbf:ek[3]=2;break; //1011 1111 依次类推case 0x9f:ek[3]=3;break; //1001 1111case 0xdf:ek[3]=4;break; //1101 1111case 0xcf:ek[3]=5;break; //1100 1111case 0xef:ek[3]=6;break; //1110 1111case 0xe7:ek[3]=7;break; //1110 0111case 0xf7:ek[3]=8;break; //1111 0111case 0xf3:ek[3]=9;break; //1111 0011case 0xfb:ek[3]=10;break; //1111 1011case 0xf9:ek[3]=11;break; //1111 1001case 0xfd:ek[3]=12;break; //1111 1101case 0xfc:ek[3]=13;break; //1111 1100case 0xfe:ek[3]=14;break; //1111 1110default: ek[3]=15;break; //1111 1111 没有检测到黑线(是需要保持上一次测量值的)}/*--------------switch----------------*/if(ek[3]= =15){pidr = pidlr;}else{pidr=0.2*pidlr+0.8*(23*(ek[3]-7)+2*(ek[3]+ek[2]+ek[1]+ek[0]-28)+7*(ek[3]-ek[2]));if(ek[2]!=ek[3])ppid=-160*(cabs(ek[3]-7))+220*(cabs(ek[1]-7)-cabs(ek[3]-7));}a=HIGH+ppid; //a是电机高电平时间b=pidr+MIDDLE; //b就是舵机PWM波高电平时间if(b>LEFT)b=LEFT;if(b<RIGHT)b=RIGHT;{char i;for(i=0;i<3;i++)ek[i]=ek[i+1];}pidlr=pidr;}}void zhongduan_t0(void) interrupt 1 //产生舵机PWM波中断子程序(T0中断){if(flag1==0){TH0=(uchar)((65536-b)/256);TL0=(uchar)((65536-b)%256);flag1=1;rudder=1;}else{TH0=(uchar)((38869+b)/256);TL0=(uchar)((38869+b)%256);flag1=0;rudder=0;}}void zhongduan_t1(void) interrupt 3{if(flag2==0){TH1=(uchar)((65536-HIGH)/256);TL1=(uchar)((65536-HIGH)%256);flag2=1;pulse=0;}else{TH1=(65536-T+HIGH)/256;TL1=(65536-T+HIGH)%256;flag2=0;pulse=1;}}。