电动车控制器设计.docx
《电动车控制器设计.docx》由会员分享,可在线阅读,更多相关《电动车控制器设计.docx(18页珍藏版)》请在冰豆网上搜索。
电动车控制器设计
金华职业技术学院
JINHUACOLLEGEOFPROFESSIONANDTECHNOLOGY
基于单片机的电动车
控制器的设计
项目三设计报告
题目电动车控制器
专业应用电子技术
班级应电101
小组编号第八组
组员
指导教师
2012年5月30日
【摘要】
随着科技的迅速发展,单片机的应用也越来越广泛,并带动传统控制检测技术不断更新。
现在的车速表大多是电子式的,用LED数码管或LCD即时显示,显示更加直观。
电子式车速表采用接触车速传感器代替软轴传动,可使车速表的安装位置不受距离限制,进一步有效地克服了机械式车速表中的诸多不足。
本次设计给出了以AT89C51为核心,利用单片机的运算和控制功能,并采用系统化LED显示模块实时显示所测速度的设计方案,以及串口数据存储电路和系统软件。
有LED数码显像管构成。
详细介绍了单片机的测量转速系统及PC机与单片机之间的串行通讯。
充分发挥了单片机的性能。
本文重点是测量速度并显示在2位LED数码管上。
其优点硬件是电路简单,软件功能完善,测量速度快、精度高、控制系统可靠,性价比较高等特点。
关键字:
51单片机,转速,霍尔传感器,数码显示。
【目录】
【摘要】1
【前言】2
【系统功能分析】3
【系统要求及主要内容】4
【系统总体设计】5
【硬件电路设计】6
1.单片机模块7
2.时钟电路7
3.复位电路8
4.显示电路9
【软件设计】10
1.单片机转速程序设计思路及过程11
2.单片机程序设计思路11
3.单片机转速计算程序12
【故障分析与解决方案】12
【设计总结】13
【参考文献】14
【附录】15
【前言】
1.设计背景:
在全球倡导绿色环保的大趋势下,我国加大了对车辆排放和噪声的管理,由于电动自行车具有无污染、低噪声和轻便快捷等优点,是一种绿色环保的交通工具。
随着我国城市规模的迅速扩大及农村道路的日益改善,长期依靠脚踏自行车的人们将会把目标转向电动自行车,对电动自行车需求也会越来越大。
人们对环境的关注以及相关技术的更新,有力地促进了电动自行车的发展。
2.设计意义:
传统的机械式车速表是由旋转磁场作用于转动盘,使转动盘连同车速表指针发生同向的偏转。
当电磁转矩与弹簧产生的阻力矩平衡时,指针偏转停留在某一角度上。
指针偏转角与车速成正比,因而可用其表示车速。
因此,低速时车速表指针摆动剧烈、测量及显示精度不高。
现在的车速表大多是电子式的,用LED数码管或LCD显示,使速度显示更加直观。
采用接触车速传感器代替软轴传动,可使车速表的安装位置不受距离限制,有效地克服了机械式车速表中的诸多不足。
电子式车速表更加智能,车速表的功能也更加人性化。
【系统功能分析】
系统功能概述:
功能:
AT89C51单片机接收霍尔传感器传来的脉冲信号,单片机根据外部中断,以及内部定时器进行记数计算出电机转速送到LED显示。
组成及框图:
传感器电路、转速测量、LED显示、电平转换电路设计。
电平转换
传感器
单片机
驱动电路
LED显示
系统硬件电路
应用:
从实用的角度看,评价一个系统实用价值的重要标准,就是这个系统对社会生活和科技观念有多大的贡献。
转速测量系统具有大范围、高精度等优点、测量速度快,这种系统将会有良好的应用。
【系统要求及主要内容】
将霍尔传感器产生的脉冲信号输出入到单片机的外部中断0口,单片机工作在内部定时器工作方式0,对周期信号进行内部记数,调用计算公式算出转速,调用显示程序显示在LED上。
主要内容:
(1)单片机部分主要完成电机转速的测量。
(2)LED部分主要是把转速显示出来。
(3)发送部分主要是完成电平转换。
系统主要完成功能:
测量系统:
1.设计并制作单片机的转速测量的硬件系统;
2.用C语言完成转速测量的软件系统;
3.要求把转速显示在2位LED上,精度为0.1%;
根据系统要实现的功能以及要求,要实现单片机的转速测量主要是各个模块的设计,定时器记数功能、以及LED驱动、电平转换。
单片机可通过编程控制外围部件,能实现较高的自动化程度。
以它为系统核心的控制模块可实现主从控制,完成预定的任务。
【系统总体设计】
硬件电路设计思路:
硬件设计的任务是根据总体设计要求,在选择的机型的基础上,具体确定系统中所要使用的元器件,设计出系统的原理框图、电路原理图和pcb图。
89C51单片机通过INT0输入传感器的脉冲信号,P2口接LED动态显示。
转速测量部分的硬件设计思路:
本次设计单片机部分的硬件框图如图所示。
显示电路
复位电路
CPU
执行
单元
发送电路
时钟电路
单片机部分硬件框图
【硬件电路设计】
整个单片机测量转速系统为单片机控制模块、霍尔传感器模块、发送模块,各个模块都承担着各自的任务。
设计单片机模块,考虑到单片机本身的外围电路较多,所以在单片机模块方面需要极为小心。
在整个电路设计时要考虑电平转换电路。
1.单片机模块
根据系统功能要求以及单片机硬件电路设计思路对单片机模块进行设计,要使单片机准确的测量电机转速,并且使测出的数据能显示出来,所以整个单片机部分分为传感器电路、时钟电路、复位电路、执行元件以及显示电路五个部分。
处理执行元件:
单片机我们采用AT89C51。
AT89C51是一种带4K字节闪烁可编程可擦除只读存贮器的低电压,高性能CMOS8位微处理器,俗称单片机。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2.时钟电路
时钟电路是计算机的心脏,它控制着计算机的工作节奏。
51单片机允许的时钟频率是因型号而异的典型值为12MHZ
51单片机内部都有一个反相放大器,XTAL1、XTAL2分别为反相放大器输入和输出端,外接定时反馈元件以后就组成振荡器,产生时钟送至单片机内部的各个部件。
AT89C51是属于CMOS8位微处理器,它的时钟电路在结构上有别于NMOS型的单片机。
单片机时钟电路框图
3.复位电路
计算机在启动运行时都需要复位,使中央处理器CPU和系统中的其它部件都处于一个确定的初始状态,并从这个状态开始工作。
单片机采用的复位方式是自动复位方式。
对于AT89C51单片机只要接一个电容至VCC即可。
在加电瞬间,电容通过电阻充电,就在RST端出现一定时间的高电平,只要高电平时间足够长,就可以使MCS-51有效的复位。
RST端在加电时应保持的高电平时间包括VCC的上升时间和振荡器起振的时间,Vss上升时间若为10ms,振荡器起振的时间和频率有关。
10MHZ时约为1ms,1MHZ时约为10ms,所以一般为了可靠的复位,RST在上电应保持20ms以上的高电平。
RC时间常数越大,上电RST端保持高电平的时间越长。
若复位电路失效,加电后CPU从一个随机的状态开始工作,系统就不能正常运转。
上电复位电路
4.显示电路
显示电路采用LED数码管动态显示,LED是一种外加电压从而渡过电流并发出可见光的器件。
LED是属于电流控制器件,使用时必须加限流电阻。
为了节省I/O口线,我们采用的动态显示方式。
所谓动态显示,就一位一位地轮流点亮各位显示器(扫描),对于每一位显示器来说,每隔一段时间点亮一次。
显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。
调整电流和时间参数,可实现亮度较高较稳定的显示。
2位动态显示电路
【软件设计】
软件需要解决的是单片机中断服务程序的设计、计算程序的设计、显示部分的程序设计。
1.单片机转速程序设计思路及过程
单片机测量转速可以分为若干模块,然后在主程序中调用各个模块,流程图如下图所示。
主程序流程图
2.单片机程序设计思路
计算转速公式:
n=60/NTc(r/min)
其中,N是内部定时器的计数值,为三字节,分别由TH0,TL0,VTT构成,Tc为时基。
单片机的转速测量完成,定时器T0作为内部定时器,外部中断来的时候读取TH0,TL0,并同时清零TH0、TL0,使定时器再次循环计内部脉冲。
此外,对于低速情况下,我们还要设定一个软件计数器VTT,当外部中断还没来而内部定时器已经溢出,产生定时器0中断时,增加VTT,作为三字节中的高字节。
三字节组成除数,上面的常数为四字节,所以计算程序实际上就是调用一个四字节除三字节商为两字节(最高转速36000r/min足够)的程序。
为数码管能够显示出来,需将二进制转换为十进制,在将十进制转换为非压缩BCD码后,才能调用查表程序,最后送显示。
3.单片机转速计算程序
由于本次设计的系统要实现的功能是将霍尔传感器的信号送到单片机的外部中断口,再对周期方波进行内部计数,调用计算程序把转速测出来。
【故障分析与解决方案】
故障出现情况:
1.单片机的中断服务程序不能执行;
2.中断执行低速情况也就是软件记数功能不对;
3.测得转速不准确,在波形频率变化下显示转速却不变。
解决方案:
1.检查程序中的开头,中断入口地址,发现中断定时0的地址写成中断定时1的入口地址了。
外部中断没有执行跟没有中断信号加入有关系。
2.中断服务程序中程序设计有问题,要先读去反映转速的TH0,TL0,再去清0,软件记数的高字节VTT应该在定时中断0中的服务程序中自增的同时清TH0,TL0,在外部中断程序中要读取三字节的记数值后同时清三个记数器,再从中断返回;
3.在确定转速计算程序的正确性的条件下出现了转速不准确,就是在调用转换程序时出现了问题,观察程序时发现调用子程序是传送的参数不对,在用寄存器R的时候出现了重复现象,导致转换过程中出现了混乱。
在波形频率改变而转速不改变由于在调用显示程序时候在调用之后在显示这里死循环,不能适时进行计算了。
【设计总结】
通过各方面努力,本次设计任务完成,系统各部分功能均已实现,单片机能够测量出电机的转速并能显示在LED数码管上,达到了比较理想的状态。
整个设计过程的确不容易,现在回想,总结来说还是蛮充实的,毕竟在整个设计的过程中,自己又对已经学过的专业课知识梳理了一下,而且对于实际的应用和需求也参考了各个方面的资料,所以整个设计过程下来,自己整体的专业知识水平又进行了一次升华。
本设计方案基本实现了电动车速度即时显示,并可通过控制两个按键显示速度或里程,但也存在两个不足之处:
一是LED数码管只有两个,当速度超过99km/h时(当然电动车速度一般不超过该值),不能显示出来;二是没有对小数位进行控制,系统默认对速度里程值取整处理,尽管算法很准确但是由于系统本身设置的原因测量值只能精确到个位。
随着科技的不断发展,电子式车速表也在不断的完善中,随着传感器的广泛应用,电子式车速表的功能日益多样化,需要需要的不断学习,与时俱进。
【参考文献】
[1]马汝星.廖仁秀.单片机应用系统设计与制作2010.01
[2]廖仁秀.陈桂兰.基于PROTEUS电动滑板车控制器的设计
[3]张有德.单片微机原理、应用与实验1997.8
[4]XX文库
【附录】
电路原理图:
程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineLEFTP1_3
#defineZHIXINGP1_4
#defineRIGHTP1_5
sbitLEFTD=P3^0;
sbitK1=P1^6;
sbitRIGHTD=P3^1;
sbitSPEAK=P3^2;
sbitCS=P1^0;
sbitCLK=P1^1;
sbitDIO=P1^2;
voidzhuangxiang();
ucharcount,out,count1,count3,gao,di,shudu;
longcount2;
unsignedintAD_val;
voidtime_0();
charn11;
voidbaojin();
voiddisplay(uchark);
ucharSM[]={0XC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
voiddelay1ms()
{
unsignedchari,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
voiddelaynms(unsignedcharn)
{
unsignedchari;
for(i=0;idelay1ms();
}
unsignedcharA_D0()
{
unsignedchari,dat;
CS=1;
DIO=1;
CLK=0;
CS=0;
DIO=1;
CLK=1;
CLK=0;
DIO=1;
CLK=1;
CLK=0;
DIO=0;
CLK=1;
CLK=0;
DIO=0;
CLK=1;
DIO=1;
CLK=0;
for(i=0;i<8;i++)
{
CLK=1;
CLK=0;
dat<<=1;
dat|=(unsignedchar)DIO;
}
CS=1;
returndat;
}
voidmain()
{
time_0();
P3_2=1;
P3_6=0;
while(!
K1)
{
zhuangxiang();
AD_val=A_D0();
count2=(gao*256+di+count3*65536)*4;
shudu=(1200000/count2)*3.6;
display(shudu);
if(AD_val>73&&P1_7==0&&P2_4==1)
{TR0=1;
AD_val=AD_val-65;
out=AD_val/8;
}
else
{P3_6=0;
TR0=0;
}
if(n11>=40)
{baojin();
}
if(P1_7==1)
{P2_2=0;
}
if(P2_4==0)
{P2_3=0;
}
}
}
voidtime_0()
{TMOD=0X12;
TH0=TL0=206;
gao=0;
di=0;
TH1=0;
TL1=0;
EA=1;
ET0=1;
ET1=1;
EX1=1;
TR1=1;
IT1=1;
}
voidtime0()interrupt1
{count++;
if(count==out)
{P3_6=0;
}
if(count==20)
{P3_6=1;
count=0;
}
}
voidzhuangxiang()
{if(LEFT==0)
{LEFTD=~LEFTD;
delaynms
(2);
RIGHTD=1;
baojin();
}
if(ZHIXING==0)
{LEFTD=1;
RIGHTD=1;
}
if(RIGHT==0)
{RIGHTD=~RIGHTD;
delaynms
(2);
LEFTD=1;
baojin();
}
}
voiddisplay(uchark)
{charn1,n2;
n1=k/10;n2=k%10;
n11=n1*10+n2;
P2_1=0;
P2_0=1;
P0=SM[n1];
delaynms
(2);
P2_0=0;
P2_1=1;
P0=SM[n2];
;;
}
voidt1me11()interrupt3
{
count1++;
}
voidtime1()interrupt2
{count3=count1;
count1=0;
gao=TH1;
di=TH1;
TH1=0;
TL0=0;
}
voidbaojin()
{chari;
for(i=0;i<5;i++)
{SPEAK=0;
delaynms(3);
SPEAK=1;
}
}