18344371880 发表于 2024-8-25 10:56:14

PWM在100%占空比的可能会降低LED亮度




这是手机拍的一张照片,P20使用的100%占空比的PWM,P22使用的是io端口低电平导通,两个端口都是推挽模式,但目测来看,P20的会比较暗一些(手机拍的不一定对比明显,但确实这样)
#include <AI8H.H>

#define MAIN_Fosc      24000000UL

#define        PSCR        11
#define        ARR                7999

typedef         unsigned char        u8;
typedef         unsigned int        u16;
typedef         unsigned long        u32;

u16        CCR = 0;
u8 i = 0;
bit PWM1_Flag = 0;

void Timer0_Init(void)                                        //30毫秒@24.000MHz
{
        AUXR &= 0x7F;                                                //定时器时钟12T模式
        TMOD &= 0xF0;                                                //设置定时器模式
        TL0 = 0xA0;                                                        //设置定时初始值
        TH0 = 0x15;                                                        //设置定时初始值
        TF0 = 0;                                                        //清除TF0标志
        TR0 = 1;                                                        //定时器0开始计时
        ET0 = 1;                                                        //使能定时器0中断
}

void io_init(void)
{
        P_SW2 |= 0X80;                                                //扩展寄存器(XFR)访问使能
    P2M0 = 0xff; P2M1 = 0x00;                         //P2端口全部推挽输出模式
}

void PWM_init(void)
{
        PWMA_CCER1 = 0x00;
        PWMA_CCMR1 = 0x60;
        PWMA_CCER1 |= 0x01;

        PWMA_CCMR1 |= 0x08;

        PWMA_PSCRH = (u8)(PSCR >> 8);
        PWMA_PSCRL = (u8)PSCR;       
        PWMA_ARRH = (u8)(ARR >> 8);
        PWMA_ARRL = (u8)ARR;
       
        PWMA_ENO |= 0x01;
        PWMA_PS |= 0x01;
       
        PWMA_BKR = 0x80;
        PWMA_CR1 |= 0x81;
       
        PWMA_CCR1H = (u8)(CCR >> 8);
        PWMA_CCR1L = (u8)CCR;
}

void main(void)
{
//        Timer0_Init();
        io_init();
        PWM_init();
        P22 = 0;
        EA = 1;
        while(1)
        {
       
        }
}

void Timer0_Isr(void) interrupt 1
{
        i++;
        if(i >= 5)
        {
                if(!PWM1_Flag)               
                {       
                        CCR += 200;
                        if(CCR >= ARR) PWM1_Flag = 1;
<p></p>                }
                else
                {
                        CCR -= 200;
                        if(CCR <= 1999) PWM1_Flag = 0;
                }
                PWMA_CCR1H = (u8)(CCR >> 8);
                PWMA_CCR1L = (u8)CCR;
                i = 0;
        }
}

DebugLab 发表于 2024-8-25 20:08:33

示波器或逻辑分析仪看波形是直线吗?

18344371880 发表于 2024-8-25 20:43:35

DebugLab 发表于 2024-8-25 20:08
示波器或逻辑分析仪看波形是直线吗?

没有,{:4_196:}你有的话帮我瞅瞅如何

梁工 发表于 2024-8-27 13:58:08

LED是电流器件,电流恒定则亮度不变。你可以测下串联电阻的电压是否变小了导致电流减小。

18344371880 发表于 2024-8-28 08:15:44

梁工 发表于 2024-8-27 13:58
LED是电流器件,电流恒定则亮度不变。你可以测下串联电阻的电压是否变小了导致电流减小。 ...

好嘞,谢谢
页: [1]
查看完整版本: PWM在100%占空比的可能会降低LED亮度