遥控小车参赛作品说明书.docx
《遥控小车参赛作品说明书.docx》由会员分享,可在线阅读,更多相关《遥控小车参赛作品说明书.docx(18页珍藏版)》请在冰豆网上搜索。
遥控小车参赛作品说明书
参
赛
说
明
书
课题名称:
单片机控制的无线充电的
微型电动汽车设计
所属院校:
海口经济学院
院系专业:
信息工程学院通信工程
制作团队:
范倩、赵洋涛、王成丰
指导老师:
孙玉轩、何斌
完成时间:
摘要
本作品主要采用无线充电技术与超级电容,用单片机控制无线充放电的切换,无线充电线圈的定位,实现了无线充电的微型电动汽车设计。
本系统使用无线充电与超级电容,可安全,快速,有效的为小车提供电能。
亲手设计基于单片机的无线控制模块电路,并制成了PCB板,通过软件编程实现无线充放电模式的自动切换并用LED灯提示,可随时用LCD显示充电的电压,充电的时间。
小车用L298N电机驱动模块进行驱动,并通过无线遥控控制小车行进方向。
关键字:
无线充电超级电容无线充电控制
一、概述
当今社会,随着世界工业和社会经济的高速发展,人类在能源方面面临着前所未有的严峻挑战。
因此,研究开发替代性绿色能源有着至关重要的现实意义。
手机、MP3和笔记本电脑等便携式电子设备进行充电主要采用的是一端连接交流电源,另一端连接便携式电子设备充电电池的传统充电方式。
这种方式有很多不利的地方,首先频繁的插拔很容易损坏接头.另外也可能带来触电的危险。
因此.非接触式感应充电器在上个世纪末期诞生.凭借其携带方便、成本低、无需布线等优势迅速受到各界关注。
因此,实现无线充电,能量传输效率高,便于携带成为充电系统的研究方向之一。
本作品通过硬件搭建,实现对超级电容的无线充电,再通过超级电容放电,对小车进行供电,用无线遥控模块遥控小车。
全过程使用单片机软件编程进行控制与监控,实现全部功能。
本作品的优点集中在以下几个方面:
1.无线充电解决电气接口不同或充电器不兼容的问题,增强便携性、美观性以及使用的安全性。
在小功率充电方面,产生的磁场与地球磁场相近不会对人体产生伤害,并且电能转化的效率高。
2.超级电容在各种电能储存方式中具有功率密度高,充电速度快,循环使用寿命长,效率高,充放电过程基本可逆,低温性能优越,控制简单,绿色环保,安全性好的优势。
使用超级电容能大大提高储存电量。
3.使用单片机软件编程控制充放电的过程安全性好,电路设计简单,软件编程也很容易。
技术非常成熟。
4.使用无线遥控技术控制小车,通过51单片机最小系统软件编程控制,用L298N驱动模块和无线接收模块,实现小车的无线控制。
二、总体设计
本作品的原理框图如下所示:
以无线充电为核心,利用超级电容的充电迅速,储能多的特性,存储电能。
使用单片机设计一个无线充放电控制模块,对无线充电进行实时监控。
通过无线遥控技术软件编程,使用L298N电机驱动控制小车的行驶。
三、硬件设计
无线充放电控制模块
本作品使用AT89C51单片机,设计硬件电路图,并制成PCB板,通过软件编程实现无线充电控制,实现的功能有:
充放电模式的自动切换,并随时显示监控的电压,显示充电时间以及提示充电是否完全。
3.1.1A/D转换模块
图3.1A/D转换电路
A/D转换模块使用PCF8591芯片,完成充放电电路电压的转换。
PCF8591具有4个模拟输入、1个模拟输出和1个串行I2C总线接口。
本设计使用AIN0模拟输入口,输入充放电的电压值。
3.1.2数码管显示模块
图数码管显示电路
此模块用于单片机控制的电压显示,从而可以试试监控给电池组充电以及放电电情况。
3.1.3最小单片机系统
图单片机最小系统电路
用作小车充电的监控以及电池组的保护、监控,小车无线充电时需要此单片机进行充电正副线圈的匹配。
3.1.4四位独立按键
图独立按键电路
用于用户后续扩展使用。
无线充电模块超级电容
本作品的无线充电采用“磁耦合共振”这种新技术,当发射端通电时,它并不会向外发射电磁波,而只是在周围形成一个非辐射的磁场。
这个磁场用来和接收端联络,激发接收端的共振,从而以很小的消耗为代价来传输能量。
在这项技术中,磁场的强度将不过和地球磁场强度相似,不用担心这种技术会对身体和其他设备产生不良影响。
图无线充电原理图
无线充电模块内部集成了振荡电路、整形电路、检测电路、频率干扰抑制电路、电流自动控制、无线功率发射电路等部分组成。
发射模块可以在5~12V电压下工作,输出为5V500mA。
其接收端接收的功率由收发距离决定。
图无线收发模块实物
超级电容就是一个用来存储无线充电能量的电池。
相对于一般的电池,超级电容具有充电时间短、使用寿命长、温度特性好、节约能源和绿色环保等特点。
本作品共使用6个耐压值为的超级电容,每三个电容串联,最后把串联的电容并联。
四键无线遥控控制模块
无线遥控模块使用集成模块,基本技术参数如下所示:
工作电压(V):
DC5V
静态电流(mA):
工作温度:
-10℃~+70℃
接收灵敏度(dBm):
-105DB
工作频率(MHz):
315、(266-433MHZ频率段可任选)
工作方式:
M4(点动:
按住不松手就输出,一松手就停止输出)、L4(互锁:
四路同时只能有一路输出)、T4(自锁:
四路相互独立输出、互不影响,按一下输出再按一下停止输出)
天线长度:
1/4波长的天线接收效果最好,一般采用50欧姆单芯导线,天线的长度315M的约为23cm,433M的约为17cm;
图无线遥控模块
电机驱动模块
L298N驱动模块,可以直接驱动两路3-30V直流电机,并提供5V输出接口,直接给单片机电路供电,支持3VMCU控制,方便控制直流电机速度和方向。
原理图如下:
图3.8L298N电机驱动原理图
模块接线方法:
IN1-IN4接单片机的P04-P07的I/O接口,OUT1-OUT2接直流电机1,OUT3-OUT4接直流电机2,VCC,GND接超级电容的正负极。
5V输出直接给单片机供电。
四软件设计
充放电控制程序设计
无线充放电的控制,依赖于单片机的软件编程。
使用PCF8591芯片实现A/D转换。
用12MHz的晶振实现定时计数,通过四位独立按键切换显示。
利用二极管的单向导通性实现自动切换。
无线遥控程序设计
无线遥控接收模块直接与单片机的接口相连,可直接通过遥控控制。
小车的电机驱动与接口相连,通过改变高低电平,实现小车的各项操作。
五发展方向
本作品只是初步实现无线充电的功能,还需要进一步完善。
比如说,只是进行短距离充电,考虑长距离充电转化效率还能低。
充电的时间也过长,需要增加充电电压与电流,实现快速充电。
超级电容也需要一个保护电路,以免充电过压或过流等。
无线充电控制电路的功能太过单一,可通过I/O口进行扩充,增加作品功能。
六附录
无线充放电控制原理图
无线充放电控制PCB图
源程序
6.3.1无线充放电控制源程序
#include<>
#include<>
#defineucharunsignedchar
#defineuintunsignedint
sbitrs=P2^5;//定义
sbitrw=P2^6;//定义读\写端口
sbite=P2^7;//定义使能信号引脚
sbitSDA=P3^2;
sbitSCL=P3^3;
ucharnum=0;
charshi,fen,miao;
ucharcount,mm;
ucharcodetable[]=":
";
ucharcodetable0[]="V:
";
ucharcodetable1[]="Time00:
00:
00";
/******延时***********************************/
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
/************************写指令***********************/
voidwrite_com(ucharcom)
{
rs=0;//指令
rw=0;//写入
e=0;
P0=com;
delay(5);
e=1;//允许
delay(5);
e=0;
}
/*************************写数据********************/
voidwrite_date(uchardate)
{
rs=1;//数据
rw=0;//写入
e=0;
P0=date;
delay(5);
e=1;//允许
delay(5);
e=0;
}
///////延时函数//////
//////////启动总线////////
voidStart(){
SDA=1;
SCL=1;
delay(5);
SDA=0;
delay(5);
SCL=0;
}
//////////结束总线///////////
voidStop()
{
SDA=0;
SCL=1;
delay(5);
SDA=1;
delay(5);
}
//////非应答函数/////////
voidNoack(){
SDA=1;
delay(5);
SCL=1;
delay(5);
SCL=0;
}
voidAck(){
SDA=0;
delay(5);
SCL=1;
delay(5);
SCL=0;
}
/////////数据发送函数//////
voidSend(ucharc)
{
ucharbite;
for(bite=0;bite<8;bite++)
{
if((c<elseSDA=0;
SCL=1;
delay(5);
//Delayus();
SCL=0;
}
SDA=1;
delay(5);
}
///////接收函数///////////
ucharRec()
{
ucharbyte,bite;
SDA=1;
for(bite=0;bite<8;bite++)
{
SCL=0;
delay(5);
SCL=1;
delay(5);
byte<<=1;
if(SDA==1)byte+=1;
}
SCL=0;
delay(5);
return(byte);
}
///////////读取数值////////
ucharRead(ucharAI){
ucharz;
Start();
Send(0x90);
Ack();
Send(0x40|AI);
Ack();
Start();
Send(0x91);
Ack();
z=Rec();
Noack();
Stop();
return(z);
}
/**********************LCD初始化***************/
voidinit(){
ucharn;
shi=0;
fen=0;
miao=0;
write_com(0x38);
write_com(0x0c);//显示控制
write_com(0x06);//地址加1字符不移动
write_com(0x01);//清零
write_com(0x80);
for(n=0;n<8;n++)
write_date(table0[n]);
delay(5);
write_com(0xc0);
for(n=0;n<16;n++)
write_date(table1[n]);
delay(5);
TMOD|=0x11;
EA=1;
ET0=1;
TR0=1;
ET1=1;
TR1=1;
TH0=(65536-46083)/256;
TL0=(65536-46083)%256;
TH1=(65536-2000)/256;//重新赋值
TL1=(65536-2000)%256;
}
/*************************显示*********************/
voidwrite_sfm(ucharadd,uchardate)
{
ucharshi,ge;//对应的一个数分离开来分别送入对应地址显示
shi=date/10;
ge=date%10;
write_com(0xc0+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
/*voidwrite_sf(ucharadd,ucharnum)
{uchari,j,k,l;
i=num/1000;
j=num%100;
k=(num%100)/10;
l=(num%100)%10;
write_com(0x80+add);
write_date(0x30+i);
write_date(0x30+j);
write_date(0x30+k);
write_date(0x30+l);
}
/*********************主函数*************************/
voidmain()
{
init();
while
(1){
num=Read(0);
write_com(0x80+3);
write_date(0x30+num/1000);
write_date(0x30+(num/100)%10);
write_date(0x30+(num%100)/10);
write_com(0x80+7);
write_date(0x30+(num%100)%10);
write_sfm(6,shi);//每次变化后的时数据送入显示
write_sfm(9,fen);//每次变化后的分数据送入显示
write_sfm(12,miao);//每次变化后的秒数据送入显示
}
}
voidTimer1(void)interrupt3{
TH1=(65536-2000)/256;//重新赋值
TL1=(65536-2000)%256;
}
/******************中断处理**********************/
voidyy()interrupt1
{
TH0=(65536-46083)/256;
TL0=(65536-45083)%256;
count++;
if(count==20){
count=0;//count到20清零
miao++;//秒加1
if(miao==60){
miao=0;//秒到60清零
fen++;//分加1
if(fen==60)
{
fen=0;//分到60清零
shi++;//时加1
if(shi==24)
{
shi=0;//时到24清零
}
}}}}
6.3.2无线遥控源程序
#include<>
#include<>
sbitP04=P0^4;
sbitP05=P0^5;
sbitP06=P0^6;
sbitP07=P0^7;
sbitP23=P2^3;
unsignedchara,b;
voiddelay10ms()
{
for(a=100;a>0;a--)
for(b=225;b>0;b--);
}
sbitA=P3^4;
sbitE=P3^5;
sbitC=P3^6;
sbitD=P3^7;
voidmain(void)
{
while
(1)
{
P23=0;
if(A==1)//前进
{
P04=0;P05=1;P06=0;P07=1;
delay10ms();
}
if(E==1)//后退
{
P04=1;P05=0;P06=1;P07=0;
delay10ms();
}
if(C==1)//左转
{
P04=0;P05=1;P06=1;P07=0;
delay10ms();
}
if(D==1)//右转
{
P04=1;P05=0;P06=0;P07=1;
}
if(A==0&&E==0&&C==0&&D==0)//停止
{
P04=1;P05=1;P06=1;P07=1;
}
}
}