需求:MCU出12路频率不同且可调的方波,范围500Hz-3KHz。
目前暂用新唐NUC123的一个24位定时器计数,通过判断计数值和相应12个频率对应的分频表比较,符合条件的就翻转对应的Pin脚,然后再更新分频表以便下一次翻转。另一个计数器定时1ms做电位器ADC采样来调节频率。整个系统无中断(进出中断很耗时间),只在main里判断相应的寄存器状态。(感觉比较难表达,没看明白的忽略这段直接从需求入手吧……)
这个方法可以想象肯定效果不会好,目前2K频率处误差大概+/-10Hz。
进一步优化后用MCU自带的四路PWM做其中四个输出,另外八个IO继续沿用之前的方法。PWM输出频率当然无误差,非常准,CPU负担减轻另外8个输出准度也有改善,但无法做得更好了。
求助:
1. 在以上基础上是否还有更好的优化方案(具体实现的算法上自认为已经基本没有优化空间了)?
2. 求推荐更好的实现方案。如果有能输出12路PWM的MCU推荐最好(能有10路基本也可以),找了半天没找到合适的,要求能独立调节每一路PWM频率(很多标称12路24路的并不能独立调节每一路的频率),占空比不需要调保持50%就好。
希望有高人解答,感谢! |