我目前在一个正弦波逆变器项目中工作,我需要使用微控制器来生成脉宽调制,为此我选择了atmega32,有人能指导我从哪里开始以及如何使用atmega32编写脉宽调制生成的代码吗,任何回应都将不胜感激,谢谢
发布于 2014-03-05 20:14:29
您需要计算出一系列的PWM值,您将定期更改这些值,当使用某些硬件进行滤波时,将得到一个正弦波。
您可以通过创建一个包含0-359列(步长为1)的电子表格来完成此操作,然后将该列转换为每个角度的正弦值。如果将其乘以0-2^16的值(并使用定时器1,这是一个16位定时器),您将得到360个不同的PWM值。
然后,您可以使用这些值,例如,通过更改每个定时器周期的PWM值。您可以让每个PWM值重复几次,并观察正弦波的频率变化。您只能在更改PWM值之前使用所有其他PWM值,并观看双倍频率。如果更改乘数,您将看到正弦波输出的大小发生变化。
当我谈到PWM值时,我指的是改变PWM输出的符号与间隔比的值。使用更高级的处理器,例如STM32,您可以让DMA在每次经过脉宽调制周期时自动执行此操作。使用Mega32时,您必须手动执行此操作。(即一个周期结束时的定时器中断。)
您需要将PWM的输出分配给引脚,然后才能将RC滤波器连接到该引脚。如果你用示波器观察输出,你会看到正弦波。10k/100n作为起始滤波器是非常好的。(10k与输出引脚串联,100n接地,在RC结上测量)。
至于哪种类型的PWM,试一试,说服自己什么是最好的。做一个简单的计数到x,然后变高,然后保持高,直到计数器达到0xFFFF类型,然后尝试居中对齐和任何其他类型。FWIW,居中对齐,如果您驾驶的是三相电机,则可提供最佳的EMC效果。
我怀疑您应该研究并阅读数据表,以了解如何输出PWMs。如果你想成为一个差强人意的工程师,你需要理解这一点。被灌输这样做的代码是不会有帮助的。
发布于 2014-03-12 11:52:07
我认为我可以通过设置参考值OCR1A = rand( 0,255 );(使用随机函数)来生成脉宽调制,这样每次循环运行时,它都会更改我的参考值,并通过将TCNT0的值从0增加到255,然后再增加到0,将其与三角波或斜坡波进行比较,否则再次将其从255减小到0,以生成三角波。这样我就可以得到不同占空比的波形,这就是我想要的PWM。
如有任何建议,我们将不胜感激
https://stackoverflow.com/questions/22194569
复制相似问题