搜索
bottom↓
回复: 67

avr单片机能用在三相逆变器中产生SPWM波形?有没有人做过?求源程序!

[复制链接]

出0入211汤圆

发表于 2007-4-29 15:47:20 | 显示全部楼层 |阅读模式
avr单片机能用在三相逆变器中产生SPWM波形?有没有人做过?求源程序!

如果全部靠算法实现的话估计是算不过来的阿!

即采用计算的方法寻找三角载波U与参考正弦波的焦点作为开关值的确定SPWM的脉冲宽度,虽然这种看起来行!单片机是算不过来的阿!

能不能用查表的方法做啊?查表做对他的调节范围影响大不?

不知道有没有大侠做过,希望能指导一下阿!给一种好的方法阿!

先谢了啊!!!!!!!!!!!!

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

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2007-4-29 22:09:16 | 显示全部楼层
#include <mega16.h>

#include "sintab.h"

#define uchar unsigned char   

#define uint unsigned int   

uchar indexU,indexV,indexW;             //



// Timer 1 溢出中断BOTTOM

interrupt [TIM1_OVF] void timer1_ovf_isr(void)    //改变A相、B相、C相的比较值

{

    if (++indexU==234) indexU=0;

    OCR2=SinTab[AmpU][indexU];

    if (++indexV==234) indexV=0;

    OCR1AL=SinTab[AmpV][indexV];

    if (++indexW==234) indexW=0;

    OCR1BL=SinTab[AmpW][indexW];

}



void start()

{

    indexU=0;

    indexV=78;

    indexW=156;     

    PORTD=0x00;

    DDRD=0xf0;

    TCCR2=0x71;      

    //FOC2 WGM20 COM21 COM20 WGM21 CS22 CS21 CS20

    //  0 |  1  |  1  |  1  |  0  |  0 |  0 |  1 |



    TCCR1A=0xf1;    //COM1A1|COM1A0|COM1B1|COM1B0|FOC1A|FOC1|WGM11|WGM10|

                    //  1   |   1  |  1   |   1  |  0  |  0 |  0  |  1  |

    TCCR1B=0x01;    //ICNC1 | ICES1|  –   |WGM13 |WGM12|CS12| CS11| CS10|

                    //  0   |   0  |   0  |  0   |  0  |  0 |  0  |  1  |



    TIMSK=0x04;     //|OCIE2|TOIE2|TICIE1|OCIE1A|OCIE1B|TOIE1|OCIE0|TOIE0|

                    //|  0  |  0  |  0   |   0  |  0   |  1  |  0  |  0   |      

}



void main(void)

{

    start();

    #asm("sei")       //开中断

    while (1);

}



   

2007-04-17,19:56:42   资料  邮件         编辑  删除   



【10楼】 chy31238

积分:6

派别:

等级:------

来自:

unsigned char flash SinTab[234]={  

127, 130, 133, 136, 139, 142, 145, 148, 152, 155, 158, 160, 163, 166, 169, 172, 175, 178, 180, 183,

186, 188, 191, 194, 196, 199, 201, 203, 206, 208, 210, 212, 214, 216, 218, 220, 222, 223, 225, 227,

228, 230, 231, 232, 233, 235, 236, 237, 237, 238, 239, 240, 240, 241, 241, 241, 242, 242, 242, 242,

242, 242, 241, 241, 241, 240, 240, 239, 238, 237, 237, 236, 235, 233, 232, 231, 230, 228, 227, 225,

223, 222, 220, 218, 216, 214, 212, 210, 208, 206, 203, 201, 199, 196, 194, 191, 188, 186, 183, 180,

178, 175, 172, 169, 166, 163, 160, 158, 155, 152, 148, 145, 142, 139, 136, 133, 130, 127, 124, 121,

118, 115, 112, 109, 106, 102, 99, 96, 94, 91, 88, 85, 82, 79, 76, 74, 71, 68, 66, 63,

60, 58, 55, 53, 51, 48, 46, 44, 42, 40, 38, 36, 34, 32, 31, 29, 27, 26, 24, 23,

22, 21, 19, 18, 17, 17, 16, 15, 14, 14, 13, 13, 13, 12, 12, 12, 12, 12, 12, 13,

13, 13, 14, 14, 15, 16, 17, 17, 18, 19, 21, 22, 23, 24, 26, 27, 29, 31, 32, 34,

36, 38, 40, 42, 44, 46, 48, 51, 53, 55, 58, 60, 63, 66, 68, 71, 74, 76, 79, 82,

85, 88, 91, 94, 96, 99, 102, 106, 109, 112, 115, 118, 121, 124};  

   

2007-04-17,19:59:30   资料  邮件         编辑  删除   



【11楼】 chy31238

积分:6

派别:

等级:------

来自:

用上面的程序即可在PD4,PD5,PD7输出互差120度的三相SPWM

出0入0汤圆

发表于 2007-4-30 09:09:25 | 显示全部楼层
上面的程序不全吧,我有实现三相spwm的程序,正在想变频

出0入0汤圆

发表于 2007-4-30 14:24:42 | 显示全部楼层
to:batoom

能否发一份给我。谢谢!!

xieshanghai2008@163.com

出0入0汤圆

发表于 2007-6-5 14:27:10 | 显示全部楼层
#include "sintab.h"能否贴出来看看

出0入0汤圆

发表于 2007-6-5 14:40:57 | 显示全部楼层
发程序的果然是高人

出0入211汤圆

 楼主| 发表于 2007-7-5 10:32:24 | 显示全部楼层
我自己也写了一个,大家看看,已经投入使用了啊!还没有出现什么问题!













#include"mega128.h"

#include"yejing.c"

#include"jianpan.c"

#include"delay.h"

#include"chuankou.c"

#include"biao.c"

#pragma regalloc-

register unsigned int temp_a@6;  //固定分配寄存器

register unsigned int temp_b@8;

register unsigned int temp_c@10;

#pragma regalloc+

unsigned char shu=0;

unsigned char temp_tcnt3_h=0xf9;

unsigned char temp_tcnt3_l=0x29;

void jisuan(float w)

{float temp;

unsigned char temp1=0;

unsigned char temp2=0;

unsigned int bao=0;

if(w>=20&&w<45)w=w*1.0025;

else

if(w>=45&&w<65)w=w*1.0055;

else

if(w>=65&&w<70)w=w*1.0065;

else

if(w>=70&&w<80)w=w*1.0075;

else

if(w>=80&&w<90)w=w*1.0083;

else

if(w>=90)w=w*1.0095;

temp=1000000.0/(float)w/60.0/0.0625;

temp=65536.0-temp;

bao=temp;

xianshi(temp,0);

temp1=bao%256;

temp2=bao/256;

while(!(ETIFR&0x04));//等待定时器3的中断

temp_tcnt3_l=temp1;

temp_tcnt3_h=temp2;

}

main()

{unsigned char i=0;

unsigned char re_data;

float pinlv=0.0;

unsigned long k=0;

delay_ms(200);

TCCR0=0x19;//工作在CTC模式,为8279提供工作频率

OCR0=0x02;

DDRD.0=0;

PORTD.0=1;

MCUCR|=0xc0;//外部存储器使能  

XMCRA|=0x0e;//在写入外部存储器的时候就可以等待两个时钟周期

lcd_reset();

init_8279();

PORTD.1=1;

DDRD.1=0;

for(i=0;i<11;i++)lcd_chinese(0,4+2*i,i);

lcd_chinese(3,0,15);

lcd_chinese(3,2,16);

lcd_word(4,4,26);

DDRB=0xff;

TCCR1A=0xff;//三个比较器在比较匹配的时候置位//工作在10位快速PWM

TCCR1B=0x09;

TIMSK|=0x04;//定时器1的溢出中断使能

OCR1A=0xff;

TCCR3A=0x00;//定时器3工作在普通定时模式

TCCR3B=1;//定时器3不需要分频

ETIMSK|=0x04;//定时器3溢出中断使能

#asm("sei")

jisuan(50.0);

while(1)

{

  if(PIND.1)

  {send_8279_com(0x40);        //读键盘的0地址里面的键值

   key=read_8279_data();

   for(k=0;k<19;k++)if(key==keybord[k])break;

   if(k==18){jisuan(pinlv);pinlv=0;k=0;}

   pinlv=pinlv*10;

   pinlv+=k;

   xianshi8279(pinlv,0);

   }

  }

}  

#pragma savereg-  //屏蔽在中端中压栈

interrupt [15] void int11()

{#asm  

push r30

out 0x2B,R7   //OCR1A=temp_a;

out 0x2A,R6

out 0x29,R9   //OCR1B=temp_b;

out 0x28,R8

STS  121,R11  //OCR1C=temp_c;

STS  120,R10

#endasm     

TIMSK&=0xFB;

#asm

pop r30

#endasm

}

#pragma savereg+

interrupt [30] void int33()

{TCNT3H=temp_tcnt3_h;

TCNT3L=temp_tcnt3_l;

shu++;

if(shu==60)shu=0;

temp_a=512+spwm_biao_60_a[shu];

temp_b=512+spwm_biao_60_b[shu];

temp_c=512+spwm_biao_60_c[shu];

TIMSK|=0x04;

}

出0入211汤圆

 楼主| 发表于 2007-7-5 10:39:20 | 显示全部楼层
xzyang

的那个程序不能变频的!

出0入211汤圆

 楼主| 发表于 2007-7-5 10:43:43 | 显示全部楼层
我发的那个程序在10-150Hz的变化范围内频率精度可以达到0.1%左右!

出0入0汤圆

发表于 2007-7-5 10:51:03 | 显示全部楼层
好东西

出0入211汤圆

 楼主| 发表于 2007-7-5 12:19:49 | 显示全部楼层
大家要是有什么好的新的算法,拿出来交流的啊!

出0入0汤圆

发表于 2007-7-5 15:47:59 | 显示全部楼层
hushaoxin

发程序 不如发思路

呵呵

出0入0汤圆

发表于 2007-7-6 18:32:59 | 显示全部楼层
謝謝收下.

出0入0汤圆

发表于 2008-6-22 13:56:50 | 显示全部楼层
好东西,等有空了研究研究这个东西

出0入0汤圆

发表于 2008-6-22 16:17:53 | 显示全部楼层
三相变频用SVPWM吧。使用vf+svpwm即可。参考AVR494。
我看了一下原理,用vb模拟了一下波形,很简单就出来了。
用到单片机上面运算量也不大。


SVPWM波形 (原文件名:SVPWM.jpg)

出0入0汤圆

发表于 2008-6-22 16:27:21 | 显示全部楼层
SVPWM波形,使用双斜坡模式,三角波上升、下降都设定一次的话没有必要,而且在avr上面也很难实现。直接在正弦波上取点即可,或者用等面积法取点。其实出来都差不多,至少在16bit字长上相差不大。如果载波频率比较高的话,单片机使用率很高的。普通逆变上面用20khz载频,大功率用10k以上。单片机需要在每个中断中计算并更新PWM占空比,所以中断部分需要用尽一切办法提高速度!而且还要测试实时性怎么样。

出0入0汤圆

发表于 2009-2-20 10:42:00 | 显示全部楼层
to:batoom 你好,我是个新手,正做这方面的工作,
能否也发一份‘avr单片机能用在三相逆变器中产生SPWM波形‘和硬件电路图给我。万分感谢!! !zhch_85@126.com

出0入0汤圆

发表于 2009-2-20 14:39:46 | 显示全部楼层
顶!
赞同 "发程序 不如发思路"

出0入0汤圆

发表于 2009-2-21 19:06:44 | 显示全部楼层
MARK!希望楼主能提供更为详细的资料。

出0入0汤圆

发表于 2009-2-21 19:57:30 | 显示全部楼层
先记住!

出0入0汤圆

发表于 2009-2-22 14:00:33 | 显示全部楼层
不错呀

出0入0汤圆

发表于 2009-7-18 19:50:31 | 显示全部楼层
期待源程序

出0入0汤圆

发表于 2009-7-18 22:06:36 | 显示全部楼层
好!

出0入0汤圆

发表于 2009-7-20 11:42:39 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-20 21:23:19 | 显示全部楼层
真是个高人 记号

出0入0汤圆

发表于 2009-7-20 23:52:49 | 显示全部楼层
好好学习一下~~

出0入0汤圆

发表于 2009-7-21 08:37:27 | 显示全部楼层
标记!

出0入0汤圆

发表于 2009-7-21 09:53:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-27 13:05:22 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-23 19:45:43 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-23 22:09:20 | 显示全部楼层
这是我用仙童IGBT实现的一个,
应该说实现交-直-交,调频也可以。
烧了两个模块后没继续了。
这是输出电压的波形,很勉强。。。。

(原文件名:PIC_1233.jpg)

出0入0汤圆

发表于 2009-9-23 23:44:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-24 07:58:14 | 显示全部楼层
要生成SPWM最好要有三对互补输出的PWM管脚,AVR的AT90PWM3应该可以。

出0入0汤圆

发表于 2009-9-24 09:35:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-9-26 00:40:01 | 显示全部楼层
好东西,应该置酷

出0入0汤圆

发表于 2009-12-22 15:49:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-22 18:56:15 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-12-22 19:48:11 | 显示全部楼层
标记一下,有用到的时候

出0入211汤圆

 楼主| 发表于 2009-12-23 13:00:58 | 显示全部楼层
30楼的波形不是勉强,完全是没有搞好啊

出0入0汤圆

发表于 2009-12-23 16:39:12 | 显示全部楼层
注意看一下30楼输出的逆变交流频率是 4.808khz!
不是没有搞好,而是没办法搞好----就凭AVR

出0入0汤圆

发表于 2009-12-23 16:43:20 | 显示全部楼层
如果是三相50HZ左右,波形可以很好

出0入0汤圆

发表于 2009-12-28 09:41:50 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-3-28 01:02:51 | 显示全部楼层
回复【1楼】xzyang
-----------------------------------------------------------------------

你好,请问那个表格如何生成的?能否告诉一下,谢谢!!

出0入0汤圆

发表于 2010-3-28 04:38:35 | 显示全部楼层
回复【42楼】qaz10126
-----------------------------------------------------------------------

http://www.baidu.com/s?bs=%B5%A5%C6%AC%BB%FA%D5%FD%CF%D2%B2%A8%B9%A4%BE%DF&f=8&wd=%B5%A5%C6%AC%BB%FA%D5%FD%CF%D2%B2%A8%BC%C6%CB%E3%B9%A4%BE%DF

出0入0汤圆

发表于 2010-3-29 13:06:11 | 显示全部楼层
回复【1楼】xzyang
-----------------------------------------------------------------------
你好,我现在也在写PWM生成正弦波的程序,用示波器观察后发现波形有点像,但不对,不知道哪里出了问题;
能否把你的程序发我一份作参考,谢谢!

我的邮箱:qaz10126@qq.com

出0入0汤圆

发表于 2010-3-29 13:37:41 | 显示全部楼层
不错

出0入0汤圆

发表于 2010-4-8 00:15:31 | 显示全部楼层
回复【6楼】hushaoxin
-----------------------------------------------------------------------

你好,请问你那个子程序有用到浮点数啊?好像AVR不支持浮点数啊?另外那个算法不太理解,下面的系数是怎么回事?请解答一下,非常感谢!!
if(w>=20&&w<45)w=w*1.0025;
else
if(w>=45&&w<65)w=w*1.0055;
else
if(w>=65&&w<70)w=w*1.0065;
else
if(w>=70&&w<80)w=w*1.0075;
else
if(w>=80&&w<90)w=w*1.0083;
else
if(w>=90)w=w*1.0095;

出0入0汤圆

发表于 2010-4-8 14:20:59 | 显示全部楼层
回复【43楼】kevintang
-----------------------------------------------------------------------

那个问题我已经解决了,而且在网上找了一个正弦波样本表生成工具,很好用的,非常感谢你的回复!!

出0入0汤圆

发表于 2010-4-14 16:12:17 | 显示全部楼层
请教;载波频率不变,改变正弦波频率的同时正弦波幅值也改变了,谁知道这是为什么?如何做到改变正弦波频率的同时正弦波幅值不变呢?

出0入0汤圆

发表于 2010-6-22 20:33:02 | 显示全部楼层
1楼的你的程序能编译过??AmpU就没有定义过..要不就是删了一大段程序。

出0入0汤圆

发表于 2010-6-22 20:36:28 | 显示全部楼层
回复【39楼】hzn1948
注意看一下30楼输出的逆变交流频率是 4.808khz!
不是没有搞好,而是没办法搞好----就凭avr

-----------------------------------------------------------------------

哈哈,搞好了的一大把,自己去搜搜,M16,M8的都有。。。。不要说AVR我还在外国网站见过2051搞的。

出0入0汤圆

发表于 2010-7-3 17:27:20 | 显示全部楼层
回复【楼主位】hushaoxin
-----------------------------------------------------------------------

你是跟着王老师做逆变的胡绍新吧?我也正在做逆变器

出0入0汤圆

发表于 2010-8-11 16:28:35 | 显示全部楼层
收藏啦!

出0入0汤圆

发表于 2010-10-14 21:52:21 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-14 22:16:03 | 显示全部楼层
两块avr就可以了~~~效果不错~~

出0入0汤圆

发表于 2011-7-6 09:26:18 | 显示全部楼层
不错!

出0入0汤圆

发表于 2011-7-8 10:10:32 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-7-15 11:12:24 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-13 17:03:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-12-21 22:01:49 | 显示全部楼层
值得借鉴谢了

出0入0汤圆

发表于 2012-1-3 13:10:35 | 显示全部楼层
值得学习啦

出0入0汤圆

发表于 2012-1-4 22:16:29 | 显示全部楼层
最近正在学这个..借鉴一下

出0入0汤圆

发表于 2012-7-7 11:25:13 | 显示全部楼层
xzyang 发表于 2007-4-29 22:09
#include  

#include "sintab.h"

#define uchar unsigned char   

太爱你了哈哈,太感谢了

出0入0汤圆

发表于 2012-7-10 09:59:53 | 显示全部楼层
                      mark

出0入0汤圆

发表于 2012-8-24 10:43:38 | 显示全部楼层
标记一下先

出0入0汤圆

发表于 2013-8-19 11:48:56 | 显示全部楼层

顶!
赞同 "发程序 不如发思路"

出0入8汤圆

发表于 2013-8-19 12:12:23 来自手机 | 显示全部楼层
avr这速度就算了吧!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-3 16:55

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

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