基于PCF8951单片机设计.docx
《基于PCF8951单片机设计.docx》由会员分享,可在线阅读,更多相关《基于PCF8951单片机设计.docx(31页珍藏版)》请在冰豆网上搜索。
基于PCF8951单片机设计
1引言
现在工业生产中,电机是主要的驱动设备,目前在直流电机拖动系统中已大量采用晶闸管装置控制电机的KZ」D拖动系统,取代了笨重的发电机-电动机的
F—D系统,又伴随着电子技术的高度发展,促进使直流电机调速逐步从模拟化
向数字化转变,特别是单片机技术的应用,使直流电机调速又进入了一个新的阶段,智能化,高可靠性已成为它的发展趋势。
直电机调速基本原理是比较简单的
(相对于交流电机),只要改变电机的电压就可以改变转速了。
1.1设计任务与要求
设计一个基于PCF8591的直流电动机转速控制电路,在相应的软件控制下可以完成要求的功能,即使用具有IIC接口的PCF8591模数与数模转换芯片,使用
1602LCD液晶显示屏显示PCF8591模数与数模转换芯片上的4个通道的模数转换
结果,同时,0通道的转换结果再通过PCF8591转换为模拟信号,经过放大后调
控直流电动机的转速。
2设计过程
2.1设计过程与步骤2.1.1芯片介绍1)PCF8591
PCF8591是一种具有I2C总线接口的8位A/DD/A转换芯片,在与CPU
的信息传输过程中仅靠时钟线SCL和数据线SDA就可以实现。
I2C总线是
Philips(飞利浦)公司推出的串行总线,它与传统的通信方式相比具有读写方便,结构简单,可维护性好,易实现系统扩展,易实现模块化标准化设计,可靠性咼等优点。
PCF8591为单一电源供电(2.56V)典型值为5V,CMOS工艺PCF8591有
4路8位A/D输入,属逐次比较型,内含采样保持电路;1路8位D/A输
出,内含有DAC的数据寄存器A/DD/A的最大转换速率约为11kHz,但是转
换的基准电源需由外部提供PCF8591的引脚功能如图2.1所
引脚序号
引脚^^称
功能描述
17
AI.\t^AL\3
模拟信号输入端()^5V
5~7
器件硬件地址输入端*由硬件屯路决定
16.K
电源、地
9J0
SDAsSCL
1兀总线的数据线、时钟线
11
OSC
外部时钟输入端‘内部时钟输出端
12
K\r
时钟选择使用内部时钟:
K\T=],使用外部时钟
13
模拟信号地
15
AOLl'
D小转换输出端JZ比d
256曲
基准电源端\)・収值大小影响1)/A转换输出屯压。
14
'HFr
当取值等于为\J)J)时•输岀屯压为0-5叽
图2.1PCF8591引脚功能
在PCF8591内部的可编程功能控制字有两个,一个为地址选择字,另一个
为转换控制字PCF8591采用典型的I2C总线接口的器件寻址方法,即总线地址
(飞利浦)公司规定A/D器件高四
由器件地址引脚地址和方向位组成Philips
位地址为1001,低三位地址为引脚地址A0A1A2由硬件电路决定,地址选择字
格式具体描述如表2所示因此I2C系统中最多可接23=8个具有总线接口的
A/D器件地址的最后一位为方向位R/W,当主控器对A/D器件进行读操作时为1,进行写操作时为0总线。
操作时,由器件地址引脚地址和方向位组成的从地址为主控器发送的第一字节。
1)7
1)5
1)4lb
1)2
10
0
1A2
Al
AO
图2.2地址选择字格式描述
D0:
读写控制位,对转换器件进行读操作时为1,进行写操作时为0。
D1,D2,D3:
引脚硬件地址设置位,由硬件电路设定该PCF8591的物理地址。
D7,D6,D5,D4:
器件地址位固定为1001.PCF8591的转换控制字存放在控制寄存器中,用于实现
器件的各种功能总线操作时为主控器发送的第二字节转换控制字的格式功能具体描述如图2.3所示
1)7
1)6
1)5
1)4
Ih
1)2
1):
1)0
图2.3转换控制字格式描述
D0,D1:
通道选择位。
00:
通道0;01:
通道1;10:
通道2;11:
通道3。
D2:
自动增量允许位,为1时,每对一个通道转换后自动切换到下一通道进行
转换,为0时不自动进行通道转换,可通过软件修改进行通道转换D3:
特征位,
固定位0。
D4,D5:
模拟量输入方式选择位。
00:
输入方式0,四路单端输入;
01:
输入方式1,三路差分输入;10:
输入方式2,二路单端输入,一路差分输入;11:
输入方式3,两路差分输入。
D6:
模拟输出允许位,A/D转换时设置为(地址选择字D0位此时设置为1),D/A转换时设置为1(地址选择字位此时设置为)。
D7:
特征位,固定为0。
PCF8591的A/D转换为逐次比较型,在
A/D转换周期中借用DAC及高增益比较器对PCF8591进行写读操作后便立即启
动A/D转换,并读出A/D转换结果在每个应答信号的后沿触发转换周期,采样模拟电压并读出前一次转换后的结果。
A/D转换中,一旦A/D采样周期被触发,所选择通道的采样电压便保存在采样,保持电路中,并转换成8位二进制码(单端输入)或二进制补码(差分输入)存放在ADC数据寄存器中等待器件读出。
如
果控制字节中自动增量选择位置1,则一次A/D转换完毕后自动选择下一通
道。
读周期中读出的第一个字节为前一个周期的转换结果。
上电复位后读出的第一字节为80耳PCF8591的A/D转换亦使用的是I2C总线的读方式操作完成
的。
其数据操作格式如图2.4所示。
SSLAWAdulaO
A(blaIA
riata2
A]…
dala11
A
P
图2.4A/D转换数据操作格式
其中data0~datan为A/D的转换结果,分别对应于前一个数据读取期间所采样的模拟电压。
A/D转换结束后,先发送一个非应答信号位A再发送结束信号位P。
灰底位由主机发出,白底位是由PCF8591产生。
上电复位后控制字节状态为00H,在A/D转换时须设置控制字,即须在读操作之前进行控制字节的写入操
作。
逻辑操作波形时序图如图2.5所示。
岂11勺1*
MT肋
A1DaTU
i1CATE
图2.5A/D转换逻辑操作波形时序图
2)LCD1602
LCD1602液晶显示容量:
16X2个字符,芯片工作电压:
4.5—5.5V,工作电
流:
2.0mA(5.0V),模块最佳工作电压:
5.0V,字符尺寸:
2.95X4.35(WXH)mm
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为咼电平、0为低电平)指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00Ho指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的
开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,咼电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM
地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此
时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指
令11:
读数据。
2.1.2设计思路
本次设计要求设计利用带有IIC接口的PCF8592莫数与数模转换芯片,实现对直流电机转速的控制。
利用PCF8591芯片通道0采集到的模拟量,再次由AD
转换成模拟量输出去控制直流电机的转速,由于D/A输出的的电流普遍偏小,而
此不能直接驱动电机,要加上放大电路,而选用的直流电机是12V的DA的最大
输出电压是5V,因此要先进行电压放大,采用LM358运放,将电压放大两倍,
这样最高输出电压是10V,由于运放的驱动能力还是很弱,因此要进行电流放大,
这边采用三极管进行电压放大,以射极跟随器的方式进行放大。
2.1.3电路设计
由设计思路在Ptotues上面画出总的电路图如下:
C3
Til
ELZ
H3T
宀Cl
呼口hF
pt.
IJC
->£
jnwMi
LCM
I申型
:
-:
A'-:
士工|_■:
PDOUDfD-PWlrasNi2
PDCUILPDSAIK旳阿ePDJjWI
PZOH
P?
.⑷
p?
EAia
P?
.1*I5
rqMKD
p-a.yncD
町漏祁
p:
jrwri
HO/TD
P?
如
*3u&u^ff
■3T用D
Kf
磋n潮
Eh
U3
ID
«w■■■■
JL:
..:
;RP1-
9C-L
AfH
Arc
初
冲旳
Al
卍
jbw
KT
VHEF
CJK
KJUD
j2
m
再叱p
■nZ(15-
—-IIPRA^
R6.
ILK十EMTl
R5
iv
+w
-車
ev4
图2.6总的电路图
2)放大电路及直流电机驱动电路如
图2.7
如图所示PCF8591的D/A输出经过电阻R6接到运放LM358的同向输入端,
设DA的输出电压为VDALM358运放的输出电压为VDA*(1+R5/R4)=2*VDA所
以LM358对PCF8591的D/A输出电压放大两倍,LM358输出的电压经过三极管
S8050组成的射极跟随器后的输出到直流电机的电压为2*VDA-Vbe(三极管基极
和发射极的导通电压)。
这样就组成了对D/A输出的电压,进行电压放大和电流
放大,最后去驱动直流电机的驱动电路。
3)PCF8591应用电路如下图2.8
1■••+£¥〒H
Re
iDk
[匸
R2nR3
IQk
U2
10
~g
Ji
11
3CU
AJNQ
3DA
AJN1
AJN2
M
內N3
Al
航
Aour
E灯
VREF
esc
AGND
PCF0591
A
£
14
13
IK,—
•-
Ik—•-
Ik--
•.
订匸
图2.8PCF8591应用电路
PCF8591应用电路如上图所示,IIC接口SCLSDA各接一个10K的上拉电阻。
AO、A1、A2接地,这样对PCF8591写话地址为0x90,对PCF8591写的话地址为0x90。
PCF8591的VREF参考电压引脚接+5V,这样A/D的最大输入电压是5V,D/A
的最大输出电压也是5V,PCF8591的四个A/D道道接四个可调电阻,用来改变输
入电压的大小。
4)单片机最小系统电路
r5V
C2
HH
1nF_
.4
U1
G31CRySTAL
[「]:
%
AinF
Cl
luF.
29
31
XTAL1
XTAL2
RST
PSEN
R1
10k
屮-TEI
Q12345G7---J—H—J—J—J—J—J—J—PPPPPPPP
O1_JA34S67
PZW用P21倔P2.2/A10P2.3/A11P2.仙2P2.5/A13P2.6/A14P2.7/A15
P3.Q/RXDP3.i™P3.24NTO
丽T
P3J/Ttl
P3.S/ri
P3.梅
33
21
26
2B
图2.9单片机最小系统电路
单片机最小系统电路主要包含两个部分,一个是由电阻电容组成的上电复位
电路,让单片机在上电时先复位一下,再继续工作,另外一部分是由无源晶振和
瓷片电容组成的时钟电路,为单片机提供工作时的必要的时钟信号。
3测试
实验的结果测试如图所示在AO电压为5V时,电机转速为235
LUJ1
AO5.0Mni3.Wfl:
l.2yft34,2v
2E5SS3EaB
KjXuh^
P2.1(15P2.M1DPJ.甜M
FT-SrtliaPdiStM电PJFW5
+12*•
...
'J
卜:
:
:
:
:
丿血■
."xvn.
AI
PDOA^kDOPfJUOkpl
PfKAUM旳珈
P3[W™Pa.lOJE.
PlJfTDpijwnpjyraP5EJTIPt卽亜
P3TJITD-
*
■S
只3..
4He■-
.■IJ2--
Ih-
辭:
1k,
图3・1在A0电压为
5V时电机的转速
如图3.2在A0通道电压为3V时电机的转速为205
rCDT
LMDieC
■•二T*:
・i;•
■+12V
021.2uA34.2u
3.
•53060
盟建岀b?
5aLiM州T□8u>5ZeLUoaooooao
JJ3A
咖wmPD.1fAC1PO.lffltJPDJ网3呻4『皿4PDjsrrtoaPDBfACEPC.皿?
P2jQfAB
P2.irAgP32M.-H1旳咖1PHA1?
PJglSP3盼14P?
™i5
P30RW?
PS.IJTffiPjjirjBQP33ywi1
PJ4/T0
P35ni
P3je陛即丽
■Jg
■■35
■jq
■33
■32
■K
■7j
■21
d.
■2i
R
R3
IE
Ch
巧V
R5
ia-|:
T&:
'T-
RESP^JCM-.^.■iL'b..
A...
-RP1
Lii'
吊LfJAC'cri
y=ejD95ie
co
AV=4.92X!
S
:
U2
i6・
9・
SCL&ND3&AAJMl
AJN2
AD&N3
D?
-
■+5V
图3.2在AO电压为3V时电机的转速
如图3.3在A0通道电压为1.3V时,电机的转速为80.2
■+1BV-
fll
fl21.2yfl3
IE
•SEKm
.-TE-
fhnF口-
{hnrTf-
XilnL
CArtT<
Cl
iur-
T/h.1M.1
RiT
ruj_Lwi_uPD-IjADIm.aiADS刊沪TO呛屯DgW.SWK刊B*WW.JjmlM
P2AM
P2.侶
Rfa/Aio
PSf"
PJJjWI
ME臣
Rf4hA1£P2HM3
FEMMC
P1D
Pl1
P12
PI3
P2
pgsTD
Pi5
円.£iTi
pie
P3_e丽
PlJ
T帚
fl"
U1
.盂至韭走-
?
■■-R
a
0
P
■Hl/
.PJ.
+W-
■和
H5
■in
LUMSti
T1■■r
«1-■-
PfaeAjCKfl.
A...-RP1-
-U3A.
rm.
JJ1
21Z.
312.
ZH:
空
:
•■J77U:
•.\R打阳.lOcI1W
-L2-
Q・
SCL
*140
fibA
AIM-I
Ml
AIHZAIHl
Al
2
*0"
1k*匸
蹲.
1fcrJ
1k
[——'H
儿T
«
"■'--L
■tea
图3.3在A0通道电压为
1.3V时电机的转速
总结
采用PCF8591对A0-A3的四个通道模拟量的采样,并在LCD1602液晶上面显
示,
对应的值,并将A0通道采集到到值输出给D/A去控制直流电机的转速,由于D/A的驱动能力很弱,因此加上了由LM358组成的电压放大电路,和由S8050
三极管组成的电流放大电路再去驱动直流电机,通过在Protues仿真验证此方案
是合理可行的。
附录A:
源程序
#includevreg52.h>
//PCF8591相关定义
sbitSCL=P^O;
//时钟脉冲
sbitSDA=P2A1;
//双向输入输出数据端
#defineSCL_SETSCL=1
#defineSCL_CLRSCL=0
#defineSDA_SETSDA=1
#defineSDA_CLRSDA=0
#defineAddWr0x90
//写数据地址
#defineAddRd0x91
//读数据地址
#defineadCon0x40
//AD控制字节
//LCD1602相关定义
sbitRS=P2A6;
sbitRW=P2A5;
sbitE=P2八7;
#definesetRSRS=1
#defineclrRSRS=0
#definesetRWRW=1
#defineclrRWRW=0
#definesetEE=1
#defineclrEE=0
unsignedinttime=0;
unsignedcharADFlag=0;
unsignedcharstr[8]="Ain.mv";
//延时1US
voiddelay(unsignedintent)
while(--cnt);
//延时IMS
voiddelayms(unsignedinttime)
unsignedinti;
for(i=0;i
|