您好,欢迎访问三七文档
当前位置:首页 > 资格认证/考试 > 技工职业技能考试 > 技能培训专题-C8051FMCU应用笔记
C8051FMCU应用笔记SiliconLaboratoriesInc.新华龙电子有限公司4635BostonLane深圳市福田区华强北路现代之窗大厦A座13FC室(518013)Austin,TX787350755-83645240836452428364524483645251AN007—用PCA实现16位PWM相关器件本应用笔记适用于下列器件:C8051F000、C8051F001、C8051F002、C8051F005、C8051F006、C8051F010、C8051F011和C8051F012。引言脉冲宽度调制(PWM)波形常用于闭环反馈和控制应用,例如:控制加热单元的开关状态以调节DWDM(波分复用)系统中激光器的温度。在某些应用中,可编程计数器阵列(PCA)的内建8位PWM方式不能提供任务所需的足够的分辨率。本应用笔记介绍如何用PCA的‘高速输出’方式和最小的软件开销来产生一个16位分辨率的PWM波形。背景图1给出了PWM波形的一个例子。用于闭环控制应用的PWM信号的频率并不重要,只要波形‘足够快’就可以了,象控制系统的阶跃响应时间就应远远小于PWM信号的周期。信号所携带的的信息用波形的占空度来编码,占空度是波形为高电平的时间与PWM信号的周期之比。对于一个PWM实现来说,其输入是一个数值,通常为整数,该数值与所要求的输出波形的占空度成正比。tHtPtHtP-----=占空比图1.PWM波形示例实现在一个基于8051的设计中,有很多方法用于产生PWM波形:软件循环、查询或中断驱动的定时器等等。本应用笔记中的例子使用可编程计数器阵列(PCA)。相对于任何查询机制(基于软件或定时器)而言,使用PCA产生PWM可以大大降低所需要的CPU带宽,并可以消除在中断驱动的基于定时器的设计中因中断延迟不一致而产生的时序抖动。电话:Email:mcuinfo@silabs.com(版权所有)电邮:shenzhen@xhl.com.cnInternet:网址:—用PCA实现16位PWMPCA简介PCA包含一个16位的计数器/定时器和5个捕捉/比较模块,如图2所示。计数器/定时器有一个16位的计数器/定时器寄存器(PCA0H:PCA0L)、一个用于选择时间基准的方式寄存器(PCA0MD)和一个包含计数器/定时器运行控制及各模块捕捉/比较标志的控制寄存器(PCA0CN)。每个捕捉/比较模块有一个用于选择模块工作方式(边沿触发捕捉、软件定时器、高速输出或PWM)的配置寄存器(PCA0CPMx)和一个16位的捕捉/比较寄存器(PCA0CPHn:PCA0CPLn)。由于所有的捕捉/比较模块共享一个时间基准,因此它们同步工作,例如在电机控制应用中可以提供锁相激励波形。另外,由于每个模块有其自己的控制和捕捉/比较寄存器,因此每一个模块工作上又独立于其它模块,只要任何一个模块的服务程序都不影响共享的时间基准(停止或重新设置计数器/定时器、改变计数器/定时器的时钟源)。本应用笔记中的例子将PCA配置为独立工作;每个模块的服务程序只影响该模块的配置寄存器和捕捉/比较寄存器。PCA方式寄存器只设置一次,不再改变,让计数器/定时器寄存器(PCA0H:PCA0L)自由运行。/4/12000110CPS=11系统时钟T0溢出16位计数器/定时器捕捉/比较模块0捕捉/比较模块1捕捉/比较模块2捕捉/比较模块4捕捉/比较模块5交叉开关端口I/O图2.PCA原理框图2AN007-1.0DEC00AN007—用PCA实现16位PWM选择PCA的时基信号PCA的时基信号可以是下述四个时钟源之一:SYSCLK/12、SYSCLK/4、定时器0溢出、或出现在一个外部引脚ECI上的下降沿。图3给出了PCA计数器/定时器的方框图。在下面的几节中我们将看到,PCA时基信号的选择决定PWM波形的频率。如前所述,PWM波形的频率通常并不重要,只要‘足够快’就可以了。一个不很明显的时序选择是:PCA可以按SYSCLK的时钟频率工作。这可以通过选择定时器0溢出作为PCA时钟源,将定时器0设置为8位自动重装载方式并设重载值为‘0xFF’来实现。本应用笔记中的所有例子都将PCA配置为用SYSCLK/4作为时钟源。PCA0HPCA0LPCA0CNCFCRCCF0CCF2CCF1CCF4CCF3SYSCLK/12SYSCLK/4ECI00011011PCA0MDCIDLECFCPS1CPS0IDLE01CF定时器0溢出去PCA模块去PCA中断系统溢出读PCA0L去SFR总线瞬象寄存器图3.PCA计数器/定时器原理框图用PCA实现8位PWM我们首先介绍一个能产生8位精度PWM波形的方法。为了叙述的完整性,先介绍PCA的PWM方式。在该方式中,捕捉/比较模块被配置为图4所示的PWM方式。出现在CEXn的波形的周期等于256个PCA时钟周期。该信号的低电平时间等于在模块的捕捉/比较寄存器(PCA0CPLn)的低字节中所存储的8位数值。这种关系如图5所示。在主PCA计数器(PCA0L)的低字节发生溢出时,模块的比较寄存器的高字节被拷贝到模块的比较寄存器的低字节(PCA0CPLn=PCA0CPHn)。通过更新PCA0CPHn就能改变占空度。拷贝过程保证在输出端不产生毛刺。输出波形的占空度(用%表示)由下式给出:AN007-1.0DEC003AN007—用PCA实现16位PWM100256CPHn0PCA256×−占空度=因为PCA0CPHn可以含有一个0~255的数值,所以可编程的最大和最小占空度为0.38%(PCA0CP0H=0xFF)到100%(PCA0CP0H=0x00)。占空度选择的分辨率为:38.01002561=分辨率×=8位PWM方式的最大优点是不需要CPU的干预就可以输出一个固定占空度的波形。事实上,如果CIDL位(PCA0MD.7)被设置为‘0’(复位状态),即使CPU处于休眠状态,输出波形也将保持。改变占空度是通过向PCA0CPHn写入一个8位数来完成。在本应用笔记最后包含的文件‘PWM8_1.C’提供了一个8位PWM方式的例子。8位PWM方式的其它注意事项:1.可以通过将模块配置寄存器中的ECOMn位(PCA0CPMn.6)清0使CEXn输出保持为低电平。这样就可以产生一个0%占空度的波形。可以通过向该位写‘1’或向PCA0CPHn写入一个任意值来恢复正常的PWM输出。2.将MATn和ECCFn位(分别为PCA0CPMn.3和PCA0CPMn.0)设置为‘1’会导致在CEXn的下降沿产生个中断。PCA0LPCA0CPLnPCA0CPHnCEXnPCA0CPMnECOMnECCFnTOGnPWMnCAPPnCAPNnMATn00x0xQQSETCLRSR8位比较器允许匹配溢出PCA时基交叉开关端口I/O图4.PCA被配置为8位PWM方式4AN007-1.0DEC00AN007—用PCA实现16位PWM256PCA0CPHnCEXn图5.8位PWM方式的输出波形用PCA产生16位PWM为了产生一个具有16位精度的PWM波形,我们将PCA模块配置为高速输出方式,如图6所示。在该方式下,每当主定时器/计数器的寄存器(PCA0H:PCA0L)与模块的捕捉/比较寄存器(PCA0CPHn:PCA0CPLn)相匹配时,CEXn引脚发生电平转换,并可以选择产生中断。在示例代码中,PCA模块的中断服务程序用两个状态中实现:上升沿状态和下降沿状态,取决于CEXn引脚上哪一个边沿触发中断。注意,现在所说的的CEXn引脚被看作状态变量。在上升沿状态,模块的捕捉/比较寄存器被下一个下降沿的比较值更新(该值在示例代码中被称为PWM)。在下降沿状态,下一个上升沿的比较值被装入模块的捕捉/比较寄存器,该值为0(0x0000)。这一过程如图7所示。注意,PWM波形的周期为65536个PCA时钟周期。占空度(用%表示)由下式给出:10065536PWM×=占空度PCA0HPCA0CPHnPCA0LPCA0CPLnPCA0CNCFCRCCF0CCF2CCF1CCF4CCF301PCA0CPMnECOMnECCFnTOGnPWMnCAPPnCAPNnMATn000xCEXnENBENB01PCA0CPLnPCA0CPHn01TOGn写到写到PCA时基允许匹配16位比较器交叉开关端口I/O电平切换PCA中断图6.PCA配置为高速输出方式AN007-1.0DEC005AN007—用PCA实现16位PWMCEXnPCA0CPn0x0000PWMPWM匹配发生;中断已调用匹配发生;中断已调用比较寄存器已更新比较寄存器已更新图7.16位PWM的捕捉/比较寄存器装载过程所允许的最大和最小占空度由CEXn发生变化(它触发过程中断)后更新比较值所需要的最大时间决定。在‘C’示例代码和汇编示例代码中(分别为‘pwm16_1.c’和‘pwm16_1.asm’),PWM的最小值7个PCA时钟(对于本例为28个SYSCLK周期)。在这种情况下最小和最大占空度的值分别为0.01%和99.99%。占空度的分辨率(用%表示)为:0015.0100655361=分辨率×=或大约15个ppm(1ppm=百万分之一)。处理该中断的CPU开销是最小的。在汇编示例代码中处理两个边沿共需要41个SYSCLK周期,这不包括中断调用和中断返回所需的时间。两个边沿都必须每隔65536个PCA时钟被处理一次,或65536*4=262144个SYSCLK周期(如果PCA时钟等于SYSCLK/4)。所消耗的CPU带宽(用%表示)等于(41/262144*100)=0.015%。还应注意到CPU可以在保留在等待方式,如示例中所做的那样,这是因为PCA模块中断在需要处理时将‘唤醒’CPU内核。在示例中,占空度是通过向变量PWM写入一个16位的值来改变的。用PCA实现n位PWM作为16位PWM的推广,我们介绍在一些应用中所需要的高于8位精度但低于16位精度的n位PWM。采用n位PWM方案的动机之一是为了获得比16位实现方式更高的PWM输出频率。在该例中(‘PWMn_1.c’)用到两个16位变量:PWM_HIGH(保持用于使输出波形处于高电平所需要的PCA时钟数),PWM_LOW(保持用于使输出波形处于低电平所需要的PCA时钟数)。输出波形的周期为这两个变量的和:周期=PWM_HIGH+PWM_LOW占空度(用%表示)由下式给出:100×+==PWMLOWPWMHIGHPWMHIGH占空度6AN007-1.0DEC00AN007—用PCA实现16位PWM占空度的分辨率(用%表示)为:100×+==PWMLOWPWMHIGH1分辨率与16位PWM的情况类似,中断处理过程在两个状态中实现:一个用于上升沿状态,另一个用于下降沿状态。主要区别是在16位的情况下被装入到PCA模块比较寄存器的数值是一个常数(PWM或0)。在n位的情况下,常数(PWM_HIGH或PWM_LOW)被加到模块的比较寄存器的当前值。这一加法操作比装载一个常数需要多花几个时钟周期,这就导致了输出波形的高电平或低电平的最小时间略大于相应的16位解决方案。注:通过向PWM_HIGH和PWM_LOW写入合适的高电平和低电平值,n位PWM方案可以用于产生一个任意频率的波形。AN007-1.0DEC007AN007—用PCA实现16位PWM软件示例PWM8_1.c//--------------------------------------------------------------------//PWM8_1.c//--------------------------------------------------------------------////AUTH:BW////目标器件:C8051F000、F001、F002、F005、F006、F010、F011或F012//工具链:KEILC51////说明://实现8位PWM的示例代
本文标题:技能培训专题-C8051FMCU应用笔记
链接地址:https://www.777doc.com/doc-7862161 .html