单片机电机调速1602显示word版本Word文档格式.docx
《单片机电机调速1602显示word版本Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机电机调速1602显示word版本Word文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
用闭环控制原理快速调节电机转速,从而实现电机的正转,反转,停止,加速,减速,并通过LCD显示屏显示电机的实际转速,设定转速。
1.2设计思路
首先将单片机作为控制中枢,从按钮源接收到电机各种动作的信号,接着由单片机调制PWM信号发出指令,经过H桥电机驱动电路,控制电机执行相应的动作,之后采用光电元件组成的测速电路检测出电机转速,输送到单片机进行误差计算,进而再调制PWM的信号控制电机加速减速等动作,如此反复,直到电机达到设定的电机转速。
第二章硬件系统
2.1稳压电路
电子产品中,常见的三端稳压集成电路有正电压输出的78×
×
系列和负电压输出的79×
系列。
顾名思义,三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。
它的样子像是普通的三极管,TO-220的标准封装,也有9013样子的TO-92封装。
用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。
该系列集成稳压IC型号中的78或79后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V,7909表示输出电压为负9V。
因为使用方便,故经常采用。
图1稳压电路
2.2AT89C51简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
外形及引脚排列如图所示
图2AT89C51
管脚说明:
(1)VCC:
供电电压。
(2)GND:
接地。
(3)P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
(4)P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
(5)P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
(6)P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下所示:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
(7)RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
(8)ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
(9)/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
(10)/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
(11)XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
(12)XTAL2:
来自反向振荡器的输出。
2.3晶振,复位电路的设计
晶振电路
单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。
只要买来晶振,电容,连上就可以了,其电路图如图4所示。
XTAL1和XTAL2分别为反向放大器的输入和输出,该反向放大器可以配置为片内振荡器[2]。
图3晶振电路
复位电路
在上电或复位过程中,控制CPU的复位状态:
这段时间内让CPU保持复位状态,而不是一上电或刚复位完毕就工作,防止CPU发出错误的指令、执行错误操作,也可以提高电磁兼容性能。
无论用户使用哪种类型的单片机,总要涉及到单片机复位电路的设计。
而单片机复位电路设计的好坏,直接影响到整个系统工作的可靠性。
许多用户在设计完单片机系统,并在实验室调试成功后,在现场却出现了“死机”、“程序走飞”等现象[3],这主要是单片机的复位电路设计不可靠引起的。
电路如图5所示。
图4复位电路
2.3电机驱动电路
L298是SGS的产品,比较常见的是MuLtiwatt封装的L298N,内部同样包含4道逻辑驱动电路。
可以方便的驱动两个直流电机,或一个两相步进电机。
L298可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压,可以直接用单片机的IO口来提供信号,而且电路简单,实用方便。
L298N可接受标准的TTL逻辑电平信号VSS,VSS可接4.5~7V电压。
4脚VS接电源电压,输出电流为2.5A,可驱动电感性负载。
1脚和15脚下管的发射极分别单独引出以便接入电源采样电阻,形成电流传感信号。
L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机。
本实验我们选用驱动一台电动机。
5,7,10,12脚接输入控制电平,控制电机正反转,ENA,ENB接控制使能端,控制电机的停转。
L298芯片管脚说明:
(1)SENSA:
电流监测端,H桥的电流反馈脚,不用时可直接接地。
(2)OUT1:
输出端,与M1对应。
(3)OUT2:
输出端,与M2对应。
(4)VS:
电源,用来给电动机供电。
(5)IN1:
输入端。
(6)ENA:
使能端,和M1、M2配合使用。
(7)IN2:
(8)GND:
(9)VCC:
电源,用来给芯片供电。
(10)IN3:
输入端
(11)ENB:
使能端,和M3、M4配合使用。
(12)IN2:
(13)OUT3:
输出端,与M3对应。
(14)OUT4:
输出端,与M4对应。
(15)SENSB:
2.5电机测速电路
本设计采用的是红外传感器(由红外线发射管、红外线接收管构成的红外计数电路)
红外线发射管
简介:
红外线发射管也称红外线发射二极管,属于二极管类。
它是可以将电能直接转换成近红外光(不可见光)并能辐射出去的发光器件,主要应用于各种光电开关及遥控发射电路中。
红外线发射管的结构、原理与普通发光二极管相近,只是使用的半导体材料不同。
红外发光二极管通常使用砷化镓(GaAs)、砷铝化镓(GaAlAs)等材料,采用全透明或浅蓝色、黑色的树脂封装。
产品参数:
发射距离、发射角度(15度、30度、45度、60度、90度、120度、180度)、发射的光强度、波长。
以上决定红外线发射管产品的主要性能及使用范围。
红外线接收管
特征与原理:
红外线接收管是将红外线光信号变成电信号的半导体器件,它的核心部件是一个特殊材料的PN结,和普通二极管相比,在结构上采取了大的改变,红外线接收管为了更多更大面积的接受入射光线,PN结面积尽量做的比较大,电极面积尽量减小,而且PN结的结深很浅,一般小于1微米。
红外线接收二极管是在反向电压作用之下工作的。
没有光照时,反向电流很小(一般小于0.1微安),称为暗电流。
当有红外线光照时,携带能量的红外线光子进入PN结后,把能量传给共价键上的束缚电子,使部分电子挣脱共价键,从而产生电子---空穴对(简称:
光生载流子)。
它们在反向电压作用下参加漂移运动,使反向电流明显变大,光的强度越大,反向电流也越大。
这种特性称为“光电导”。
红外线接收二极管在一般照度的光线照射下,所产生的电流叫光电流。
如果在外电路上接上负载,负载上就获得了电信号,而且这个电信号随着光的变化而相应变化。
分类:
红外线接收管有两种,一种是光电二极管,另一种是光电三极管。
光电二极管就是将光信号转化为电信号,光电三极管在将光信号转化为电信号的同时,也把电流放大了。
因此,光电三极管也分为两种,分别别是NPN型和PNP型。
作用:
红外接收管的作用是进行光电转换,在光控、红外线遥控、光探测、光纤通信、光电耦合等方面有广泛的应用。
如何选择红外线接收管:
红外线最重要的参数就是光电信号的放大倍率,一般的有1000-13001300-18001800-2500,这些对灵敏度有决定作用。
红外计数电路
图6计数测速电路
红外计数电路主要由红外发射和接收电路组成.红外发射和接收电路:
在电动机上安装一对红外发射和接收管,当电动机转动时,对红外光反射、散射和折射,穿过红外光的光强瞬间减少,红外接收管导通程度也在瞬间减小,因而产生一个脉冲信号;
信号放大比较电路:
电容拾取脉冲信号后由运放LM324进行放大,放大倍数为10倍,再将放大的信号由运放LM324比较后输出标准的低电平脉冲信号(undershoot),其中C1=0.01μF,R1=11KΩ,R2=500Ω,R3=10KΩ,R4=100KΩ,R5=100KΩ,R6=5KΩ,R7=100KΩ,R6和R7起着抗干扰作用[1].然后将获得的脉冲信号送到单片机的计数器引脚进行计数,这样就可以达到计数的目的.
图7转速检测示意
2.6LCD显示
液晶显示原理
液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。
液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。
根据要求选用1602LCD:
图81602LCD尺寸图
1602LCD主要技术参数:
显示容量:
16×
2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×
4.35(W×
H)mm
图91602内部结构
图10接口图
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号等,每个字符都有一个固定的代码,比如大写英文字母A的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。
因为1602识别的是ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如‘A’。
1602采用标准的16脚接口,其中
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
第三章软件系统
#include<
reg51.h>
#include<
math.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitadd=P0^0;
sbitdec=P0^1;
sbiten1=P3^0;
/*L298的EnableA*/
sbits1=P3^1;
/*L298的Input1*/
sbits2=P3^2;
/*L298的Input2*/
uchart=0;
/*中断计数器*/
ucharm1=0;
/*电机速度值*/
uchartmp1;
/*电机当前速度值*/
sbitE=P3^7;
sbitRW=P3^6;
sbitRS=P3^5;
sbittest=P3^4;
inttime=0;
intnum_medium=0;
intnum_display=0;
intcount_speed=0;
ucharwword[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
/*电机控制函数index-电机端口号;
speed-电机速度*/
voidmotor(ucharindex,charspeed)
{
if(speed>
=0&
&
speed<
=100)
if(index==1)
m1=abs(speed);
0)
s1=1;
s2=0;
}
voiddelay1(uintj)/*简易延时函数*/
for(j;
j>
0;
j--);
//延时t毫秒
voiddelay(uchart)
uinti;
while(t)
for(i=0;
i<
125;
i++);
t--;
voidwc51r(ucharj)
RS=0;
RW=0;
P1=j;
E=1;
E=0;
delay(3);
//写数据函数LCD
voidwc51ddr(ucharj)
RS=1;
delay
(2);
//初始化函数LCD
voidinit()
{
wc51r(0x01);
//清屏
wc51r(0x38);
//使用8位数据,显示两行,使用5*7的字型
wc51r(0x0c);
//显示器件,光标开,字符不闪烁
wc51r(0x06);
//字符不动,光标自动右移一格
}
/*****************************************************************************/
/***T1中断服务程序**************单位时间(S)方波的个数**********************/
voidtime1_int(void)interrupt3
count_speed++;
if(count_speed==20)
{count_speed=0;
num_display=num_medium;
num_medium=0;
}
/***************************************速度显示的数据处理********************/
voiddatamade()
uintdataMM,NN;
wc51r(0xc2);
wc51ddr('
S'
);
p'
e'
d'
wc51ddr(0x3a);
NN=num_display%100;
MM=num_display/100;
wc51ddr(wword[MM]);
MM=NN/10;
NN=NN%10;
wc51ddr(wword[NN]);
/************************主函数**********************************************/
voidmain()
unsignedchari;
P2=0x00;
ET0=1;
ET1=1;
TMOD=0x12;
TH0=0x9B;
TL0=0x9B;
TH1=0x3c;
TL1=0xb0;
EA=1;
TR0=1;
TR1=1;
init();
//液晶显示初始化程序
while
(1)
while(add==0&
=100)
motor(1,i);
i++;
delay1(3000);
while(dec==0&
i>
=0)
i--;
wc51r(0x84);
M'
O'
T'
R'
if(test==0)
num_medium++;
datamade();
voidtimer0()interrupt1/*T0中断服务程序*/
if(t==0)/*1个PWM周期完成后才会接受新数值*/
tmp1=m1;
if(t<
tmp1)en1=1;
elseen1=0;
/*产生电机1的PWM信号*/
t++;
if(t>
=100)t=0;
/*1个PWM信号由100次中断产生*/
3.2软件流程图
图11软件流程图
第四章系统调试
4.1软件调试
4.1.1整体图
图1