UPS不间断电源的研究与设计 软件程序.doc_ups不间断电源设计

2020-02-28 其他范文 下载本文

UPS不间断电源的研究与设计 软件程序.doc由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“ups不间断电源设计”。

流程图

清中断标志位清定时器1读取A/D转换值计算输出电压偏差表指针到最大返回表头表指针加1正半波?正负半波信号置1正负半波信号置0查正弦表计算PWM占空比更新PWM占空比中断返回

图1 CCP1中断服务子程序

算法实现程序

//-----------------------------//

SPWM信号调制

//-----------------------------#include

#include

//系统配置

__CONFIG(HS&PWRTEN&BOREN&PROTECT&WDTEN);//打开看门狗,选择高速晶振,上电延时复位,掉电复位使能,代码保护 //------------------1 //-----------AD1通道转换--------------------void ad_0(){ AN0;

//选择通道0 //延时,采样电容充电 //开启AD //等待AD结束

//结果转存到变量AD_RES_0 DELAY();ADGO=1;

while(ADGO);

ad_res_0=ADRES;} //-----------AD1通道转换--------------------void ad_1(){ AN1;DELAY();ADGO=1;while(ADGO);ad_res_1=ADRES;if(ad_res_1>132){sin_am-=0.005;if((ad_res_1-132)>10)sin_am-=0.04;} else

if((ad_res_1=130))sin_am+=0;else

if(ad_res_110)sin_am+=0.04;} if(sin_am>1.6)sin_am=1.6;} //------------AD2通道转换-------------------void ad_2(){ AN2;DELAY();ADGO=1;while(ADGO);ad_res_2=ADRES;2 } const unsigned char

sin_[]={40,50,73,85,100,113,127,141,157,170,180,189,196,200,203,204, //正半周 204,203,200,195,188,179,169,157,144,129,113,96,78,59,39,15 //负半周};unsigned char sin_num;

//sin函数表查表变量

//------------------void CCP_start(){ CCPR2L=0X0;//设置CCP2,0%的脉宽输出 CCPR1L=0X0;//设置CCP1,0%的脉宽输出 TRISC=0X00;PR2=0Xff;//PORTC are outputs //设置PWM的工作周期,16MHz,PWM周期15.562kHz CCP1M3=1;CCP1M2=1;//CCP1模块PWM模式 CCP2M3=1;CCP2M2=1;//CCP2模块PWM模式 sin_up=1;sin_num=0;sin_am=0;//正负半周SIN函数 //脉宽周期调整计数器 //sin函数的幅值

sin_am=0.3000;//sin函数的幅值 crut_ie=1;} //-------------中断服务程序---------------------void interrupt key_ccp_timer(){ if(TMR2IF&TMR2IE){ TMR2IF=0;//定时器2中断服务函数

if(sin_num==31){sin_num=0;sin_up=!sin_up;} sin_d=sin_[sin_num];

//定时器1中断服务函数 //电流慢保护允许

sin_l=sin_am*sin_d;if(sin_l>=255)sin_l=255;

//限幅

//换向 if(sin_up){CCPR2L=(unsigned char)sin_l;CCPR1L=0;} else {CCPR1L=(unsigned char)sin_l;CCPR2L=0;}

//换向

sin_num++;} CLRWDT();//清除看门狗

if(RBIF&&RBIE){RBIF=0;if((!RB6)&&power_ie)k=1;}

if(TMR1IF&TMR1IE){ TMR1IF=0;tm_sum++;if(tm_sum==31){ tm_sum=0;tmr_s=!tmr_s;tmr_d=1;} } } //-------------------//主程序 main(){ CLRWDT();//清除看门狗

port_init();//端口初始化 init_start();//开机状态 adc_init();//ad通道初始化

//--------------------RC4=0;//继电器关闭 RC3=1;//关闭脉冲封锁

//--------------------TMR1CS=0;//同步模式

//端口b中断服务函数 T1SYNC=0;TMR1H=0XFD;//内部指令周期

TMR1L=0X10;TMR1IE=1;//定时器1初值 //定时器1中断使能

//--------------------------TRISC=0X00;

//端口C输出

TRISC1=TRISC2=1;//RC1,RC2输入模式 PEIE=1;

//外围模块中断使能 //打开定时器2中断使能 //开全局中断

//打开定时器2 TMR2IE=1;GIE=1;

TMR2ON=1;TOUTPS3=0;TOUTPS2=1;TOUTPS1=0;TOUTPS0=0;//定时器2后分频器5分频 TMR1ON=1;power_ie=1;while(1)

{

CLRWDT();if(k){

DELAY();DELAY();DELAY();DELAY();DELAY();DELAY();DELAY();DELAY();DELAY();DELAY();DELAY();DELAY();if(k&&RB6){k=0;power=!power;} if(power){

} power_ie=0;//开关间隔开始计时 RC3=0;RC4=1;

//打开脉冲封锁 //打开继电器

//开机

//开关机标志

//延时 //延时 //清除看门狗

//打开定时器1 //允许开机

CCP_start();//开始SPWM 5

} if(!power){

}

//关机

power_ie=0;//开关间隔开开始计时 crut_if=0;//电流保护标志清零 volue_if=0;//电池电压保护标志清零 RC3=1;

//关闭脉冲封锁

//复位CCP模块 CCP2CON=0;CCP1CON=0;RC2=RC1=0;RC4=0;

//置端口固定电平

//关闭继电器

//------输出电流检测------

if(power_up){

if(ad_res_0>=204){ crut_if=1;crut_tmr=0;crut_ie=0;

}

//高于2v电流慢保护

//电流高于4v,快保护

if((ad_res_0>=102)&&(ad_res_0

if(tmr_s&&tmr_d&&crut_ie){

} tmr_d=0;crut_tmr++;if(crut_tmr==10){ }

//时基,时基变化标志,保护允许

crut_tmr=0;crut_ie=0;crut_if=1;//保护 } if(ad_res_0

if(ad_res_2>=102){L1_OFF;if(volue_if);} //电池电压大于2v,if((ad_res_2=91))//电池低于2v大于1.8v if(ad_res_2

} //-----模拟采集

}

} if(power)ad_1();//在开机状态下检测反馈电压 ad_2();ad_0();//采集电池电压 //采集电流

if(power_ie==0)//开关机时间间隔 {

} if(power_up==0)//上电延时1秒检测电池电压 {

} if(tmr_s&&tmr_d){tmr_d=0;power_up_s++;} if(power_up_s==1){power_up_s=0;power_up=1;} if(tmr_s&&tmr_d){tmr_d=0;power_s++;} if(power_s==10){power_s=0;power_ie=1;} 7

《UPS不间断电源的研究与设计 软件程序.doc.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
UPS不间断电源的研究与设计 软件程序.doc
点击下载文档
相关专题 ups不间断电源设计 设计 不间断电源 程序 ups不间断电源设计 设计 不间断电源 程序
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文