STM32
直播中

安德森大

8年用户 1293经验值
擅长:接口/总线/驱动
私信 关注
[问答]

STM8使用PWM输出时,出现比较大的误差,为什么?

本人使用PWM输出时,出现比较大的误差,-/+几百Hz。以下是我的初始化代码,望各位大神多多指教。

#define SYSCLOCK                16000000UL
#define CARRIER_WAVE_FREQUENCY  38000UL

/***************************************************************************
* @Function     : IR_Init()
* @Description  : init IR gpio and pwm
* @parameter    : void
* @return       : void
***************************************************************************/
void IR_Init(void)
{
    TIM1_DeInit();
    /*
        TIM1_Period = SYSCLOCK/CARRIER_WAVE_FREQUENCY-1
        TIM1_Prescaler = 0
        TIM1_CounterMode = TIM1_COUNTERMODE_UP
        TIM1_RepetitionCounter = 0
        */
    TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, SYSCLOCK/CARRIER_WAVE_FREQUENCY-1, 0);

    TIM1_OC1Init(TIM1_OCMODE_PWM1, TIM1_OUTPUTSTATE_ENABLE,
                 TIM1_OUTPUTNSTATE_DISABLE, SYSCLOCK/CARRIER_WAVE_FREQUENCY/2-1,
                 TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH,
                 TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET);

    TIM1_Cmd(ENABLE);

    //TIM1_OC2PreloadConfig(ENABLE);

    TIM1_CtrlPWMOutputs(ENABLE);

}




回帖(2)

刘帅

2024-4-29 17:25:35
误差很大的话,先检查下时钟是否正确;

如果是使用内部HSI,不妨换外部晶振测试下;

重装载及预分频的值别配置错了。
举报

手托初梦

2024-4-29 17:57:42
在STM8使用PWM输出时出现误差的原因可能有以下几点:

1. 定时器配置错误:请检查您的定时器配置是否正确,包括预分频器、自动重载寄存器和计数器模式。

2. PWM占空比设置不当:请确保您的占空比设置正确,过高或过低的占空比可能导致输出频率的误差。

3. 系统时钟不稳定:请检查您的系统时钟是否稳定,不稳定的时钟可能导致PWM输出频率的误差。

4. 外部干扰:请检查您的电路是否有外部干扰,如电源波动、电磁干扰等,这些干扰可能导致PWM输出频率的误差。

5. 代码问题:请检查您的初始化代码是否存在问题,如变量定义、寄存器配置等。

以下是一些建议,希望对您有所帮助:

1. 确保您的定时器配置正确,包括预分频器、自动重载寄存器和计数器模式。

2. 检查您的PWM占空比设置,确保其在合适的范围内。

3. 检查您的系统时钟是否稳定,如有必要,可以使用外部晶振或温度补偿晶振来提高时钟稳定性。

4. 检查您的电路是否有外部干扰,如电源波动、电磁干扰等,并采取相应的措施来减少干扰。

5. 仔细检查您的初始化代码,确保变量定义、寄存器配置等都正确无误。

如果您能提供更详细的代码和硬件信息,我将更好地帮助您解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分