发新帖我要提问
12
返回列表
打印

单片机本身的硬件PWM输出是8位的,如何实现16位PWM输出?

[复制链接]
楼主: any_014
手机看帖
扫描二维码
随时随地手机跟帖
21
any_014|  楼主 | 2015-6-18 10:06 | 只看该作者 回帖奖励 |倒序浏览
参考的硬件电路是用的笙泉的一款单片机,PCA里有8为PWM输出模式,所以就以为他的DA实现是用8位硬件PWM实现。
今天发现不对,晶振用的是11059200Hz的,PCA时钟源可选1/2或1/12倍的时钟频率。
如果是8位PWM的话,输出频率应该是11059200/256/2或11059200/256/12,应该是21600Hz或3600Hz。
可实际测得他的输出频率为460Hz。按输出频率反推的话,计时数为12000或2000。

使用特权

评论回复
22
any_014|  楼主 | 2015-6-18 11:13 | 只看该作者
这样的话,就不是8位硬件PWM了。
16位定时器实现的话,就要用到定时器中断了,会影响到采集信号的精度。
而且,0-400度的范围,分12000段或2000段,都是太多了吧,计算的温度精度都不了那么高。

使用特权

评论回复
23
any_014|  楼主 | 2015-6-18 11:33 | 只看该作者
用定时器实现16位PWM的话,也挺纠结的。
如果要用同用定时器实现的话,得需要两个定时器吧?一个控制占空比,一个控制周期。
STC12就2个通用定时器,T0当作串口通信用,T1用作AD采集定时积分用。
还有个PCA的计时器,PCA模组当定时器用可以产生中断,控制占空比,PCA计时器计时溢出产生中断来控制周期。

可是我这里还需要额外一路4K左右PWM波,用来产生负压,给运放提供负偏置。
之前是用PCA的8位硬件PWM产生,用了两路,一路是占空比可变,用来产生DA,另一路是固定方波,来产生这个负压。
现在DA如用用PCA的16位定时器功能来实现的话,产生负压这路PWM就麻烦了。如果仍按一个周期反转一次的话,频率太低了。

使用特权

评论回复
24
coody| | 2015-7-15 22:19 | 只看该作者
ayb_ice 发表于 2015-6-4 08:52
重装载也做不到

软件要控制输出,进入中断都会有抖动,中断是有延迟的,而且不是个定值 ...

输出是不需要程序控制的,是硬件控制的,所以不会出现抖动。如果你没有用过,就不能这么武断。

使用特权

评论回复
25
Liang118038| | 2017-3-9 16:51 | 只看该作者
才8位的pwm确实不够用,用定时器拟模抖动太大,之前用来做电子负载还没到1A那纹波大得要命,改为用stm8最便宜那款16位PWM试了一下从0到3A纹波在5mV以下干干净净的,而且精度相当高!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则