Board logo

标题: PWM输出问题 [打印本页]

作者: win2000_li    时间: 2012-6-22 15:56     标题: PWM输出问题

本帖最后由 win2000_li 于 2012-6-22 15:57 编辑

要求在输出PWM波形,调整LED的渐亮。

要求在700ms内LED渐亮,功能可以实现

但是用示波器查看波形不是700ms,而是600ms.

开始,怀凝是输出700ms程序的问题,在PWM输出同时,加入一个IO输出。
结果发现这个程序没有问题,IO可以输出700ms.

后来,在发现在关闭PWM4输出通道时,发现有一个100ms多的缓慢下降的曲线。
这个没有办法解释啊!

单片机用的是S12G128;

请大家指点一下。谢谢!

void TpmPWM4config(void)
{   
    /* PWME4 = 0 */
    clrReg8Bits(PWME, 0x10);             /* Disable counter */
    /* PWMCNT4: PWMCNT4=0 */
    setReg8(PWMCNT4, 0x00U);             /* Reset Counter */
    /* PWMDTY4: PWMDTY4=0xFE */
    setReg8(PWMDTY4, 0xFFU);             /* Store initial value to the duty-compare register */
    /* PWMPER4: PWMPER4=0xFF */
    setReg8(PWMPER4, 0xFFU);             /* and to the period register */
    /* PWMPRCLK: ??=0,PCKB2=0,PCKB1=0,PCKB0=0,??=0,PCKA2=0,PCKA1=1,PCKA0=0 */
    setReg8(PWMPRCLK, 0x02U);            /* Set prescaler register */
    /* PWMSCLA: BIT7=1,BIT6=0,BIT5=1,BIT4=1,BIT3=1,BIT2=0,BIT1=1,BIT0=1 */
    setReg8(PWMSCLA, 0xBBU);             /* Set scale register */
    /* PWMCLK: PCLK4=1 */
    setReg8Bits(PWMCLK, 0x10U);          /* Select clock source */
    /* PWME: PWME4=0 */
    clrReg8Bits(PWME, 0x10);             /* Disable counter */
}


void TestPWM(void)
{
    static INT8U aCnt = SetZero;
   
    if (1 == KeyState)
    {
        DimCnt = ClrZero;
        PWME_PWME4 = 1;
        if (aCnt < 22)
        {
            aCnt++;
            PWMDTY4 -= 5;
        }
        else if (aCnt < 70)
        {
            aCnt++;
            PWMDTY4 -= 3;
        }
        else
        {        
            aCnt  = 88;
            PWMDTY4 = ClrZero;
            PWME_PWME4 = 0;
        }
     }
}

void main(void)
{
       while(1)
      {
             if (10msFlg == 1)
              {
                   10msFlg = 0;
                   TestPWM();
               }   
       }   
}




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0