单片机时钟频率与PWM信号精度
01 PWM频率
一、前言
昨天测试了基于手表晶体选频放大电路, 用于竞赛车模室外计时模块。 经过实际测量, 这种音叉晶体选频电路的谐振特性, 所对应的增益中心频率, 是在 32766Hz, 但是, 信号源所产生的信号频率却比这个频率高。 下面将会讨论一下, 究竟单片机系统时钟频率在多大时, 可以产生最接近 32766Hz 的PWM信号。
二、理论分析
这是 STM32F103 单片机系统时钟配置框图。 外部 8MHz 的晶体震荡信号, 通过分频之后输入到后面的锁相环, 再经过倍频之后, 可以获得 4MHz 到 64MHz 的系统时钟。 如果晶体震荡信号不分频, 最大可以得到 72MHz 的系统时钟。 这样, 系统时钟就会有17种不同的频率。 如果 以 32.766kHz 为中心频率, 可以得到 PWM 实际输出频率。 这样, 便可以得到每一种系统频率下的PWM与中心频率之间的误差。
#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY -- by Dr. ZhuoQing 2024-08-27
#
# Note:
#============================================================
from headm import *
fdim = [4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,72]
err = []
fpwm = 32766
for f in fdim:
ff = int(f*1e6/fpwm+0.5)
fff = int(f*1e6/ff)
epwm = fpwm-fff
printff(f, ff, fpwm, epwm)
err.append(epwm)
plt.plot(fdim, err, lw=3)
plt.xlabel("Fsys(Mhz)")
plt.ylabel("Err(Hz)")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
# END OF FILE : TEST1.PY
#============================================================
这里给出了不同的系统时钟下, 计算出来 PWM 频率与所设定的 中心频率之间的误差。 可以看到在系统时钟为 52MHz的时候, 经过分频之后所得到的 PWM 的频率和 32.766kHz 的误差可以达到 0Hz。
▲ 图1.2.1 不同的系统频率和PWM频率和中心频率之间的误差
三、实际测量结果
下面, 在实际电路板上进行测试。 由于所使用的 8MHz 的晶体本身也有一定的误差, 所以, 实际测试的PWM 频率和理论值之间存在大约 4Hz 的差异。 原本 系统频率在56MHz 时 PWM频率与 32.766kHz 误差最小。 但实际上, 系统频率在44MHz时, 误差最小。
系统时钟 | TIM1分频数量 | PWM理论数值 | PWM实测频率 | 中心频率误差 |
---|---|---|---|---|
4 | 122 | 32786 | 32790 | 24 |
8 | 244 | 32786 | 32790 | 24 |
12 | 366 | 32786 | 32790 | 24 |
16 | 488 | 32786 | 32790 | 24 |
20 | 610 | 32786 | 32790 | 24 |
24 | 732 | 32786 | 32790 | 24 |
28 | 855 | 32748 | 32752 | -14 |
32 | 977 | 32753 | 32756 | -10 |
36 | 1099 | 32757 | 32760 | -6 |
40 | 1221 | 32760 | 32763 | -3 |
44 | 1343 | 32762 | 32765.9 | 0.1 |
48 | 1465 | 32764 | 32768 | 2 |
52 | 1587 | 32766 | 32769.7 | 3.3 |
56 | 1709 | 32767 | 32771 | 4 |
60 | 1831 | 32768 | 32772.4 | 6.4 |
64 | 1953 | 32770 | 32773.6 | 7.6 |
72 | 2197 | 32771 | 32775.4 | 9.4 |
※ 总 结 ※
本文讨论了单片机的频率与PWM频率精度之间的关系。 如果希望输出 32.766kHz 的PWM频率, 通过实际测试, 可以看到在 单片机系统时钟频率为 44MHz 时误差最小。 通过修正之后, 所产生的PWM频率非常接近于32.766kHz, 在使用音叉晶体选频电路中, 的确所获得的选频放大信号最大。 这也可以在一定程度上减少驱动无线线圈的功率。 频率调准了, 也提高了接收模块的灵敏度。
■ 相关文献链接:
● 相关图表链接: