2011年全国大学生电子设计竞赛
设计
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
I智能寻线小车
作者:汪志兴 李得明 杨波
引言
自工业革命以来,随着电气的发展,人类进入了文明的新阶段。机器人已经广泛用于工业、农业、服务业、军事、机械、交通、航天航空等领域。智能机器人水平的不断提高,大大提高了劳动效率,减轻了劳动强度。机器人与人类并肩作战,在征服自然,改造自然地过程中发挥着重要作用。
智能小车是集理论力学、机械结构、数字电路、模拟电路、传感器、单片机、控制理论和算法等多门学科为一体的综合系统,其内容涵盖机械、电子、自动控制原理、计算机、传感技术等多个学科和领域。
本文设计的基于ATmagel6L的智能小车就是要求其从起跑线出发,然后通过自身自动调整向角和车速,使其自动沿着一条黑色引导线行驶。
1 智能小车的硬件设计
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
本智能小车控制系统的结构如图1所示。其中的Atmegal6L单片机是智能小车的控制模块,它是高性能、低功耗的8位AVR微处理器,采用先进的RISC结构,具有16K字节的系统内可编程Flash和512字节的EEPROM。工作于16 MHz时,其性能高达16 MIPS,并具有32个可编程通用I/0口和用于边界扫描的JTAG接口,基本都能够满足设计要求。电路稳压模块输入12 V电压。经过稳压电路后可得到9 V、5 V两种电压,其中9 V电压用于电机驱动模块的工作电压,5 V电压则用于单片机的工作。图2所示是RPR220光电传感模块的电路图,光电传感是由10个RPR220型光电对管组成。RPR220是一种一体化反射型光电探测器,其发射器是一个砷化镓红外发光二极管,而接收器则是一个高灵敏度的硅平面光电三极管。L298N的INPUT、OUTPUT两端口用于提供稳定的电压以使电机转动。
1.1 光电传感模块
图2所示是本系统中光电传感模块的电路图。寻线路径一般是刻在白色平面上的3 cm的黑线,小车沿着黑线循径,当检测到白线,即二极管发出的光被白线反射回来时,光电对管中的三极管导通,比较器6号端口输入为低电平,经过比较器后,7号端口输出为高电平。当检测到黑线时,光被吸收,光强度减弱,光电对管中的三极管不导通,比较器6号端输入为高电平,7号端输出为低电平。通过PC端口将高低电平(l和0)反馈给单片机后,经单片机处理后可用于调整车头的转向,以使黑线刚好在10个光电探头的中间,从而使小车平稳前进。在7号端串一个0.1μF的电容再接地,这样,经过滤波后进入到单片机中的方波就非常完美。将这个光电管与码盘相连,通过光电管不断扫描码盘格数,这样,当码盘转动且转速较低时,6号端的信号就可变为频率与转速一一对应的方波。但是,当码盘速度很快时,6号端信号将变为频率与转速一一对应的正弦信号。放大器LM324可用作比较器,可将6号端处的正弦信号与基准电压进行比较后,然后将在7号端产生频率与转速一一对应的方波,单片机采集此信号后,即可根据公式计算出直流电机的各个参数,从而精确地控制小车的转向与位移。
1.2 电机驱动模块
图3所示是L298N驱动模块的电路连接图。L298N作为电机驱动芯片,是一款高电压大电流全桥驱动芯片,它的频率高,可控制两个直流电机,而且具有控制使能端,工作电压可通过4、9引脚分别输入9 V、5 V电压。ENA、ENB引脚是两个使能端口,而INT、OUT则为电机驱动引脚,通过改变OUT端的逻辑电平可控制电机的正、反、停止状态,
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
1所列是直流电机控制逻辑。L298N的5、6、7、10、ll、12六个引脚可直接与单片机的PD端口相连,而通过对单片机的编程则可以实现直流电机PWM调速。
l.3 单片机控制模块
采用Atmel公司的Atmegal6L单片机可对小车进行控制,该单片机具有32个功能强大的可编程I/O接口和4个PWM通道,并具有八路十位ADC,可对小车进行实时控制。该单片机的PC0~PC7八个端口可与光电传感模块的八个光电探头相连。设探头检测的逻辑实际值为P,假定值N,车轮的运动状态分别为forward-move、right-move、leftmove、hard-right-move、hard-left-move,通过对实际值P与假定值N(0b0011-1100)的比较,可得出如表2所列的Atmegal6L单片机的控制模块参数表,其中x为无关项。设计时,可将Atmegal6L的PD2~PD3分别连接带码盘的两个光电对管,以用于精确测量车轮的转向与位移;PD5和PD4可分别连在电机驱动模块的使能端ENA和ENB。PDl、PD0、PD6和PD7分别于电机驱动模块的INl、IN2、IN3、IN4相连,INl、IN2口一般用于PWM的输入,以便利用PWM调速法,即由单片机输出一系列频率固定的方波,并通过功率放大器来驱动电机,再通过单片机编程来改变输出方波的占空比,这样就可改变加在电机上的平均电压,从而改变电机的转速。
2 智能小车的软件设计方案
基于AVR单片机和C语言编程的系统软件
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图如图4所示。
3 结束语
本文着重讨论了光电传感器、单片机控制和稳压器原理及这几个模块之间的相互沟通与协调关系,本系统采用便宜的红外对管,并以具有强大功能的ATmagel6L单片机为主控制器,同时以L298N驱动芯片通过C语言程序编写调试软件,从而完成了能够智能循迹、自动避障、结构模块化、抗干扰能力强的智能小车的设计。该系统通过对小车的调试,能够使小车成功平稳地在任意给定的黑线上行驶,而且循迹效果很好,运行十分平稳,同时速度也很快,而且在拐弯处不会因速度大而产生离心现象。
智能小车在军事、民用、科研、航天探测领域已得到广泛的应用,它的发展与自动控制、单片机开发、控制算法的优化和微机存储处理速度有着密切的关系,很值得进一步的研究与探索。
智能小车的直流电机控制
2009年03月06日 20:21 转载 作者:本站 用户评论(0)
关键字:
智能小车的直流电机控制
【实验目的】
了解以单片机为核心的直流电机控制系统
掌握此系统中直流电机驱动与调速原理
熟悉ICCAVR 软件编译环境,会编写控制程序
【实验器材】
智能小车一部,下载线一根
【实验原理】
直流电机驱动控制系统示意图:
在本实验中所分析的是以单片机ATMEGA8515L 为核心的直流电机控制系统。
ATMEGA8515L 芯片的引脚图如下:
功放驱动电路采用基于双极性H-桥型脉宽调整方式PWM 的集成电路L293D。L293D是单
块集成电路,高电压,高电流,四通道驱动,设计用来接受DTL 或者TTL 逻辑电平,驱动感
性负载(比如 继电器,直流和步近马达),和开关电源晶体管。其引脚图如下:
ATMEGA8515L 利用I/O 口(PD5,PE2,PD4,PD6)向驱动电路输出控制电平,这些I/O
口作为单片机控制指令的输出,连接到驱动电路中L293D 的相应管脚上。
其真值表如下:
对于电机的转速调整,我们是采用脉宽调制(PWM)办法,控制电机的时候,电源并非
连续地向电机供电,而是在一个特定的频率下以方波脉冲的形式提供电能。不同占空比的方
波信号能对电机起到调速作用,这是因为电机实际上是一个大电感,它有阻碍输入电流和电
压突变的能力,因此脉冲输入信号被平均分配到作用时间上,这样,改变在始能端PE2 和
PD5 上输入方波的占空比就能改变加在电机两端的电压大小,从而改变了转速。
此实验中用微处理机来实现脉宽调制,通常的方法有两种:
(1)用软件方式来实现,即通过执行软件延时循环程序交替改变端口某个二进制位输出逻
辑状态来产生脉宽调制信号,设置不同的延时时间得到不同的占空比。
(2)硬件电路自动产生PWM 信号,不占用CPU 处理的时间。
这就要用到ATMEGA8515L 的在PWM 模式下的计数器1,具体内容可参考相关书籍。
【实验步骤】
(1) 连接好电路,把数据线,下载线连接好,打开电源
(2) 进入ICCAVR 编译环境,调试程序直至没有错误,编译环境简介请参见附录一
(3) 下载,烧录进单片机,观察实验结果
(4) 反复修改调试程序,逐渐增强其功能
(5) 写好实验报告,实验心得体会
【程序示例】
1、小车前进一段——>左转一圈——>右转一圈——>前进一段——>后退一段——>停下
//ICC-AVR application builder : 2005-5-19 19:12:13
// Target : M8515
// Crystal: 4.0000Mhz
#include
#include
unsigned int time;
unsigned int yan;
void port_init(void)
{
PORTA = 0x00;
DDRA = 0xFF;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0xFF;
PORTE = 0x00;
DDRE = 0xFF;
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
MCUCR = 0x00;
EMCUCR =0x00;
GICR = 0x00;
TIMSK = 0x00;
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void delay(unsigned int yan)
{
while(yan>0)
yan--;
}
void runforth(void)
{
while(time<1000)
{
PORTE=0x04;
PORTD=0x70;
delay(2000);
time++;
}
time=0;
}
void zuozhuanwan(void)
{while(time<1000)
{
PORTE=0x00;
PORTD=0X70;
delay(2000);
time++;
}
time=0;
}
void youzhuanwan(void)
{while(time<1000)
{
PORTE=0x04;
PORTD=0x50;
delay(2000);
time++;
}
time=0;
}
void houtui(void)
{while(time<1000)
{
PORTE=0x04;
PORTD=0x20;
delay(2000);
time++;
}
time=0;
}
void stop(void)
{
PORTE=0x00;
PORTD=0x00;
}
void main(void)
{ init_devices();
time=0;
runforth();
zuozhuanwan();
youzhuanwan();
runforth();
houtui();
stop();
}
2、调速程序
以下是用两定时器来控制加在两方向控制口的方波占空比,以此来对电机进行调速,而
同学们可以利用对两始能端高低电平进行不同延时来实现调速功能。
//ICC-AVR application builder : 2005-5-18 16:45:27
// Target : M8515
// Crystal: 4.0000Mhz
#include
#include
unsigned char a;
unsigned char p;
unsigned char m;
unsigned char n;
void port_init(void)
{
PORTA = 0x00;
DDRA = 0x00;
PORTB = 0x00;
DDRB = 0x00;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x70;
PORTE = 0x00;
DDRE = 0x04;
}
//TIMER0 initialize - prescale:64
// WGM: Normal
// desired value: 40Hz
// actual value: Out of range
void timer0_init(void)
{
TCCR0 = 0x00; //stop timer
TCNT0 = 0xfa /*INVALID SETTING*/; //set count value
TCCR0 = 0x03; //start timer
}
#pragma interrupt_handler timer0_ovf_isr:8
void timer0_ovf_isr(void)
{
TCNT0 = 0xfa /*INVALID SETTING*/; //reload counter value
if(m==a)
{PORTD=0x70;
TCCR1B=0x03;
TCCR0=0x00;
n=1;}
else{m++;}
}
//TIMER1 initialize - prescale:64
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 40Hz
// actual value: 40.013Hz (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xff; //setup
TCNT1L = 0xfa;
OCR1AH = 0x06;
OCR1AL = 0x1A;
OCR1BH = 0x06;
OCR1BL = 0x1A;
TCCR1A = 0x00;
TCCR1B = 0x00;
}
#pragma interrupt_handler timer1_ovf_isr:7
void timer1_ovf_isr(void)
{
TCNT1H = 0xff; //reload counter high value
TCNT1L = 0xfa; //reload counter low value
if(n==250-a)
{PORTD=0x20;
TCCR0=0x03;
TCCR1B=0x00;
m=1;
if(p==0){if(a==125){p=1;}
else{a++;}}
else{{if(a==1){p=0;}
else{a--;}}}}
else{n++;}
}
//call this routine to initialize all peripherals
void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
timer1_init();
MCUCR = 0x00;
EMCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x82;
SEI(); //re-enable interrupts
//all peripherals are now initialized
}
void main(void)
{a=0;
p=0;
m=1;
n=1;
init_devices();
while(1)
{PORTE=0x04;}
}智能机器人在当今社会的应用越来越广泛。从普通的玩具机器人到工业控制机器人,从能够炒菜的机器人到可以进行太空探测的机器人,可以预见今后智能机器人的应用将更加广泛。普通的无线遥控车大家都很熟悉,任天堂的电玩WII大家也都觉得很神奇。熟悉的不好玩,神奇的又玩不起,可能是很多人遇到的共同问题。本设计从全新的思维角度出发,制作一个日常生活可以玩的智能小车,以飨有共同爱好的读者。
系统总体设计
智能小车系统原理是,将三维坐标传感器安装在小车上,小车即具有智能感知功能,就会随着目标物的前后左右移动而跟着移动。系统主要有3个组件:一为三维坐标光学传感器(ETOMS-ET21X111),用于采集目标物的移动坐标,该传感器使用非常简单;二为MCU(EMC-EM78P156),读取传感器数据控制马达转动,EM78P156是市面上常见的MCU,使用简单,价格便宜;三是马达,马达选用普通直流马达即可,采用PWM控制。系统整体框架如图1所示。
图1 系统整体框架
该设计的整体功能简单概括起来就是:让小车能够跟着人(或是目标物)走。分开来讲需要实现以下3个小功能:传感器能够正确读取X、
Y、Z的坐标值,这是首要条件。MCU能够正确判断X、Z坐标值的大小变化,这是关键。可能有人会有疑问,为什么不判断Y坐标变化呢?那是因为小车不能上下跳跃(上下方为Y轴)。MCU根据坐标值的大小变化控制马达转向及马达PWM的时间,这是结果。
硬件系统设计
1 传感器周边电路设计
ETOMS-ET21X111是一款高性能具有X、Y、Z坐标资料输出功能的光感传感器。具有如下特点:高速资料输出,每秒钟输出坐标资料高达75frame;低电压工作,电压范围2.7~3.5V;采用
标准
excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载
RS232串行资料输出格式输出坐标值;使用外部晶振,范围0.5~12MHz,通常采用3.58MHz;具有可控制曝光接口EO4~EO7。
EO4~EO7这四个接口是用于曝光控制的,既可以用软件进行控制,也可以用硬件的方式进行控制。根据自己的需要选择合适的即可。本设计采用硬件的方式将这四个接口全部置为高电平。
传感器周边详细的接口电路如图2所示,从图2中可知EO4~EO7为高,这是曝光设置为硬件拉高,也可以在软件中设置。IC正常工作时,坐标数据由RS232端口输出。注意图2中的4个LED为红外LED。IC工作电压是3.3V,系统采用5V供电。IC采用3.58MHz外接晶振,上电自动复位后即可正常工作。
图2 传感器接口电路
2 MCU接口电路设计
MCU周边控制电路详细设计如图3所示。图3中L、L+控制左边路马达PWM,R、R+控制右路马达PWM。RS232接收传感器坐标数据输入。IC工作于3.3V电压,上电后自动复位。系统时钟采用4MHz外接晶振。
图3 MCU接口电路
3 左路马达控制电路
左路马达控制电路如图4所示。右路马达控制电路同左路的一样,图中Q3、Q4采用PNP管,L和L+不可同时为LOW,以免造成短路。
图4 左路马达控制电路
软件系统设计
系统上电后,首先进行初始化,对EMC78P156的寄存器进行设置,使能中断标志寄存器,等待中断。图5是主程序流程图。
图5 主程序流程图
中断产生时进入中断处理子程序,首先要关闭中断标志且保护好现场,然后读取并解析XYZ坐标值,分成以下几种情况。
(1)判断X轴变化,如果X值在大于14小于等于17时,马达不左右转动,然后再判断Z轴坐标值的变化,如果Z值也在大于14小于等于17时,马达不前后转动。
(2)如果X轴坐标值大于17,判断Z轴坐标,若Z值大于17,则反转右马达,之后左右马达后转;若Z值小于14,则正转左马达,之后左右马达前转;否则马达不转动。
(3)如果X轴坐标值小于14,判断Z轴坐标,若Z值大于17,则反转左马达,之后左右马达后转;若Z值小于14,则正转右马达,之后左右马达前转;否则马达不转动。中断处理子程序的流程如图6所示。
图6 中断处理子程序流程
设计技巧
1 传感器的设计技巧
ET21X111对红外线的光谱响应最好,但自然光中含有大量的红外线,所以强烈的自然光会影响传感器的数据,导致输出的坐标与实际坐标有较大的偏差,解决方法是加滤光片,但这也只能起到衰减作用,具体应用视情况而定。
2 马达控制电路设计技巧
设计控制马达正反转的电路时要注意:因MCU在上电的时候,I/O的状态是不确定的,所以程序在一开始就要将Q3、Q4的两个I/O设成HI(Q3、Q4为PNP管,如果为NPN管则I/O设成LOW),以防止在上电的时候两个I/O都为LOW,使Q3、Q4导通形成短路。另外需要注意的是在同一时间Q3、Q4只能有一个是导通的。
3 MCU设计技巧
在电刷直流马达启动或转动的时候,会产生很大的电源毛刺。这对MCU的工作非常不利,所以加入此LCπ型滤波电路,如图7所示。
图7 滤波电路
4 程序设计技巧
智能小车在运行的过程中,需要一边读取传感器传过来的坐标数据,一边控制马达的PWM输出。传感器会每12ms输出一次坐标资料,所以最好的方式是采用中断来读传感器资料,而在没有资料输出的时间做PWM输出的动作。