上次发帖简单说了下芯圣HC18M003的PWM设备,这次给出示例程序及输出波形。以下是2路独立PWM输出模式下的程序:
#include"holychip_define.h" /*************************************************************************************** * @实现效果 PC0,PC2输出频率为3.9KHz的方波,PWM0占空比为50%,PWM01占空比为25% ***************************************************************************************/ void main() { /**********************************系统初始化******************************************/ OSCCON = 0x04; //Fosc=32M Fcpu=4M(Fosc4分频 2T) /************************************IO初始化******************************************/ ANSELC = 0xFF; TRISC = 0xFF; //PC设置数字输出模式 /********************************PWM初始化*********************************************/ PWMMAP = 0x11; //PWM映射PC2 PC0 FLTMODE = 0x00; //禁止故障检测 PWM0C = 0x01; //时钟源RC32MHz/8 PWM0C |= 0x00; //PWM0和PWM01均为高有效 PWMM = 0x11; //独立输出模式,自动重载 PWM0PH = 0x03; PWM0PL = 0xFF; //PWM周期配置 //PWM0周期 = [ PWM0PH : PWM0PL] * PWM0工作时钟源周期 // = 1023*(1/4000000) // = 256 us PWM0DH = 0x01; PWM0DL = 0xFF; //PWM0占空比50% PWM0DTH = 0x00; PWM0DTL = 0xFF; //PWM01占空比为25% PWMEN = 0x11; //PWM0和PWM01使能 while(1) { } }
实际测试PC0和PC2的输出波形见下图:
黄色标记的PC2的输出波形,粉色标记的是PC0的输出波形。为了便于对比观察,测试的时候,人为改变了输出电压单位,使两边的波形不至于重叠。
可以看到,PWM的周期为256微秒左右(f=3.91111kHz,T=1/f=255.68μS≈256μS),误差不大。占空比与程序设置的是一致的。一个是50%,一个和是25%。