我现在已经用定时器+DMA+PWM的方式实现了4KHz的输出波形。但是不能精确的微调频率,比如从4000到4100HZ 通过指令1HZ 步距小范围的连续调整。
现在的方案是,使用两个定时器,其中定时器1做波形数据提取计数器,定时器2做PWM输出,利用定时器1的CCx比较事件触发一次DMA传送,数据是事先根据输出频率通过SIN计算得出的数组,数组的个数是随着输出频率的变化而变化的,数组是8位的,0--255 代表波形的值。定时器2的ARR设置为255,波形数组的值通过DMA定时更新到定时器2的CCR寄存器,PWM 的输出通过简单的RC滤波,即可生成正弦波了。
这个方案的好处是可以用一个定时器生成多个不同频率的正弦波,而且PWM的频率是固定的,方便滤波。缺点是波形数据要占用大量的内存,而且比较高频率.如4K时,调节精度只有3、4HZ。
请问大家有没有好的方案。 |