菜鸟只助攻 发表于 2026-1-25 16:32:04

求助怎么稳定输出1.6MHZ变频pwm

使用IC:8H1K08-TSSOP16
输出引脚P12
需求:初始化固定频率,12M自带内部晶振。输出1.6M的pwm,占空比50%,从P12引脚输出。
要求PMW频率可调1.4MHZ-1.8MHZ。1Khz频率 开关PWM输出。
为满足这个需求,参考那个例程比较好实现,或者通过哪个pwm功能可以实现。


DebugLab 发表于 2026-1-25 17:36:16

至少内部主时钟频率得是1.6M的整数倍吧

lcwswust 发表于 2026-1-25 20:38:25

假如IRC频率为35M,调整MCLKOCR,改变主时钟输出分频系数,
比如19分频可得到1.84M,18分频得到1.75M,25分频得到1.4M,就是分辨率有点低。
另外可考虑一下IRTRIM对系统时钟进行调整,应该能得到更高的分辨率。

网老四 发表于 2026-1-25 23:22:16

如果固定50%占空比,不需要用PWM实现这个功能,可以直接定时器分频输出,修改分频比来调节输出频率.具体时钟和分频比要根据输出频率调节步长来评估

rm543 发表于 2026-1-26 00:35:35


从原理上来说,使用12MHz的主频是无法实现 1600KHz~1800KHz 准确步进 1KHz 的效果。

因为在数字计数器的时钟模式下,时间步进是线性,
但频率与时间互为倒数,所以频率的步进是不线性的,
这是两种维度之间的差异,在一个维度内无法完全对齐另一个维度的点,
就好比你可以用圆规画出完美的圆,但是你却不能用直尺准确测量出圆的周长。
1600~1800之间有201个点,它们的公倍数非常大,主频会变得不切实际。

如果想要获得准确的 1600KHz 到 1800KHz 步进 1KHz,则需要转换成频域的方法。
比如使用 VFC (V/F) 电压频率转换器,类似 LM331 之类的芯片,
然后单片机输出一个PWM作DAC通过调节电压去控制频率,获得一个稳定步进的频率。
或者使用电压控制电流源加电容搭建可变斜率发生器,使用比较器与一个固定电压进行比较,
生成一个频率与电压呈线性关系的VCO,但模拟电路需要考虑各个元件的误差和漂移。

如果只是不需要很准确的频率步进,那么可以使用 STC8H2K08U 等支持 144MHz PWM时钟的型号,
把PWM的计数器主频拉高,然后获得相对较高的频率分辨率,简单满足一定范围的频率步进调节,
其中可以通过查表方式设置特殊的主频和分频组合,获得固定主频下无法产生的中间频率。



rm543 发表于 2026-1-26 08:48:29

rm543 发表于 2026-1-26 00:35
从原理上来说,使用12MHz的主频是无法实现 1600KHz~1800KHz 准确步进 1KHz 的效果。

因为在数字计数器的 ...

或者使用DDS的方式,把时钟设置成4.096MHz的倍数,可以生成稳定步进1KHz的效果。

菜鸟只助攻 发表于 2026-1-26 09:24:19

rm543 发表于 2026-1-26 00:35
从原理上来说,使用12MHz的主频是无法实现 1600KHz~1800KHz 准确步进 1KHz 的效果。

因为在数字计数器的 ...

主要高速PWM输出1.6mhz-1.8mhz频率分辨率没有要求 当然可以越小越好。是通过软件检测自动调整。1Khz并不是分辨率,是开关,比如1khz开关,60%开,40%关。就是60%的时候输出1.6mhz-1.8mhz的高频率PWM,到40%的时候输出0的意思。其中一个是载波的意思

rm543 发表于 2026-1-26 11:15:28

菜鸟只助攻 发表于 2026-1-26 09:24
主要高速PWM输出1.6mhz-1.8mhz频率分辨率没有要求 当然可以越小越好。是通过软件检测自动调整。1Khz并 ...

那这样可以用 PWM 模块进行输出,软件计算设置频率和占空比,
然后用一个不自动重装的定时器去做翻转定时,
比如说定时400uS进入中断,关闭PWM输出,然后重装600uS的定时器值,
再次中断后打开PWM输出,然后再重装400uS的值,如此反复。


但是要输出1.6MHz到1.8MHz的频率,主频估计要设置成28.8MHz,
就可以刚好满足1.6MHz和1.8MHz的两个频率,一个重装值8一个重装值9,
但是原理上这两个频率之间已经不可调了,因为重装值只差1。

如果用带 144MHz 频率PWM时钟的型号,就可以设置PWM时钟为144MHz,
那么1.6MHz和1.8MHz频率的重装值就是40和45,中间还有5档可调。
页: [1]
查看完整版本: 求助怎么稳定输出1.6MHZ变频pwm