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

上传人:b****5 文档编号:28445397 上传时间:2023-07-13 格式:DOCX 页数:9 大小:32.71KB
下载 相关 举报
UPS不间断电源研究与设计软件程序doc.docx_第1页
第1页 / 共9页
UPS不间断电源研究与设计软件程序doc.docx_第2页
第2页 / 共9页
UPS不间断电源研究与设计软件程序doc.docx_第3页
第3页 / 共9页
UPS不间断电源研究与设计软件程序doc.docx_第4页
第4页 / 共9页
UPS不间断电源研究与设计软件程序doc.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

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

《UPS不间断电源研究与设计软件程序doc.docx》由会员分享,可在线阅读,更多相关《UPS不间断电源研究与设计软件程序doc.docx(9页珍藏版)》请在冰豆网上搜索。

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

UPS不间断电源研究与设计软件程序doc

流程图

图1CCP1中断服务子程序

算法实现程序

//------------------------------------------------------------b5E2RGbCAP

//SPWM信号调制

//------------------------------------------------------------p1EanqFDPw

#include

#include

//系统配置

__CONFIG(HS&PWRTEN&BOREN&PROTECT&WDTEN>。

//打开看门狗,选择高速晶振,上电延时复位,掉电复位使能,代码保护

//-------------------------------------------------DXDiTa9E3d

//-----------AD1通道转换--------------------

voidad_0(>

{

AN0。

//选择通道0

DELAY(>。

//延时,采样电容充电

ADGO=1。

//开启AD

while(ADGO>。

//等待AD结束

ad_res_0=ADRES。

//结果转存到变量AD_RES_0

}

//-----------AD1通道转换--------------------

voidad_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。

}RTCrpUDGiT

else

if((ad_res_1<=132>&&(ad_res_1>=130>>sin_am+=0。

else

if(ad_res_1<130>{sin_am+=0.005。

if((130-ad_res_1>>10>sin_am+=0.04。

}5PCzVD7HxA

if(sin_am>1.6>sin_am=1.6。

}

//------------AD2通道转换-------------------

voidad_2(>

{

AN2。

DELAY(>。

ADGO=1。

while(ADGO>。

ad_res_2=ADRES。

}

constunsignedchar

sin_[]={40,50,73,85,100,113,127,141,157,170,180,189,196,200,203,204,//正半周jLBHrnAILg

204,203,200,195,188,179,169,157,144,129,113,96,78,59,39,15//负半周xHAQX74J0X

}。

unsignedcharsin_num。

//sin函数表查表变量

//-------------------------------------------------LDAYtRyKfE

voidCCP_start(>

{

CCPR2L=0X0。

//设置CCP2,0%的脉宽输出

CCPR1L=0X0。

//设置CCP1,0%的脉宽输出

TRISC=0X00。

//PORTCareoutputs

PR2=0Xff。

//设置PWM的工作周期,16MHz,PWM周期15.562kHz

CCP1M3=1。

CCP1M2=1。

//CCP1模块PWM模式

CCP2M3=1。

CCP2M2=1。

//CCP2模块PWM模式

sin_up=1。

//正负半周SIN函数

sin_num=0。

//脉宽周期调整计数器

sin_am=0。

//sin函数的幅值

sin_am=0.3000。

//sin函数的幅值

crut_ie=1。

//电流慢保护允许

}

//-------------中断服务程序---------------------

voidinterruptkey_ccp_timer(>//定时器1中断服务函数

{

if(TMR2IF&TMR2IE>{

TMR2IF=0。

//定时器2中断服务函数

if(sin_num==31>{sin_num=0。

sin_up=!

sin_up。

}

sin_d=sin_[sin_num]。

sin_l=sin_am*sin_d。

if(sin_l>=255>sin_l=255。

//限幅

if(sin_up>{CCPR2L=(unsignedchar>sin_l。

CCPR1L=0。

}//换向Zzz6ZB2Ltk

else

{CCPR1L=(unsignedchar>sin_l。

CCPR2L=0。

}//换向

sin_num++。

}

CLRWDT(>。

//清除看门狗

if(RBIF&&RBIE>{RBIF=0。

if((!

RB6>&&power_ie>k=1。

}//端口b中断服务函数dvzfvkwMI1

if(TMR1IF&TMR1IE>{

TMR1IF=0。

tm_sum++。

if(tm_sum==31>{

tm_sum=0。

tmr_s=!

tmr_s。

tmr_d=1。

}

}

}

//--------------------------------------------------rqyn14ZNXI

//主程序

main(>

{

CLRWDT(>。

//清除看门狗

port_init(>。

//端口初始化

init_start(>。

//开机状态

adc_init(>。

//ad通道初始化

//---------------------------------------------------EmxvxOtOco

RC4=0。

//继电器关闭

RC3=1。

//关闭脉冲封锁

//---------------------------------------------------SixE2yXPq5

TMR1CS=0。

//同步模式

T1SYNC=0。

//内部指令周期

TMR1H=0XFD。

TMR1L=0X10。

//定时器1初值

TMR1IE=1。

//定时器1中断使能

//---------------------------------------------------------6ewMyirQFL

TRISC=0X00。

//端口C输出

TRISC1=TRISC2=1。

//RC1,RC2输入模式

PEIE=1。

//外围模块中断使能

TMR2IE=1。

//打开定时器2中断使能

GIE=1。

//开全局中断

TMR2ON=1。

//打开定时器2

TOUTPS3=0。

TOUTPS2=1。

TOUTPS1=0。

TOUTPS0=0。

//定时器2后分频器5分频kavU42VRUs

TMR1ON=1。

//打开定时器1

power_ie=1。

//允许开机

while(1>

{

CLRWDT(>。

//清除看门狗

if(k>{

DELAY(>。

DELAY(>。

DELAY(>。

DELAY(>。

DELAY(>。

DELAY(>。

//延时y6v3ALoS89

DELAY(>。

DELAY(>。

DELAY(>。

DELAY(>。

DELAY(>。

DELAY(>。

//延时M2ub6vSTnP

if(k&&RB6>{k=0。

power=!

power。

}//开关机标志

if(power>//开机

{

power_ie=0。

//开关间隔开始计时

RC3=0。

//打开脉冲封锁

RC4=1。

//打开继电器

CCP_start(>。

//开始SPWM

}

if(!

power>//关机

{

power_ie=0。

//开关间隔开开始计时

crut_if=0。

//电流保护标志清零

volue_if=0。

//电池电压保护标志清零

RC3=1。

//关闭脉冲封锁

CCP2CON=0。

CCP1CON=0。

//复位CCP模块

RC2=RC1=0。

//置端口固定电平

RC4=0。

//关闭继电器

}

}

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

if(power_up>

{

if(ad_res_0>=204>//电流高于4v,快保护

{

crut_if=1。

crut_tmr=0。

crut_ie=0。

}

if((ad_res_0>=102>&&(ad_res_0<204>>//高于2v电流慢保护

{

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<102>//电流正常低于2v

{

crut_tmr=0。

L2_OFF。

if(crut_if>。

}

//------电池电压检测------

if(ad_res_2>=102>{L1_OFF。

if(volue_if>。

}//电池电压大于2v,if((ad_res_2<102>&&(ad_res_2>=91>>//电池低于2v大于1.8v0YujCfmUCw

if(ad_res_2<92>//电池低于1.8v

{

volue_if=1。

}

}

//-----模拟采集

if(power>ad_1(>。

//在开机状态下检测反馈电压

ad_2(>。

//采集电池电压

ad_0(>。

//采集电流

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

{

if(tmr_s&&tmr_d>{tmr_d=0。

power_s++。

}

if(power_s==10>{power_s=0。

power_ie=1。

}

}

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。

}

}

}

}

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

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1