amoBBS 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
查看: 3974|回复: 12

ATmega16产生SPWM驱动全桥实现DC_AC变换

[复制链接]
发表于 2011-8-21 09:13:12 | 显示全部楼层 |阅读模式
软件平台:AVR Stdio4
硬件平台:ATmega16最小系统
//本人做的欢迎大家指教       
#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>
#include <avr/interrupt.h>

#define uint unsigned int
#define uchar unsigned char


#define  S_HIN1 PORTA|=(1<<PA0)
#define  C_HIN1 PORTA&=(0<<PA0)

#define  S_LIN1 PORTA|=(1<<PA1)
#define  C_LIN1 PORTA&=(0<<PA1)

#define  S_HIN2 PORTA&=((0<<PA2)&(0<<PA3))                //选中PWM1(1<<PA2)
#define  C_HIN2 PORTA&=((1<<PA2)&(0<<PA3))                //清除PWM1

#define  S_LIN2 PORTA|=((1<<PA3)|(1<<PA2))                //选中PWM2
#define  C_LIN2 PORTA&=((1<<PA2)&(0<<PA3))                //清除PWM2

#define  S_SD1 PORTA|=(1<<PA4)
#define  C_SD1 PORTA&=(0<<PA4)

#define  S_SD2 PORTA|=(1<<PA5)
#define  C_SD2 PORTA&=(0<<PA5)

//128点正弦波样本值
/*
uint SinParam[128]={
128,134,140,147,153,159,165,171,177,182,188,193,198,204,208,213,
218,222,226,230,233,237,240,242,245,247,249,251,252,253,254,254,
254,254,253,252,251,250,248,246,244,241,238,235,232,228,224,220,
215,211,206,201,196,191,185,179,174,168,162,156,150,144,137,131,
125,119,112,106,100,94,88,82,77,71,65,60,55,50,45,41,
36,32,28,24,21,18,15,12,10,8,6,5,4,3,2,2,
2,2,3,4,5,7,9,11,14,16,19,23,26,30,34,38,
43,48,52,57,63,68,74,79,85,91,97,103,109,116,122,128
};
*/

uint SinParam[65]={
128,134,140,147,153,159,165,171,177,182,188,193,198,204,208,213,
218,222,226,230,233,237,240,242,245,247,249,251,252,253,254,254,
254,254,253,252,251,250,248,246,244,241,238,235,232,228,224,220,
215,211,206,201,196,191,185,179,174,168,162,156,150,144,137,131,
128
};
volatile uchar num=0;
volatile uchar HB_Flag=0;

int main(void)
{
        //define PD4 and PD5 to be output(respectively OC1B and OC1A)
        DDRD|=0x30;       
        //Mode;fast PWM(15),Freq;F(I/O)/1,clr at compare and set at top,
        TCCR1A=0xA3;
        TCCR1B=0x19;
        OCR1A=1024;
        OCR1B=0;
        TIMSK=0x08;        //output compare interrupt enable
        sei();
        while(1);
}

ISR(TIMER1_COMPB_vect)
{
        OCR1B=SinParam[num]*4;
        num++;
        if(num>64)
        {
                num=0;
                HB_Flag++;
                if(HB_Flag==1)
                {
                        C_LIN1();                //关断1号下桥
                        C_HIN2();                //关断2号上桥
                        _delay_us(4);
                        S_HIN1();                //开1号上桥
                        S_LIN2();                //开2号下桥
                               
                }
                else if(HB_flag==2)
                {
                        C_LIN2();                //关断2号下桥
                        C_HIN1();                //关断1号上桥
                        _delay_us(4);
                        S_HIN2();                //开2号上桥
                        S_LIN1();                //开1号下桥
                        HB_Flag=0;
                }
                else ;
        }

}
发表于 2011-8-22 08:02:03 | 显示全部楼层
mark
发表于 2011-8-24 09:57:20 | 显示全部楼层
挺感兴趣的,希望楼主继续研究
 楼主| 发表于 2011-8-28 15:03:11 | 显示全部楼层
呵呵,多谢~
发表于 2011-10-25 13:12:15 | 显示全部楼层
参考下
头像被屏蔽
发表于 2011-12-25 21:16:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2012-1-30 14:53:46 | 显示全部楼层
mark
发表于 2013-10-29 11:36:54 | 显示全部楼层
mark,路过
发表于 2013-10-29 12:28:04 | 显示全部楼层
mark标记
发表于 2013-12-8 13:17:55 来自手机 | 显示全部楼层
学习一下,謝谢
发表于 2014-6-17 15:50:32 | 显示全部楼层

学习一下,謝谢
发表于 2014-9-3 19:54:12 | 显示全部楼层
很好的样子
发表于 2019-5-19 18:15:27 | 显示全部楼层
mark,学习一下!
友情提示:标题不合格、重复发帖,将会被封锁ID。详情请参考:论坛通告:封锁ID、获得注册邀请码、恢复被封ID、投诉必读
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|阿莫电子论坛(原ourAVR/ourDEV) ( 公安备案:44190002001997(交互式论坛) 工信部备案:粤ICP备09047143号 )

GMT+8, 2019-8-22 11:54

阿莫电子论坛, 原"中国电子开发网"

© 2004-2018 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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