这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 国产MCU » 芯圣HC18M003的PWM实例:2路互补PWM输出

共2条 1/1 1 跳转至

芯圣HC18M003的PWM实例:2路互补PWM输出

专家
2023-10-09 14:45:52     打赏

  这次给出2路互补PWM的示例程序及输出波形,程序如下:

#include"holychip_define.h"
 
 
/***************************************************************************************
  * @实现效果 PC0,PC2输出频率为3.9KHz的方波,占空比为50%,死区时间为64微秒
***************************************************************************************/
void main() {  
    /***************************************系统初始化*************************************/ 
    OSCCON = 0x04;      //Fosc=32MHz,Fcpu四分频2T  
    /************************************IO初始化******************************************/
    ANSELC = 0xFF; 
    TRISC  = 0xFF;      //PC0,PC2设置数字输出模式
    /****************************************PWM初始化*************************************/ 
    PWMMAP  = 0x11;     //PWM引脚映射PC2  PC0
    FLTMODE = 0X00;      //禁止故障检测
    PWM0C   = 0x01;    //时钟源RC32MHz/8
    PWM0C  |= 0x00;     //PWM0和PWM01均为高有效
    PWMM    = 0x01;   //互补输出模式,自动重载 
    PWM0PH  = 0x03;
    PWM0PL  = 0xFF; 
    //PWM0周期 = [ PWM0PH : PWM0PL] * PWM0工作时钟源周期
    //     = 1023*(1/4000000)
    //     = 256 us
    PWM0DH  = 0x01;  // PWM占空比=0x1FF*(1/4000000)/256=50%
    PWM0DL  = 0xFF;    
    PWM0DTH = 0X00;  //互补模式下,设置死区时间=0x00FF*(1/4000000)≈64us
    PWM0DTL = 0xFF; 
    PWMEN   = 0x11;  //PWM0和PWM01使能 
    while(1) {
    }
}


关键指令为:PWMM    = 0x01;           //互补输出模式,自动重载

实际测试PC0PC2的输出波形见下图:

图片2.png

黄色标记的PC0的输出波形,粉色标记的是PC2的输出波形。可以看到,PWM的周期为256微秒左右(f=3.91119kHz,T=1/f=255.63μS≈256μS)占空比和死区时间也大体匹配。






关键词: 菜鸟学单片机     芯圣     HC18M003     PWM互补输    

院士
2024-07-05 18:50:36     打赏
2楼

谢谢分享,学习了。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]