收藏 分享(赏)

全国电子竞赛光伏并网发电.doc

上传人:cw6mk8 文档编号:7091047 上传时间:2019-05-05 格式:DOC 页数:20 大小:230.36KB
下载 相关 举报
全国电子竞赛光伏并网发电.doc_第1页
第1页 / 共20页
全国电子竞赛光伏并网发电.doc_第2页
第2页 / 共20页
全国电子竞赛光伏并网发电.doc_第3页
第3页 / 共20页
全国电子竞赛光伏并网发电.doc_第4页
第4页 / 共20页
全国电子竞赛光伏并网发电.doc_第5页
第5页 / 共20页
点击查看更多>>
资源描述

1、1光伏并网发电模拟装置(A 题)设计报告一、 方案比较与选择系统总体结构框图如图 1 所示电 压 采 样 DC-AC全 桥 逆 变 滤 波输 入 输 出AVR单 片 机隔 离 电 路驱 动 电 路内 部 AD频率采样电 流 采 样相 位 采 样液 晶 显 示图 1 系统总体框图1、电源逆变方案方案一:采用单极性 SPWM 算法,优点是信号等效倍频,在不增加开关损耗的情形下,等到较高的“等效”开关频率,仅需要较小的输出滤波即可得到较好的输出;缺点是需要两路独立的控制信号,计算量较大。方案二:采用规则采样法,通过软件形成一个正弦表,利用软件查表的方式来实现载波与调制波大小的比较,再控制脉宽来生成

2、SPWM 波形。这种方案不仅具有生成的 SPWM 波形最接近正弦波的优点,而且计算量也不大。鉴于 ATMEGA16 较低的运算速度,并且本题对波形失真度的要求并不太高,我们选择方案二。2、最大功率点跟踪方案采用对 、 进行相同比例采样的方法实现最大功率点跟踪,使 紧紧跟 随 的变化而变化,R S 和 RL 在给定范围内变化时,使 ,相对偏差的 dS12U绝对值不大于 1%。3、频率跟踪功能方案方案一:采用频压芯片将采到的频率信号转换为与之成线性关系的电压信号,再将转换后的电压信号送给单片机与给定值比较,进行频率闭环控制。这种方案的优点是对单片机要求低,计算量小,采样速度快,而且频压转换的线性也

3、2较高。方案二:采用单片机队输出波形进行采点计数,通过软件实现频率跟踪,这种方法的计算量较大,对采样频率要求较高。综上所述,根据我们选用的单片机 Atmega16L 的具体特点,再考虑到采样速度和精度的要求,我们选择方案一。4、相位跟踪功能方案方案一:采用锁相环实现。锁相环中的鉴相器利用模拟乘法器来实现,输出利用低通滤波,在两个比较信号为同相电压时,可以得到一个精确的仅与这两个比较信号相位差有关的直流量,再送到单片机中进行比较、处理。这种方案的优点是利用硬件电路即可实现对相位的跟踪,电路简单,但是同时此方案对两个比较信号的同频度要求较高。方案二:采用滞回比较器实现。合理设置滞回比较器参数,将参

4、考正弦信号上升过零点转化为比较器输出方波的下降沿,由单片机采样,将输出电压上升过零点与参考信号上升过零点相同,从而实现开环相位跟随。综合可靠性与硬件调试的具体情况,我们选择方案二实现相位跟随功能。二、理论分析计算及电路设计1、DC-AC 主回路设计与器件选择系统主回路采用 DC-AC 单相全桥逆变电路实现,如图 2 所示。对于主回路DC-AC 变换器,主要计算及器件选择如下:开关器件选择 IRF740(额定电流 10A,耐压达 400V,导通电阻小于 0.55 );缓冲电路二极管采用 FR107,耐压 1000V,允许通过电流 30A,最大反向恢复时间为500ns;缓冲电容根据经验值选择 0.

5、01 F,缓冲电阻选择 5.1 ,3W 的功率电阻。 为防止单片机生成的 SPWM 信号收到主电路的干扰,将驱动信号通过光耦PC817 隔离后输入到 IR2130 高性能集成六输入高压 MOS 栅极驱动器,再加到MOSFET 的栅源极之间。同时利用 IR2130 内部的检测单元可以有效地防止桥路直通现象。3Q1IRF740Diode .uCap52GSUntrlN8mHLcP6图 2 DC-AC 主回路原理图2、滤波电路设计SPWM 波形中包含的谐波主要是载波频率 和 及其附近的谐波,需要采 2用 LC 无源低通滤波电路滤除高次谐波使输出电压为基波分量,即工频正弦波。本系统设定的开关频率为 5

6、KHz,设计滤波器的截止频率应低于 5KHz,即12#include#include#include#include“LCD_string.h“const prog_int16_t sin99=0 , 16 , 33 , 49 , 65 , 81 , 97 ,112 , 126 , 141 , 154 , 167 , 179 , 191 , 202 , 212 , 221 ,229 , 237 , 243 , 248 , 253 , 256 , 258 , 260 , 260 , 259 ,257 , 254 , 251 , 246 , 240 , 233 , 225 , 216 , 207

7、, 197 ,185 , 173 , 161 , 147 , 134 , 119 , 104 , 89 , 73 , 57 ,41 , 25 ,8, -10, -27 , -43 , -59 , -75 , -91 , -106 , -121 , -136 , -149 , -163 , -175 , -187 , -198 , -209 , -218 , -227 ,-235 , -242 , -248 , -253 , -256 , -259 , -261 , -262 , -262 , -260 , -258 , -255 , -250 , -245 , -239 , -231 , -2

8、23 , -214 , -204 ,-193 , -181 , -169 , -156 , -143 , -128 , -114 , -99 , -83 , -67 ,-51 , -35 ,-19 ;#define Fbin 780 /频率典型值 78012#define Ibin 455 /过流典型值 455#define Vlow 315 /低电压临界值 315#define Kv 31 /电压增益 31#define Kf 171 /频率系数 171volatile int top=0x02f8; /计数顶值volatile long Kp=4096; /幅度调制比增益volatile

9、float TVs=0; /实际 Vsvolatile float TVd=0; /实际 Vdvolatile float TIout=0; /实际 Toutvolatile unsigned int Rvoltage=388;/参考电压值volatile float Tfrequency=50.0; /实际频率volatile unsigned char sincount=0;volatile unsigned int Vd=0,frequency=0,Iout=0;volatile long Vs=0;volatile unsigned char ccflag=0;long Ktop=44

10、3200;unsigned char List1=“当前 Us: V“;unsigned char List2=“当前 Ud: V“;unsigned char List3=“输出电流 A“;unsigned char List4=“当前频率 Hz“;void InitDsp(void);void SPWMInit(void);void ADCInit(void);void CCInit(void); /过流恢复void PhaseInit(void);int main()SPWMInit();InitDsp();ADCInit();PhaseInit();CCInit();sei();do_

11、delay_ms(200);TVs=(float)Vs/400*Kv;TVd=(float)Vd/400*Kv;TIout=(float)Iout/40000*139;Tfrequency=(float)frequency/57*5;LCDDspFloat(1,4,TVs);LCDDspFloat(2,4,TVd);LCDDspFloat(3,4,TIout);LCDDspFloat(4,4,Tfrequency);while(1);/*SPWM 初始化*/void SPWMInit(void)13DDRD|=0x30;ICR1=top; /TOP=1490,载波频率为 4.948kHzTCC

12、R1A=0xe0;TCCR1B=0x11; /模式 8、无分频、A 上升匹配置位、B 上升匹配清 0OCR1A=20;OCR1B=20;TIMSK|=0x04; /溢出使能TCNT1=0;/*SPWM 中断服务*/ISR(TIMER1_OVF_vect)static int ram_val;static signed long int temp;ram_val=pgm_read_word(sin+sincount);temp=ram_val;temp=temp*Kp;temp=temp12;temp=temp+(top1);OCR1A=temp;OCR1B=temp+4;sincount+;i

13、f(sincount=98) sincount=0;ICR1=top;/*AD 初始化*/void ADCInit(void)ADMUX=0xc2; /采 2 通道(电压)3 为频率ADCSRA=0xed; /开 AD、开始启动、中断使能、自动触发、64 分频,采样周期4.43KhzSFIOR=0x00;/*AD 中断处理*/ISR(ADC_vect)static unsigned char i=0;unsigned int temp1,temp;static unsigned char Vflag=0;static unsigned char chflag=0;/0,Vs;1,Vd;2,fi

14、nt du;static int sumf=0,sumVs=0,sumVd=0,sumI=0;static int ftemp4=760,760,760,760;if(chflag=0) ADMUX=0xc1;if(chflag=1) ADMUX=0xc2;if(chflag=2) ADMUX=0xc3;if(chflag=3) ADMUX=0xc0;temp1=ADCL;14temp=ADCH;temp=(temp5;Vs=temp;Vs=Vs*1041/1000;Rvoltage=Vs1;if(RvoltageVlow+20)/欠压恢复Vflag=0;DDRD|=0x30;sumVs=0;

15、break;break;case 1:if(i=0) temp=0;sumVd+=temp;i+;if(i=33)i=0;chflag=2;temp=sumVd5;Vd=temp;15sumVd=temp;if(Kp5500) temp=Rvoltage;Kp=5500;du=temp-Rvoltage;Kp+=du;sumVd=0;break;break;case 2:if(i=0) temp=0;sumf+=temp;i+;if(i=33)static signed char ct=0;static unsigned char j=0;i=0;chflag=3;temp=sumf5;fre

16、quency=temp;sumf=Ktop/temp;ftempj=sumf;j+;if(j=4) j=0;if(ftempjFbin+300)|(ftempj(top+2) ct+;if(ftempj2;ct=0;sumf=0;break;16break;case 3:if(i=0) temp=0;sumI+=temp;i+;if(i=33)i=0;chflag=0;temp=sumI5;Iout=temp;if(tempIbin) ccflag=1;DDRD /过流保护sumI=0;break;break;default:break;/*初始显示*/void InitDsp(void)LC

17、Dinit();LCDDspString(1,0,List1);LCDDspString(2,0,List2);LCDDspString(3,0,List3);LCDDspString(4,0,List4);/*过流恢复初始化*/void CCInit(void)TCCR0=0x4d;/1024 分频、快速 PWM、无输出TIMSK|=0x01;/溢出使能OCR0=0xff;TCNT0=0;/*过流恢复*/ISR(TIMER0_OVF_vect)static char count=0;count+;if(count=60)count=0;17ccflag=0;/*相位跟随初始化*/void P

18、haseInit(void)MCUCR=0x02; /int0、1 下降沿触发GICR|=0x40; /0 号中断使能DDRD /PD2 为输入/*相位跟随*/ISR(INT0_vect)static unsigned int temp;sei();_delay_us(50);if(PINDelse if(sincount50)sincount+;elsesincount-;*/temp=sincount;if(sincount43)LCDPOS(X,Y);while(DDataLength)LCDWData(DDataLength);Length+;18/*显示单个字符*/void LCDD

19、spChar(unsigned char X,unsigned char Y,unsigned char DData)LCDPOS(X,Y);LCDWData(DData);/*显示实数(显示形式为 XX.XXX)*/void LCDDspFloat(unsigned char X,unsigned char Y,float DData)unsigned char i,temp5=0,0,0,0,0;DData=DData/10;temp0=(int)DData;for(i=1;i5;i+)DData=(DData-tempi-1)*10;tempi=(char)DData;LCDPOS(X,

20、Y);LCDWData(temp0+0x30);LCDWData(temp1+0x30);LCDWData(.);LCDWData(temp2+0x30);LCDWData(temp3+0x30);LCDWData(temp4+0x30);/*LCM 初始化*/void LCDinit(void)DDRA|=0xf0;/ PORTA/ _delay_ms(10);/ PORTA|=(1LCM_RST); /上电复位LCDCmd(0x30); /基本指令集_delay_ms(10);/ LCDCmd(0x34); /扩充指令集LCDCmd(0x0c); /脱离睡眠模式_delay_ms(10);

21、LCDCmd(0x01); /待命模式_delay_ms(10);LCDCmd(0x06); /_delay_ms(10);/*写显示位置*/void LCDPOS(unsigned char X,unsigned char Y)unsigned char pos;if (X=1)X=0x80;else if (X=2)X=0x90;19else if (X=3)X=0x88;else if (X=4)X=0x98;pos = X+Y;LCDCmd(pos);/*写数据*/void LCDWData(unsigned char WDLCM)unsigned char s0,s1,s2;_del

22、ay_us(100);s0=0xfa;s1=WDLCMs2=WDLCMs2=4;PORTA|=(1LCM_CS);LCDOut(s0,s1,s2);PORTA/*写指令*/void LCDCmd(unsigned char WCLCM)unsigned char s0,s1,s2;_delay_us(100);s0=0xf8;s1=WCLCMs2=WCLCMs2=4;PORTA|=(1LCM_CS);LCDOut(s0,s1,s2);PORTA/*输出数据*/void LCDOut(unsigned char Data0,unsigned char Data1,unsigned char Da

23、ta2)unsigned char i,d;for(i=0;i8;i+)PORTAd=Data0if(d)PORTA|=(1LCM_STD);elsePORTAData0=1;PORTA|=(1LCM_SCK);for(i=0;i8;i+)20PORTAd=Data1if(d)PORTA|=(1LCM_STD);elsePORTAData1=1;PORTA|=(1LCM_SCK);for(i=0;i8;i+)PORTAd=Data2if(d)PORTA|=(1LCM_STD);elsePORTAData2=1;PORTA|=(1LCM_SCK);/*/void LCDFB(unsigned char i)LCDCmd(0x34); /扩充指令集_delay_us(200);LCDCmd(i);_delay_us(200);LCDCmd(0x30);_delay_us(200);/*/void LCDClear(void)LCDCmd(0x01);_delay_ms(10);/*/void LCDChsline(unsigned char line)LCDDspChar(1,0, );LCDDspChar(2,0, );LCDDspChar(3,0, );LCDDspChar(4,0, );LCDDspChar(line-3,0,16);3、测试结果同正文测试结果。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报