热爱浪漫 发表于 2025-7-18 14:59

SAMD20 TC 定时器 PWM 频率稳定方案

SAMD20 的 PWM 频率随温度漂移?切换到外部晶振校准 DFLL 后稳定性提升明显。以下是配置代码:
// 使用32.768kHz外部晶振校准DFLL(SAMD20)
void SystemClock_Config(void) {
    // 启用外部32.768kHz晶振
    SYSCTRL->XOSC32K.reg = SYSCTRL_XOSC32K_ENABLE |
                        SYSCTRL_XOSC32K_XTALEN |
                        SYSCTRL_XOSC32K_EN32K;
    while(!SYSCTRL->PCLKSR.bit.XOSC32KRDY);
   
    // 配置DFLL48M使用外部参考
    SYSCTRL->DFLLCTRL.reg = 0; // 禁用DFLL进行配置
    while(SYSCTRL->PCLKSR.bit.DFLLRDY);
   
    SYSCTRL->DFLLMUL.reg = SYSCTRL_DFLLMUL_CSTEP(31) |
                        SYSCTRL_DFLLMUL_FSTEP(511) |
                        SYSCTRL_DFLLMUL_MUL(1464); // 48MHz = 32.768kHz × 1464
   
    SYSCTRL->DFLLCTRL.reg = SYSCTRL_DFLLCTRL_ENABLE |
                        SYSCTRL_DFLLCTRL_USBCRM |
                        SYSCTRL_DFLLCTRL_MODE |
                        SYSCTRL_DFLLCTRL_WAITLOCK;
    while(!SYSCTRL->PCLKSR.bit.DFLLRDY);
}

幸福小强 发表于 2025-7-22 17:53

内部的会受到芯片自身温度影响,同时没有外部的更加精确,因为外部的体积大,做的时候更容易。

mintspring 发表于 2025-7-28 09:41

一定要等到稳定了再进一步操作。

灵犀幻影 发表于 2025-7-29 21:52

确实,使用外部晶振校准DFLL可以显著提高PWM频率的稳定性。你的配置代码看起来是正确的,确保了32.768kHz的外部晶振被正确启用和配置。

灰色与青 发表于 2025-9-22 17:15

SAMD20 的 TC 定时器 PWM 频率稳定方案:使用外部高精度晶体(如 32.768kHz)作为时钟源,配置 GCLK 将其分频后供给 TC 模块;启用 TC 的自动重加载模式,避免手动更新周期值;校准 TC 的比较匹配寄存器,减少频率偏差;确保电源稳定,降低电压波动影响。
页: [1]
查看完整版本: SAMD20 TC 定时器 PWM 频率稳定方案