STC12C5A60S2内部PWM应用.docx
- 文档编号:12897109
- 上传时间:2023-04-22
- 格式:DOCX
- 页数:26
- 大小:23.37KB
STC12C5A60S2内部PWM应用.docx
《STC12C5A60S2内部PWM应用.docx》由会员分享,可在线阅读,更多相关《STC12C5A60S2内部PWM应用.docx(26页珍藏版)》请在冰豆网上搜索。
STC12C5A60S2内部PWM应用
【PWM】
CLKOUT2/ADC0/P1.0匚Z
ADCIZPIJCZ
RXD2ZECI7ADC2/PL2匚TxD2/CPP0/ADC3/P13USS/CTP1/ADC4ZPL41
MOSI/ADC5/P1JCZMISO/ADC6/PL61ZZSCLK/AD€7/Pk7CP4.7/RSTUINT/KxD/P3.0匚TxD/P3J1—INT0ZP3.2匚DTrI/P33r~CLKQUT0/iNTZTQ/P3.4匚CLKOUTl丽也g,U亟PM6匚ZRD/P3.7UXTAL2CZXTALlCZ
Gild
019-34567890
T±TJJ0011*111i111x111111T±11
)匸DIP纟#tc12c5a60s24
O9S7654321O987654321
43333333333r--!
2C--1222222
吕吕吕弓nn吕nn吕吕nn
EX_LVD/P4.6/RST2
ALEZP4.5
NA/P4.4
P25/A15
P2.6/A14
P2.5/A13
P2.4/A12
P23/A11
P2.2/A10
P2.1/A9
P2.0/A8
10.8利用PWM实现D/A功能的典型应用线路|£
K.3
P2.3
RiDP3.0
TtDP3I
PO』
3lTAL2
XIALI
1NTOT3.2
PQI
EJTlPjJ
CLKDUTWECLT&P3.4
CLKOUTl/PWMhTlEd
匸二二匸二二匚二二匚二匚匚匸二匚
01234563345€7391111111
3109376.3*3^109$LJ
333『」222^^22222I11
VDD
P21
P2.0
P1.7/ADC7
P1^ADO6
PIS/ADC5
POJ
P1.4/ADC4
PlJ/ADCi
P02
P12/ADC2IVD
Pl.l/ADCl
D/A
Pl.O/ADCO
lOK
LOK
第10章STC12C5A60S2系列单片机PCA/PWM应用
STC12C5A60S2系列单片机集成了两路可编程计数器阵列(PCA)模块,可用于软件定时器、外部脉冲的捕捉、高速输出以及脉宽调制(呗)输出.
LPCA工作模式寄存器CMOD
PCAT作模式寄存器的格式如下:
CMOD;PCAT作模式奇存器
SFRname
Address
bit
B7
B6
B5
B4
B3
B2
Bl
BO
CCON
D9H
name
CIDL
•
•
•
CPS2
CPSl
CPSO
ECF
CIDL:
空闲模式下是否停止PCA计数的控制位•
十CIDL-0时,空闲模式下PCA计数S继续工作:
^CIDL-1时・空ffl模式下PCA计数器停止工作・
CPS2.CPShCPSO:
PCA计数脉冲源选择控制位・PCA计数脉冲选择如下表所示•
CPS2
CPSl
CPSO
选择PCMPWM时钟源输入
0
0
0
0.系统时钟.SYSCM12
0
0
1
b系统时钟,SYSclk/2
0
I
0
2・定时器0的溢出脉冲•由于定时器0可以工作在1T模式.所以可以达到计一个时钟就溢出,从帀达到最高频率CPU丁作时钟SYSclk.通过改变定时So的溢出率.可以实现可调频率的PWM输出
0
I
1
3,ECi?
1.2(或P41)脚输入的外部时沖(最大速率=SYSdk/2)
1
0
0
4,系统时钟,SYSclk
1
0
1
5.系统时钟/4,SYSclk/4
1
1
0
6.系统时仲/6,SYSclk/6
1
1
1
7.系统时钟/8・SYScllc-8
例如.CPS2/CPS1/CPS0=1/0/0时,PCA/PWM的时钟源是SYSdk.不用定时器0,PWM的频率为SYSdV256
如果要用系统时钟/3來作为PCA的时钟源,应让TO工作在IT模式,计数3个脉冲即产生溢出・如果此时使用内部RC作为系统时钟(室温情况下,5V单片机为HMHz~15.5MHz).可以输出14K~19K頻率的PWM・用TO的溢出可对系统时怦进行1-256级分频.
ECF:
PCA计数溢出中断使能位•
当ECF-0时,禁止寄存器CCON中CF位的中断;
出ECF-1时,允许寄存器CCON中CF位的中断・
2.PCA控制寄存器CCON
PCA控制寄存器的格式如下:
CCON:
PCA控制控制寄存器
SFRname
Address
bit
B7
B6
B5
B4
B3
B2
Bl
BO
CCON
D8H
name
CF
CR
■
-
♦
■
CCFl
CCFO
CF:
PCA计数器阵列溢出标志位。
当PCA计数器溢出时,CF由硬件置位。
如果CMOD寄存器的ECF位置位,则CF标志可用来产生中断。
CF位可通过硬件或软件賈位.但只可通过软件淸零。
CR:
PCA计数器阵列运行控制位。
该位通过软件置位,用来起动PCA计数器阵列计数。
该位通过软件清零,用来关闭PCA计数器。
CCF1:
PCA模块1中断标志。
当出现匹配或捕获时该位由硬件賈位。
该位必须通过软件清零。
CCF0:
PCA模块0中断标志。
当出现匹配或捕获时该位由硬件置位。
该位必须通过软件清零。
SFRoamc
Address
bit
B7
B6
B5
B4
B3
B2
Bl
BO
CCAPMO
DAH
name
-
ECOMO
CAPPO
CAPNO
MATO
TOGO
PWMO
ECCFO
B7:
保留为将来之用.
ECOMO:
3・PCA比较/捕获番存SCCAPM0和CCAPM1
PCA模块0的比较/捕获寄存器的格式如下:
CCAPM0:
PCA模块0的比较/捕获寄存器
CAPPO:
CAPNO:
MATO;
TOGO:
PWMO:
ECCFO:
允许比较器功能控制位.
当ECOMO=1时,允许比较畧功能・
正捕获控制位.
当CAPPO=1时,允许上升沿捕获。
负捕获控制位•
当CAPN0=1时,允许下降沿捕获.
匹配拽制位.
当MATO=1时.PCA计数值与模块的比较/捕获寄存S的值的匹配将置位CCON寄存S的中断标志位CCFO.
H转控制位・
当TOGO=1时,工作在PCA高速输出模式-PCA计数器的值与模块的比较/捕获寄存»的值的匹配将便CEXOWtt转-
(CEXO/PCAO.PWMO/P13或CEX0/PCA0/PWM0/P42)
脉宽调节模式•
当PWM0=I时,允许CEX0W用作脉宽调卄输出•
(CEXO/?
CAO;TWMO/P13或CEX0/PCA0/PWM0/P4.2)
使能CCFO中断•使能寄存器CCON的比较/捕获标志CCFO,用来产生中斷-
SFRMme
Address
bit
B7
B6
B5
B4
B3
B2
Bl
BO
CCAPMl
DBH
name
ECOMI
CAPPl
CAPNI
MATl
TOGl
PWMl
1ECCFl
PCA模块1的比较/捕获寄存器的格式如下:
CCAPM1:
PCA模块1的比较/捕获寄存器
B7:
保留为将来之用・
ECOMI:
允许比较器功能控制位•
当ECOM1=1时.允许比较器功能.
正捕获控制位•
当CAPP1=1时,允许上升沿捕获・
CAPPl:
CAPNI:
MATl:
TOGl:
PWMl:
ECCFl:
负捕获控制位•
当CAPN1=1时,允许下降沿捕获-
匹配控制位•
当MAT1=1时.PCA计数值与模块的比较/捕获寄存S的值的匹配将置位CCON寄存S的中断标志位CCFl.
«转控制位•
当TOG1=1时,工作在PCA高速输出模式,PCA计数S的值与模块的比较/捕获寄存S的值的匹配将便CEX1脚翻转•
(CEXL-TCAl.PUTvirP1.4或CEXIPCAIPWM1/P4.3)
脉宽调节模式•
^PWMl=m.允许CEX1腾用作脉宽调节输出・
(CEX1/PCA1.PWM1.P1.4或CEX1/PCA1,FWM1/P4.3)
使能CCF1中断•便能寄存器CCON的比较/捕获标志ccn.用来产生中断.
PCA模块工作模式设定(CCAPMn寄存器,n=OJ)
ECOMn
CAPPn
CAPNn
MATn
TOGn
PWMn
ECCFn
模块功能
0
0
0
0
0
0
0
无此操作
1
0
0
0
0
1
0
8位PWM.无中斬
1
1
0
0
0
1
1
8位PWM输出,由低变高可产牛•中断
1
0
1
0
0
1
1
8位PWM输出.由高变低可产生中断
1
1
1
0
0
1
1
8位PWM输出,由低变高或者由高变低均可产生中断
X
1
0
0
0
0
X
】6位捕获植式.由CEXnPCAn的1JI沿触发
X
0
1
0
0
0
X
16位捕获檯式-itlCEXnPCAji的卜降沿触发
X
1
1
0
0
0
X
16位捕获模式山CEXnPCAu的跳变触发
r1
0
0
1
0
0
X
lekkh定时也1
11
0
0
1
1
0
X
16位高速输出1
6.PCA模块PWM寄存器PCA_PWM0和PCA.PWMl
PCA模块0的PWM寄存器的格式如下:
PCA?
WM0:
PCA模块0的PWM寄存器
SFRuame
Address
bit
B7
B6
B5
B4
B3
B2
Bl
BO
PCAPWM0
F2H
uame
■
■
■
■
■
■
EPCOH
EPCOL
EPCOH:
在PWM模式下,与CCAPOH组成9位数。
EPCOL:
在PWM模武下,与CCAPOL组成9位数。
PCA模块1的PWM寄存器的格式如下:
PCA?
WM1:
PCA模块1的PWM寄存器
SFRuame
Address
bit
B7
B6
B5
B4
B3
B2
Bl
BO
PCAPWM1
F3H
uame
■
■
■
■
-
■
EPCIH
EPCIL
EPCIH:
在PWM模式下•与CCAP1H组成9位数。
EPC1L:
在PWM模式下,与CCAP1L组成9位数。
STC12C5A60S2系列:
模块0连接到P1.3/CCP0(可以切换到P4.2/CCP0/MIS0口),
模块1连接到P1.4/CCP1(可以切换到P4.3/CCP1/SCLK口)。
10.3.4脉宽调节模式(PWM)
册:
宽调制(PWM,PiUseWidthModulation)是一种使用程序来控制波形占空比、周期、相位波形的技术,在三相电机驱动、D/A转换等场合有广泛的应用。
STC12C5A60S2系列单片机的PCA模块可以通过程序设定,使其工作于8位PWM模式。
PWM模式的结构如下图所示。
所右PCA模块都可用作PWM输出(上图)O输出频率取决于PCA定时器的时钟源・
由于所有模块共用仅有的PCA定时器,所有它们的输出频率相同。
各个模块的输出占空比是独立变化的,与使用的捕获寄存器[EPCnL,CCAPnL]有关。
当寄存器CL的值小于[EPCnL,CCAPoL]时,输出为低?
当寄存器CL的值等于或大于[EPC11L,CCAPnL]时,输出为高。
当CL的值由FF变为00溢出时,[EPCuH,CCAPnH]的内容装载到[EPCnL,CTAPuL]中。
这样就可实现无干扰地更新PWM.要使能PWM模式,模块CCAPMu寄存器的PWMn和ECOMu位必须置位・
PCA时钟输入源频率
由于PWM是8位的,所以:
PWM的频率=
SYScIk/2,SYSclk/4,SYSclk/6,
PCA时钟输入源可以从以下4种中选择一种:
SYSclk.SYSclk/8,SYSclk/12,定时器0的溢出,ECI/P3.4输入。
举例:
要求PWM输出频率为38KHZ,选SYSclk为PCA/PWM时钟输入源•求出SYScIk的值由计算公式38000=SYSclk/256>得到外部时钟频率SYSclk=380(X)x256x1=9.72&000
如果要实现可调频率的PWM输出,可选择定时器0的溢出率或者ECI脚的输入作为PCA/PWM的时和输入源
当EPCnL=O及ECCAPhLmOOH时,PWM固罡输出高
肖EPCnL=1及CCAP11L=OFFHff't,PWM固定输出低
当某个I/O口作为PWM使用时■该口的状态:
PWM之前口的状态
PWM输出时口的状态
弱上拉/准双向
强推挽输出/强上拉输出,要加输出限流电阻1KJ0K
强推挽输出/强卜.拉输出
强椎挽输出/强上拉输出,要加输出限流电PaiK-lOK
仅为输入/高阳
PWM方效
开漏
开漏
限流电阻用10K到1K
。
接负载
普通IZO口区I匚二1
所右PCA模块都町用作PVM输出(下图〉•输出频率取决「PCA定时器的时钟源・
0
0
0
0
0
实例一:
电路图如上,该程序的功能是利用按键程序如下:
S1对LED的亮度进行调节。
#include"STC12C5A.h"//注意这个头文件,////度文档里搜索“
件。
用reg52是不行的,如果你没有的话,可以去百
STC12C5A系列单片机头文件”,有我共享的头文
voiddelay(unsignedintcnt){
unsignedchari;
for(;cnt>0;cnt--)for(i=0;i<250;i++);
}
voidmain()
{
CCON=0;
CL=0;
CH=0;
CMOD=0x00;//选择
//PCA初始化
//PCA的16位计数器低八位
//PCA的16位计数器高八位
系统时钟/12为计数脉冲,则PWM的频率f=sysclk/256/12;
CCAP0H=0x80;//
CCAP0L=0x80;
PCA_PWM0=0x00;//
占空比控制
控制占空比的第九位为0
CCAPM0=0x42;
//允许P13作为PWM输出
PCA计数器
//占空比调节
CR=1;//启动while
(1)
{
if(P10==0)
{
delay(200);while(P10==0);CCAP0H+=10;CCAP0L+=10;
}
}
}
实例二:
两个文件main.c
#include
voidPWM_clock(U8clock);
voidPWM_start(U8module,U8mode);
//////////////////////延时子程序/////////////////////////////
ms级延时
voidDelayMs(U8ms)//在11.0592M晶振下,stclOf系列(单周期指令){
U16i;
while(ms--)
{
for(i=0;i<850;i++);
}
}
////////////////////主函数入口////////////////////////////
sfrCCON=0xD8;//PCA控制寄存器sfrCMOD=0xD9;//PCA模式寄存器sfrCCAPM0=0xDA;//PCA
P1.3/CEX0/PCA0/PWM0(STC12C5A60S2sfrCCAPM1=0xDB;//PCA
P1.4/CEX1/PCA1/PWM1(STC12C5A60S2
模块0系列)
模块1系列)
模式寄存器
模式寄存器
//
//
模块1对应
sfrCLsfrCH
sfrCCAP0L
=0xE9;//PCA定时寄存器低位=0xF9;//PCA定时寄存器高位=0xEA;//PCA模块0的捕获寄存器=0xFA;=0xEB;//PCA模块
sfrCCAP0HsfrCCAP1LsfrCCAP1H
sfrPCA_PWM0=0xF2;//PCAPWM
sfrPCA_PWM1=0xF3;//PCAPWM
=0xFB;//PCA模块
低位
//PCA模块0的捕获寄存器高位1的捕获寄存器1的捕获寄存器模式辅助寄存器模式辅助寄存器
低位高位0
sbitCF=0xDF;sbitCR=0xDE;
sbitCCF1=0xD9;
//PCA计数溢出标志位//PCA计数器运行控制位//PCA模块1中断标志
sbitCCF0=0xD8;
//PCA模块0中断标志
=0XC0;//
模块0输出
占空因数为
25%
=0X80;//
模块0输出
占空因数为
50%
=0X40;//
模块0输出
占空因数为
75%
//*CCAPOH=CCAPOL
//*CCAPOH=CCAPOL
//*CCAPOH=CCAPOL
voidPWM_clock(U8clock);
voidPWM_start(U8module,U8mode);
voidPWM_clock(U8clock){
CMOD|=(clock<<1);
CL=0x00;
CH=0x00;
}
voidPWM_start(U8module,U8mode){
CCAP0L=0XC0;
CCAP0H=0XC0;
CCAP1L=0XC0;
CCAP1H=0XC0;
//模块0初始输出
//模块1初始输出
if(module==0)
{
switch(mode)
{
case0:
CCAPM0=0X42;break;//case1:
CCAPM0=0X53;break;//case2:
CCAPM0=0X63;break;//case3:
CCAPM0=0X73;break;//default:
break;
}
}else
if(module==1)
{switch(mode)
{
case0:
CCAPM1
case1:
CCAPM1
case2:
CCAPM1
case3:
CCAPM1
=0X42;break;//=0X53;break;//=0X63;break;//=0X73;break;//
default:
break;
占空因数为25%
占空因数为25%
模块0设置为8位模块0设置为8位模块0设置为8位模块0设置为8位
PWM
PWM
PWM
PWM
输出,输出,输出,
无中断
下降沿产生中断
上升沿产生中断
输出,跳变沿产生中断
模块模块模块模块
设置为8位设置为8位设置为8位设置为8位
PWM
PWM
PWM
PWM
输出,输出,输出,输出,
无中断
下降沿产生中断上升沿产生中断跳变沿产生中断
}
}
else
if(module==2)
{
switch(mode)
{
case0:
CCAPM0=CCAPM1断
=0X42;break;//
模块
0和
设置为8位PWM
输出,
无中
case1:
CCAPM0=CCAPM1沿产生中断
=0X53;break;//
模块
0和
设置为8位PWM
输出,
下降
case2:
CCAPM0=CCAPM1沿产生中断
=0X63;break;//
模块
0和
设置为8位PWM
输出,
上升
case3:
CCAPM0=CCAPM1沿产生中断
=0X73;break;//
模块
0和
设置为8位PWM
输出,
跳变
default:
break;
}
}
CR=1;//PCA计数器开始计数}
voidPCA_Intrrpt(void)interrupt7{
if(CCF0)CCF0=0;
if(CCF1)CCF1=0;//软件清零
if(CF)CF=0;//软件清零
}
voidmain()
{
TMOD|=0x02;/*timer0mode2:
8-Bitreload*/
TH0=0xff;
TR0=1;
PWM_clock
(2);//PCA/PWM时钟源为定时器0的溢出
PWM_start(0,0);//模块0,设置为PWM输出,无中断,初始占空因素为25%while
(1)
{
DelayMs(250);
}
}
PwmDrive_12C5A.c
#include
=0xD8;//PCA控制寄存器=0xD9;//PCA模式寄存器sfrCCAPM0=0xDA;//PCA
P1.3/CEX0/PCA0/PWM0(STC12C5A60S2sfrCCAPM1=0xDB;//PCA
P1.4/CEX1/PCA1/PWM1(STC12C5A60S2
sfrCCONsfrCMOD
模块0系列)
模块1系列)
模式寄存器
模式寄存器
//模块0对应
//模块1对应
sfrCLsfrCH
sfrCCAP0L
sfrCCAP0HsfrCCAP1L
=0xE9;//PCA定时寄存器低位
=0xF9;//PCA定时寄存器高位
=0xEA;//PCA模块0的捕获寄存器=0xFA;
=0xEB;//PCA模块
低位//PCA模块0的捕获寄存器
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STC12C5A60S2 内部 PWM 应用