PID控制理论可以进一步提高控制效率,减小过渡时间。
四天三夜的电子设计竞赛告一段落。虽然我们的作品并不完善,还有很多可
以提高的空间,但是在竞赛的参与过程中得到的知识和经验会让我们受益良多。
参 考 文 献
[1] 全国大学生电子设计竞赛组委会.2011年全国大学生电子设计竞赛获奖作品选编[M].北京:北京理工大学出版社,2012
[2] 裴云庆,杨旭,王兆安.开关稳压电源的设计和应用[M].北京:机械工业出版社,2010
[3] [美]Ron Lenk着.王正仕,等译.实用开关电源设计[M].北京:人民邮电出版社,2006
[4] 林云,管春.电力电子技术[M].北京:人民邮电出版社,2012 [5] 马洪涛等.开关电源制作与调试[M].北京:中国电力出版社,2010 [6] 周志敏,纪爱华.开关电源功率因数校正电路设计与应用实例[M].北京:化学工业出版社,2012
[7] 张华宇等.AVR单片机基础与实例进阶[M].北京:清华大学出版社,2012 [8] 老杨,李鹏举.AVR单片机工程师是怎样炼成的[M].北京:电子工业出版社,2012
[9] 沙占友,孟志永. 提高开关电源效率的方法[J]. 电源技术应用,2012.3 [10] 王浩,刘凤新.高精度电网功率因数测量加权插值FFT优化算法[J].计量技术.2008.6
[11] ATMEL.ATmega16数据手册[Z].2003
附录1 总电路图 附录2 元器件清单
Name IR2102 Inductor Bridge1 1N4148 IRF3205 Cap Pol Cap Description Inductor Full Wave Diode Bridge High Conductance Fast Diode N-Channel MOSFET Polarized Capacitor Capacitor Designator U1 L1 D1 D2 Q1 C3, C4 C1, C2 Quantity 1 1 1 1 1 2 2 10uF 0.1uF Value 400uH MBR745 Cap Pol Cap Pol Cap Res2 LM358 Cap Pol1 Cap Pol1 MBR745 Inductor LM2576-5V LCD1602 Atmega16 Min System Default Diode Polarized Capacitor Polarized Capacitor Capacitor Resistor Polarized Capacitor Polarized Capacitor Schottky Diode Inductor Liquid Crystal Display Including 8M crystal D3 C7,C8,C9 C5,C6 C10 R6, R7 U2 C11 C12 D3 L2 U3 1 3 2 1 2 1 1 1 1 1 1 1 1 4700uF 2200uF 0.1uF 10K, 100K 100uF 1000uF 附录3 程序
/******************************************************************************/
/* Name: 电子设计电源题 功能:稳压,电路保护功能 */ /* Designed by : 胡车,蒋睿,张佩小组 Date:2013/9/5 21:09 */
/* 开发环境: ICCAVR */
/* PD0确定键,PD1增加键,PD2菜单键,PD7减小键,PD5输出PWM波,PD6接继电器 */ /* PA0~PA2液晶控制,PB口液晶数据口,PA5采样电压输入,PA6采样电流输入 */ /******************************************************************************/ #include
#define uchar unsigned char #define uint unsigned int
#define Get_Bit(val, bitn) (val &(1<<(bitn)) ) uint addata; uint rec=1;
uchar flag=1;//进入按键中断标志 uchar key_flag=0;//按键标志位 uchar num_flag=0;//数字改变标志 uchar err_flag=0;//出错类型标志 uchar delay_flag=0;//适应电压标志
uint vol_exp=368;//360理想输出电压 uint num1=1,num2=5; uint k1,k2;
uchar cont1[]={\ uchar cont2[]={\ \
uchar temp1[]={\oltage: . V \ A \ %\ float temp1float=0,temp2float=0; uint temp1int=0,temp2int=0; void port_init(void) {
PORTA = 0xf8;//f8 DDRA = 0x07; PORTB = 0x00; DDRB = 0xFF;
PORTC = 0xFF; //m103 output only DDRC = 0x00; PORTD = 0x8F;
DDRD = 0x70; }
//TIMER1 initialize - prescale:1
// WGM: 5) PWM 8bit fast, TOP=0x00FF // desired value: 31.25KHz
// actual value: 31.250KHz (0.0%) void timer1_init(void) {
TCCR1B = 0x00; //stop TCNT1H = 0xFF; //setup TCNT1L = 0x01; OCR1AH = 0x00;
OCR1AL = 0x30;//改变A占空比 OCR1BH = 0x00;
OCR1BL = 0x5E;//改变B占空比 ICR1H = 0x00; ICR1L = 0xFF; TCCR1A = 0xF1;
TCCR1B = 0x09; //start Timer }
/*延时函数*/
void delay_ms(unsigned int xms) {
int i,j;
for(i=0;i for(j=0;j<1140;j++); } } void delay(uint x) { int i,j; for(i=0;i //按下按键后待处理的程序 void key_sol(void)//液晶界面 { flag=0; key_flag=1; LcdInit(); WriteChar(1,0,16,cont1); WriteChar(2,0,16,cont2); WriteNum(2,0,ASCII[num1]); WriteNum(2,2,ASCII[num2]); writecom(0x0f);//开光标显示 writecom(0xc0); while(key_flag!=0) { /*确定按键*/ if(Get_Bit(PIND,PD0)==0) { delay_ms(20); key_flag=key_flag+1; while(!(Get_Bit(PIND,PD0)));//等待按键松开 delay_ms(20); } switch(key_flag) { case 1://调节电流NUM1 /*增加按键*/ if(Get_Bit(PIND,PD1)==0) { num_flag=1; delay_ms(10); num1++; if(num1==10) { num1=9; } WriteNum(2,0,ASCII[num1]); writecom(0xc0); while(!(Get_Bit(PIND,PD1)));//等待按键松开 delay_ms(10); } /*减少按键*/ if(Get_Bit(PIND,7)==0) { num_flag=1; delay_ms(10); num1--; if(num1==0) { num1=1; } WriteNum(2,0,ASCII[num1]); writecom(0xc0); while(!(Get_Bit(PIND,PD7)));//等待按键松开 delay_ms(10); } break; case 2://调节电流NUM2 writecom(0xc2); /*增加按键*/ if(Get_Bit(PIND,PD1)==0) { num_flag=1; delay_ms(10); num2++; if(num2==10) { num2=9; } WriteNum(2,2,ASCII[num2]); writecom(0xc2); while(!(Get_Bit(PIND,PD1)));//等待按键松开 delay_ms(10); } /*减少按键*/ if(Get_Bit(PIND,7)==0) { num_flag=1; delay_ms(10); num2--; if(num2==0) { num2=1; } WriteNum(2,2,ASCII[num2]); writecom(0xc2); while(!(Get_Bit(PIND,PD7)));//等待按键松开 delay_ms(10); } break; case 3: key_flag=0; break; default: key_flag=0; } } } #pragma interrupt_handler int0_isr:iv_INT0 void int0_isr(void) { delay_ms(10); key_sol(); //while(!(Get_Bit(PIND,PD2)));//等待按键松开 delay_ms(10); key_flag=0; flag=1; LcdInit(); } void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer1_init(); MCUCR = 0x02; GICR = 0x40; TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } uint AD_GetData(uint ad_input) { ADMUX|=0x40; //ADC参考电压AVcc ADCSRA|=0x87; //使能ADC,128分频 ADMUX=ad_input; //选择AD转换通道 ADCSRA|=(1< while(!(ADCSRA&(1< /*系统修正*/ void sys_comp() { while(1) { switch (delay_flag) {
相关推荐: