【发布时间】:2014-03-05 10:08:51
【问题描述】:
我目前正在从事一个正弦波逆变器项目,我需要使用微控制器生成 PWM,为此我选择了 atmega32,有人可以指导我从哪里开始以及如何继续编写用于生成 pwm 的代码atmega32,任何回复将不胜感激,谢谢
【问题讨论】:
-
你能告诉我这个项目我必须使用哪种类型的pwm,快速pwm,相位正确或相位和频率正确的pwm
我目前正在从事一个正弦波逆变器项目,我需要使用微控制器生成 PWM,为此我选择了 atmega32,有人可以指导我从哪里开始以及如何继续编写用于生成 pwm 的代码atmega32,任何回复将不胜感激,谢谢
【问题讨论】:
您需要计算出一系列 PWM 值,这些值会定期更改,当使用某些硬件进行过滤时,会为您提供正弦波。
您可以通过创建一个包含 0-359 列(以 1 为单位)的电子表格来完成此操作,然后将其转换为每个角度的正弦值。如果然后将其乘以 0-2^16 的值(并使用定时器 1,它是一个 16 位定时器),您将获得 360 个不同的 PWM 值。
然后,您可以通过例如更改每个定时器周期的 PWM 值来调整这些值。您可以让每个 PWM 值重复几次,然后观察正弦波的频率变化。您只能在更改 PWM 值之前使用所有其他 PWM 值并观察频率加倍。如果更改乘数,您将看到正弦波输出大小发生变化。
当我谈论 PWM 值时,我指的是改变 PWM 输出的标记空间比的值。使用更先进的处理器,如 STM32,您可以让 DMA 在每次 PWM 周期过去时自动执行此操作。使用 Mega32,您将不得不手动执行此操作。 (即当一个周期完成时,定时器中断。)
您需要将 PWM 的输出分配给一个引脚,然后您可以将一个 RC 滤波器连接到该引脚。如果你用示波器看那个输出,你会看到正弦波。 10k/100n 作为起始滤波器非常合适。 (10k 与输出引脚串联,100n 接地,在 RC 结上测量)。
至于什么类型的 PWM,试一试,让自己相信什么是最好的。做一个简单的计数到 x,然后变高,然后保持高直到计数器达到 0xFFFF 类型,然后尝试中心对齐和任何其他类型。 FWIW,如果您驱动三相电机,中心对齐可提供最佳 EMC 结果。
我怀疑您应该研究并阅读数据表以了解如何输出 PWM。如果您要成为一名合格的工程师,您需要了解这一点。用勺子喂代码来做这件事并没有帮助。
【讨论】:
我认为生成 PWM 的方法是设置参考值 OCR1A = rand(0,255); (使用随机函数)所以每次循环运行时,它都会改变我的参考值,并通过将 TCNT0 的值从 0 增加到 255 然后回到 0 来将它与三角波或斜波进行比较,否则再次将其从 255 减少到 0以产生三角波。所以通过这种方式我可以获得不同占空比的波形,这就是我想要的 PWM。
任何建议将不胜感激
【讨论】: