问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

单片机时钟与PWM频率的精度

创作时间:
作者:
@小白创作中心

单片机时钟与PWM频率的精度

引用
CSDN
1.
https://blog.csdn.net/zhuoqingjoking97298/article/details/141585677

本文讨论了单片机的频率与PWM频率精度之间的关系。通过理论分析和实际测试,研究了如何通过调整STM32F103单片机的系统时钟频率来获得最接近32766Hz的PWM信号。

PWM频率

一、前言

在竞赛车模室外计时模块的设计中,使用了基于手表晶体的选频放大电路。经过实际测量发现,这种音叉晶体选频电路的谐振特性所对应的增益中心频率为32766Hz,但信号源所产生的信号频率却比这个频率高。因此,需要研究单片机系统时钟频率在多大时,可以产生最接近32766Hz的PWM信号。

二、理论分析

这是STM32F103单片机系统时钟配置框图。外部8MHz的晶体震荡信号,通过分频之后输入到后面的锁相环,再经过倍频之后,可以获得4MHz到64MHz的系统时钟。如果晶体震荡信号不分频,最大可以得到72MHz的系统时钟。这样,系统时钟就会有17种不同的频率。如果以32.766kHz为中心频率,可以得到PWM实际输出频率。这样,便可以得到每一种系统频率下的PWM与中心频率之间的误差。

通过Python代码计算不同系统时钟频率下的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
#============================================================

计算结果显示,在系统时钟为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

总结

通过实际测试发现,在单片机系统时钟频率为44MHz时误差最小。通过修正之后,所产生的PWM频率非常接近于32.766kHz,在使用音叉晶体选频电路中,的确所获得的选频放大信号最大。这也可以在一定程度上减少驱动无线线圈的功率。频率调准了,也提高了接收模块的灵敏度。

AT32F单片机

雅特力单片机的频率是可以从4MHz到120MHz每隔1MHz变化一次。下面是计算的每隔频率对应的PWM频率误差。



图2.1.1 AT32F单片机所产生的频率误差
图2.1.2 AT32单片机从80到120MHz对应的PWM频率误差

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号