APP下载

基于C8051F020的16位PWM信号控制

2014-03-26刘开绪付保红吴春梅

长春工业大学学报 2014年2期
关键词:计数器寄存器时钟

刘开绪, 孙 健, 付保红, 吴春梅

(1.大庆师范学院电气信息工程学院,黑龙江大庆 163712;2.大庆油田热电厂,黑龙江大庆 163314)

0 引 言

在电源变换电路设计中经常要用到受控PWM信号,为了实现智能控制,利用美国Silicon Lab半导体公司推出的C8051F系列高性能8位嵌入式单片机,实现受控PWM信号输出及可实现电源变换电路工作的智能控制,下面重点阐述受控PWM信号的实现。

C8051F020单片机芯片集成了丰富的片内外设资源,集成了数模混合信号处理单元,是真正意义上的系统级单片机SOC(System on Chip)[1-2]。其微控制器内核CIP-51兼容MCS-51内核的全部功能及指令集。通过JTAG接口实现非插入式、全速的在线调试功能。利用C8051F系列单片机可实现PWM信号输出的同时,还可以实现电源变化的综合控制。

1 功能实现

C8051F020单片机片内部集成有一个可编程计数器阵列(Programmable Counter Array,PCA),称为PCA0,其原理如图1所示。

图1 可编程计数器阵列原理

它具有增强的定时器功能,与标准8051单片机的定时器/计数器相比,所需要CPU的干预更少。由图1可知,PCA0包含一个专用的16位定时器/计数器及5个16位的捕捉/比较模块。每个捕捉/比较模块都有自己的输入输出口线(CEXn)。通过交叉开关的使能配置,可以将输入输出口线连接到并行I/O端口上。定时器/计数器有6个计数脉冲源:系统时钟SYSCLK、系统时钟4分频SYSCLK/4、系统时钟12分频SYSCLK/12、外部振荡器时钟源8分频、定时器0溢出、ECI口线上输入的外部时钟信号可供选择。通过程序设置PCA0的特殊功能寄存器,可使每个捕捉/比较模块独立工作于边沿触发捕捉、软件定时器、高速输出、频率输出、8位PWM或16位PWM 6种方式之一。

设置相关PCA0的特殊功能寄存器,可设定需要工作在16位PWM方式下的PCA0捕捉/比较模块,利用16位PWM方式产生频率可设定的PWM信号[3]。在16位PWM方式下,16位捕捉/比较模块定义PWM信号低电平时间的PCA0时钟数。当PCA0计数器的值与捕捉/比较模块的值匹配时,捕捉/比较模块输入输出引脚CEXn输出高电平;当PCA0计数器溢出时,引脚CEXn输出低电平。为了得到一个频率固定、占空比可变的波形,要求新值的写入应与PCA0的CCFn匹配中断同步。同时应将CCFn置为l,以允许匹配中断。设置PCA0CPMn寄存器中的ECOMn,PWMn和PWM16n位为逻辑1,设置PCA0为16位脉冲宽度调制器方式。16位PWM波形图如图2所示。

图2 16位PWM的波形图

16位PWM方式的占空比由下式给出:

α为16位计数值的修整值,通过设定α的值可以改变PWM信号的周期,即可设定PWM信号的频率。令α=F000H,以产生对应ADC0的12位A/D转换所对应的PWM信号时,α原则上可以在区间0000H~FFFFH取值。波形原理如图3所示。

图3 12位PWM的波形图

此时,所产生的12位PWM波的占空比为:

由式(1)可知,对应于PCA0CPn=0,理论上可实现最大占空比100%,对应于PCA0CPn=0x FFFF,可实现最小占空比为0.001 5%。但实际中由于执行程序需要占用机器周期[4],实现不了理论上的最大和最小占空比,在这种情况下可通过对寄存器ECOMn位清0实现0%占空比信号输出。

2 软件系统设计

首先,进行程序初始化设计。置位REF0CN寄存器的BIASE位以使能1.2 V基准源,同时置位REFBE位以使1.2 V基准源倍乘得到2.4 V基准电压,将该2.4 V基准电压输出作为ADC0转换的参考电压VREF0。

设电源变换电路的输出取样电压为4.8 V,4.8 V的取样电压可以通过稳压和分压获得。配置ADC0CF寄存器的AMP0GN0~2位,设定ADC0输入信号放大倍数为取0.5倍,以使反馈信号与参考电压VREF0相吻合。电压等各取样信号可依次被检测送往单片机的ADC0各通道,依次完成A/D转换,转换后的数据经过处理后去调理PCA0模块比较器实现变换电路所需要的控制信号。

其次,需要配置端口交叉开关,以使能端口输出功能。通过配置特殊功能寄存器XBR0和XBR2,使PCA0的捕捉/比较模块输入输出线CEXn连接到端口引脚上,用于PWM波输出[5-8]。

然后,进行程序的设计。将ADC0转换的结果送PCA0形成16位的PWM信号,PCA0采用16位PWM方式。同时,使用ADC0的窗口检测器实现电压值超范围报警,如低电压设定为1 V,高电压设定为3.7 V,ADC0是采用写AD0BUSY为1启动转换的。因为ADC0是12位的,在程序中对PCA0的值进行了修整,以使PCA模块0实现12位PWM输出,输出脚CEX0配置在P0.0脚。ADC转换程序流程和PCA 16位PWM波程序流程分别如图4和图5所示。

图4 ADC转换程序流程

图5 PCA 16位PWM信号程序流程

在程序中,采取查询方式查询12位ADC0转换结果,ADC0窗口检测器采取中断方式,PCA0捕捉/比较模块采取中断方式,且PCA0捕捉/比较模块工作设置为高优先级别。

3 测试分析

PCA0捕捉/比较模块默认的PWM信号宽度是对应16位数字量的。为了与12位的ADC0转换结果相匹配,采取ADC0输出右对齐,使产生的PWM信号占空比能够在0%~100%期间受控调整,并在PCA0中断程序中对PCA0H寄存器的值进行修整。参考的程序段如下:

对应输入电压0.291 V时产生的PWM触发脉冲如图6所示。

图6 对应输入电压0.291 V时的PWM波形

若改变输出信号频率,可以通过修改服务子程序PCA_ISR0中的“MOV A,#11110000B”实现。如修改为“MOV A,#11111000B”时,输出的PWM信号的频率将发生改变,测得的波形如图7所示。

图7 ADC0输出右对齐,输入电压0.300 V

同理,每修改一位,频率改变一倍。

4 结 语

C8051F020单片机具有丰富的片上外设资源,利用其可编程计数器阵列PCA可产生对应ADC0各通道的PWM信号,该PWM信号受控于反馈电压,使得电源变换电路输出受控。实际应用时,根据ADC0的输入信号、基准电压和控制要求来设定PCA0的初值,用来设定输出的PWM信号的频率,使得脉冲宽度在整个周期内按照输入变量进行调整,使用系统级单片机不仅可以提供电源变换所需的PWM信号,同时还可以提供开关电源综合控制所需信号。

[1] 潘琢金,施国君.C8051Fxxx高速SOC单片机原理及应用[M].北京:北京航空航天大学出版社,2002.

[2] 郑江海,林钧峰,陈育群.基于AT89C51 PWM驱动电路遥控小车的研究[J].长春工业大学学报:自然科学版,2008,29(5):556-561.

[3] 鲍可进.C8051F单片机原理及应用[M].北京:中国电力出版社,2006.

[4] 何曦光,阮祥发,赵燕.电机控制中的16位PWM在C8051单片机中的实现[J].中国水运,2006(5):48-49.

[5] 王苏.直流电机PWM调速研究及单片机控制实现[J].机电工程技术,2008,37(18):82-85.

[6] 陆冬良,张代润.基于C8051的软开关用移相PWM的实现[J].电源技术应用,2005(9):49-52.

[7] 吴磊,李伟,张俊,等.基于C8051F020的开关电源并联模块供电系统设计[J].工业控制计算机,2013(6):128-129.

[8] 刘青青,朱清芳.基于C8051F020单片机的数据采集电路设计[J].现代电子技术,2012,9:135-136,140.

猜你喜欢

计数器寄存器时钟
采用虚拟计数器的电子式膜式燃气表
STM32和51单片机寄存器映射原理异同分析
别样的“时钟”
古代的时钟
关于74LS90计数器的Multisim仿真分析
Lite寄存器模型的设计与实现
有趣的时钟
算盘是个“小气鬼”
时钟会开“花”
光电脉冲计数器的制作与性能优化