搜索
bottom↓
回复: 2

有谁做过3路PWM输出--------同时中断产生的困扰

[复制链接]

出0入0汤圆

发表于 2007-6-27 10:41:24 | 显示全部楼层 |阅读模式
我现在在用atmega16(mega8也可以)产生三路频率和振幅相同的余弦波,且此3路的余弦波要求相互之间的相位差可调.



单片机的T/C1,T/C2全部投入使用,选用快速PWM模式,计数器的TOP值选择固定的8位.程序的设计思路很简单,在此就不多废话:就是当计数器计数值和OCR1A(OCR1B/OCR2)比较匹配时发生中断.



问题来了:

     1.当OCR1A(OCR1B/OCR2)三者的值相等或者非常接近时,三个比较匹配中断几乎同时发生.此时就有先后处理的问题,程序第一时间仅能处理其中的一个,其结果就会使另外两个中断处理得不及时,从而导致另外两个相应的匹配寄存器得不到及时的更新,换句话说,可能丢失了>=1次以上的匹配.

     例如,我的本意是让三路输出相位差为0的余弦波,结果却不是这样,如附件中的图1,产生了相位差.且波形也稍稍的被干扰.图2是相互相位差要求为120度,但是还是因为有同时中断的存在,所以还是有偏差.而且随着时间的推移,这样产生的误差是越来越大.

    2.所以请教高手帮忙解决,欢迎提建议.

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2007-6-27 10:44:55 | 显示全部楼层
点击此处下载armok01159521.rar

出0入0汤圆

发表于 2007-6-30 01:19:01 | 显示全部楼层
1。当3个中断同时产生,CPU当然只能一个一个的处理,所以误差不能消除。只能采用提高系统的时钟频率(会影响PWM的频率)和采用汇编尽量减少中断服务程序的执行时间来减少误差。



2。如果相位的改变是同时的,可以考虑只使用一个中断,在中断中将3个PWM的输出同时改变。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 21:04

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表