amobbs.com 阿莫电子论坛

 找回密码
 注册
搜索
bottom↓
回复: 12

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

[复制链接]
(280643143)

打赏出0元收入0元

发表于 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 ;
        }

}
(280561012)

打赏出0元收入0元

发表于 2011-8-22 08:02:03 | 显示全部楼层
mark
(280381295)

打赏出0元收入0元

发表于 2011-8-24 09:57:20 | 显示全部楼层
挺感兴趣的,希望楼主继续研究
(280017344)

打赏出0元收入0元

 楼主| 发表于 2011-8-28 15:03:11 | 显示全部楼层
呵呵,多谢~
(275012800)

打赏出0元收入0元

发表于 2011-10-25 13:12:15 | 显示全部楼层
参考下
头像被屏蔽
(269713338)

打赏出0元收入0元

发表于 2011-12-25 21:16:37 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
(266625909)

打赏出0元收入0元

发表于 2012-1-30 14:53:46 | 显示全部楼层
mark
(211514521)

打赏出0元收入0元

发表于 2013-10-29 11:36:54 | 显示全部楼层
mark,路过
(211511451)

打赏出0元收入0元

发表于 2013-10-29 12:28:04 | 显示全部楼层
mark标记
(208052460)

打赏出0元收入0元

发表于 2013-12-8 13:17:55 来自手机 | 显示全部楼层
学习一下,謝谢
(191540903)

打赏出0元收入0元

发表于 2014-6-17 15:50:32 | 显示全部楼层

学习一下,謝谢
(184787083)

打赏出0元收入0元

发表于 2014-9-3 19:54:12 | 显示全部楼层
很好的样子
(36271408)

打赏出0元收入0元

发表于 2019-5-19 18:15:27 | 显示全部楼层
mark,学习一下!
回帖提示: 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号-1 )

GMT+8, 2020-7-12 13:38

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

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