8位PWM扩展到12位的方法分享

    利用海尔的HR7P159做LED调节,在LED亮度低时调节亮度出现明显的闪烁。
    分析发现是由于每次调节1一个步长的占空比,到20%占空比以下时相当亮度变化5%(1/20)。为了解决闪烁必须增加调节精度即PWM的位数。
    通过下面算法扩展到12位这样20%以下每次调节的亮度就只有(1/320)了,灯非常细腻。

    U16 PWMD;//PWM占空比
    U8   PWMD_H;//占空比整数
    U8   PWMD_L;//占空比余数
    U8   PWM_COUNT;//PWM脉冲数
    void isr(void) interrupt//PWM中断
    {
    u8 i;
    if(T8P1IF)
    {
    T8P1IF=0;
    if(++PWM_COUNT>15)
    {
    PWM_COUNT=0;
    PWMD_H= PWMD/16;//求PWM的整数
    PWMD_L=PWMD%16;//求PWM的余数
    }
    i= PWMD_H;
    if( PWMD_L>0)
    {
    i+=1;
    PWMD_L-=1;
    }
    T8P1RL=i;//每次更新占空比
    }

    }

    这个在LED应用比自带的12位的PWM效果还要好,因为相对12位PWM的系统8位扩展的PWM驱动频率要高很多。

    稍微解释一下;
    直接给转换结果,通俗易懂:
    PWMD是程序计算的12bit,PWM值,硬件是8bit,PWMD的低四bit会被处理,共16次中断完成一次PWMD;比如
    PWMD:
    0x0001;
    比较寄存器T8P1RL的值分别是:
    0x01,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
    这样得到的占空比是1/16,等效于扩展了4bit;

    同样
    PWMD:
    0x0008;
    比较寄存器T8P1RL的值分别是:
    0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,
    0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,

    PWMD:
    0x0108;
    比较寄存器T8P1RL的值分别是:
    0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,
    0x10,0x10,0x10,0x10, 0x10,0x10,0x10,0x10,

    如何减小变压器漏感 开关式电源

    如何减小变压器漏感

    在电源设计中,常常听到漏感两字,那什么是漏感,它对电源又有什么影响呢? 一、什么是漏感 线圈所产生的磁力线不能都通过次级线圈,因此产生漏磁的电感称为漏感。指变压器初次级在耦合的过程中漏掉的那一部份磁通...
    几种常用的PCB表面处理工艺及其优缺点 pcb设计

    几种常用的PCB表面处理工艺及其优缺点

    几种常用的PCB表面处理工艺及其优缺点和适用场景 我们在画好PCB后,将其发送给PCB板厂打样或者是批量生产,我们在给板厂下单时,会附上一份PCB加工工艺说明文档,其中有一项就是要注明选用哪种PCB表...
    金百泽Allegro Skill工具长期使用方法 pcb设计

    金百泽Allegro Skill工具长期使用方法

    前几天有网友问,他一直在用的金百泽的EDA Skill工具提示过期不能再了,怎么破?这个金百泽的EDA Skill工具提供了一些了好用的Allegro扩展功能,能极大提高PCB Layout设计效率,...