使用定时器在CodeVisionAVR中生成正弦波形

时间:2012-06-27 16:54:09

标签: c embedded waveform

任何人都可以帮助我CodeVisionAVR吗?我想写一个程序 ATMega16L微控制器使用定时器功能生成正弦波形 在CodeVisionAVR中,但我不知道如何使用正弦波OCR。

2 个答案:

答案 0 :(得分:1)

Ouptut Compare(OC)定时器输出只能产生方波。然而,它们可用于脉冲宽度调制(PWM),其中脉冲的宽度可以改变;如果PWM波形输出经过低通滤波,则输出将是与PWM波形的标记空间比成比例的电压。通过正弦修改脉冲宽度并通过适当的滤波,您可以生成正弦波输出。

因此,在每次定时器重载中断时,您需要修改脉冲宽度。我建议您将脉冲宽度预先计算为一个值数组,并在每次重载中断时将它们周期性地馈送到定时器。然而,在PWM频率,脉冲宽度分辨率,模拟滤波和波形频率之间存在许多折衷,这会影响波形的精度。您需要平衡这些变量以满足您在频率和带宽方面的要求。

答案 1 :(得分:0)

您还可以使用定时器触发中断,在此中断波形数据从其他GPIO引脚写入(使用梯形电阻作为DAC或类似物),您可以将波形数据放入查找表并逐步执行每次中断发生时都会有表格。

或者,如果您有合适的PWM输出引脚,则可以使用定时器中断来取消/递增占空比值,以提供正弦波或任何其他形状波形输出。这确实需要PWM定时器比所需的正弦波快得多,因此您可以对其进行过滤,但这取决于您需要的准确度。