当前位置:首页 > 技术学院 > 技术前线
[导读]在嵌入式电力电子开发的实践场景中,很多工程师都遇到过类似的困扰:明明按照理论参数配置了单片机定时器,想要生成32.768kHz的精准PWM信号,最终实际输出的频率却和目标值存在几Hz甚至几十Hz的偏差,反复调整寄存器参数也无法消除这个误差,后续的选频放大电路根本无法正常工作。单片机的系统时钟频率和最终输出的PWM信号频率之间,绝非简单的线性对应关系,二者的匹配逻辑里隐藏着很多新手很容易忽略的细节,深入理清二者的底层关联,就能从根源上解决PWM频率精度不足的问题,用普通低成本晶体实现高精度的目标频率输出。

在嵌入式电力电子开发的实践场景中,很多工程师都遇到过类似的困扰:明明按照理论参数配置了单片机定时器,想要生成32.768kHz的精准PWM信号,最终实际输出的频率却和目标值存在几Hz甚至几十Hz的偏差,反复调整寄存器参数也无法消除这个误差,后续的选频放大电路根本无法正常工作。单片机的系统时钟频率和最终输出的PWM信号频率之间,绝非简单的线性对应关系,二者的匹配逻辑里隐藏着很多新手很容易忽略的细节,深入理清二者的底层关联,就能从根源上解决PWM频率精度不足的问题,用普通低成本晶体实现高精度的目标频率输出。

PWM频率生成的底层硬件逻辑

单片机的PWM信号本质上是定时器计数器不断累加溢出的产物,整个生成过程完全由系统时钟作为最基础的驱动源,系统时钟的特性直接决定了PWM信号的所有性能边界。

绝大多数现代通用单片机的定时器核心,本质上是一个不断向上累加的N位计数器,它的计数时钟直接来源于单片机的系统主时钟,经过预分频器的整数分频之后,得到定时器的工作计数时钟。计数器从0开始每收到一个计数时钟脉冲,数值就自动加1,当计数值增长到预先配置的自动重装载寄存器的设定值时,定时器就会立刻触发更新事件,同时把计数器清零,PWM输出通道的电平按照预设的规则完成翻转,之后计数器重新从0开始累加,如此循环往复,最终就生成了连续的PWM方波信号。

这个机制决定了一个非常关键的底层特性:所有定时器的预分频系数、自动重装载寄存器的数值,都只能配置为整数,不可能设置为小数。这就意味着,PWM的频率不可能在整个频率轴上连续分布,最终能生成的所有PWM频率都是离散的点,不同的系统时钟频率选择,会直接决定这些离散频率点的分布密度和分布位置。如果系统时钟频率选择不合理,你想要的目标频率很可能刚好落在两个离散频率点的空隙里,无论怎么调整预分频系数和自动重装载值,都无法得到精准的目标频率,最终输出的频率和目标值之间必然存在一个不可消除的固有误差。

很多新手入门时完全没有意识到这个离散特性的存在,以为只要调整寄存器参数就能生成任意想要的频率,实际开发中就会频繁遇到频率精度不达标的问题,反复调试也找不到问题根源。想要得到高精度的目标PWM频率,第一步就是合理选择单片机的系统时钟频率,让目标频率刚好落在离散频率点的分布位置上,从根源上消除固有误差。

不同系统时钟下的PWM频率精度实测表现

以最常用的STM32F103系列单片机为测试平台,通过调整内部锁相环的倍频参数,可以把外部8MHz晶体输入的原始时钟,倍频生成从4MHz一直到72MHz之间的多种不同系统时钟频率,在不同的系统时钟下逐一测试生成目标PWM频率的实际误差,就能得到非常直观的规律。

当系统时钟频率设置为52MHz时,理论上可以生成完全没有误差的32.766kHz目标PWM频率,所有寄存器的参数都可以设置为整数,完全不存在任何舍入误差。但实际用高精度频率计测量之后会发现,最终的实测PWM频率和理论值之间存在几Hz的偏差,这个偏差的来源完全是外部8MHz晶体本身的固有制造误差,属于硬件本身的物理偏差,和定时器的配置逻辑没有任何关系。

如果把系统时钟频率调整到44MHz,同样配置定时器生成32.766kHz的目标PWM频率,最终的实测频率误差反而降到了0.1Hz级别,几乎完全和目标频率重合,精度远高于52MHz系统时钟下的表现。这是因为外部晶体本身的微小偏差,在44MHz的系统时钟下,刚好被定时器的整数配置完全抵消,最终得到的PWM频率几乎完美匹配目标值,这个结果完全跳出了纯理论计算的预期,是实际硬件测试才能得到的宝贵经验。

继续测试其他系统时钟频率下的表现可以发现,当系统时钟低于40MHz时,想要生成32kHz级别的PWM信号,预分频系数和自动重装载值的可选组合非常少,相邻两个离散频率点之间的间隔很大,根本无法得到高精度的目标频率,误差普遍超过十几Hz。当系统时钟提升到50MHz以上时,离散频率点之间的间隔变得非常小,理论上的频率精度很高,但晶体本身的微小偏差会随着系统时钟的提升被同步放大,最终实测的频率误差反而随着系统时钟的升高逐步变大,72MHz系统时钟下的实测频率误差甚至接近10Hz。

这个实测规律给了工程师一个非常明确的优化思路:想要得到最高精度的目标PWM频率,不能盲目追求过高的系统时钟频率,也不能选择过低的系统时钟,必须在中间区间找到一个和目标频率特性最匹配的系统时钟点,兼顾理论配置精度和晶体偏差的放大效应,最终才能得到误差最小的PWM输出。

工程场景的优化设计要点

理清了单片机时钟和PWM频率的关联规律之后,在实际项目开发中,就可以通过几个关键步骤的优化,轻松得到满足精度要求的PWM信号。

第一步是根据目标PWM频率的特性,针对性选择最优的系统时钟频率。不要上来就直接把系统时钟配置到单片机的最高主频,要先梳理出所有可能的系统时钟选项,逐一计算不同系统时钟下,生成目标PWM频率的理论最小误差,优先选择理论误差最小的几个候选系统时钟,为后续的硬件测试做好准备。比如想要生成32.768kHz的PWM信号,44MHz、52MHz都是优先级很高的候选系统时钟,优先在这几个频率下做硬件实测,很容易找到误差最小的配置点。

第二步是通过实际硬件测试校准,抵消晶体本身的固有偏差。哪怕是同一型号的不同单片机,外部晶体的实际偏差也存在微小的个体差异,纯理论计算永远无法完全抵消这个硬件层面的物理偏差。用高精度频率计测量不同系统时钟下的实际PWM输出频率,记录下误差最小的系统时钟配置,把这个参数固化到程序里,就能得到远高于理论预期的高精度PWM信号,完全不需要更换昂贵的高精度温补晶振。

第三步是利用跳频技术进一步压缩残余误差。如果经过前两步的优化之后,PWM频率的残余误差依然无法满足项目的精度要求,就可以引入跳频调变的技巧,在两个相邻的离散PWM频率之间动态切换,通过调整两个频率的出现占比,进一步把平均频率的误差压缩到0.1Hz级别,最终实现ppm级别的超高频率精度。这套组合优化方案的成本极低,完全不需要额外的硬件改动,仅靠软件层面的配置优化就能实现,性价比优势极其突出。

同时还要注意几个容易被忽略的细节:定时器的计数时钟必须直接来源于系统主时钟,不要经过额外的异步分频,避免引入额外的时钟相位偏差;PWM输出引脚的复用功能配置要准确,开启推挽输出模式,保证输出波形的边沿足够陡峭,不会因为边沿过缓引入额外的频率测量误差;系统时钟的配置完成之后,要等待锁相环完全锁定稳定之后,再初始化定时器,避免时钟不稳定导致PWM频率出现漂移。

单片机系统时钟和PWM频率的关联逻辑,本质上是硬件资源特性和实际需求之间的匹配艺术,跳出纯理论计算的思维定式,结合实际硬件的特性做针对性优化,就能用极低的成本实现极高的PWM频率精度,满足各类对频率精度有高要求的电力电子场景需求。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭