世纪电源网社区logo
社区
Datasheet
标题
返回顶部
原创 2018 长园维安• 电源原创 DIY 设计分享大赛

16W LED灯具应急电源

[复制链接]
查看: 2149 |回复: 7
1
wxid21
  • 积分:20
  • |
  • 主题:1
  • |
  • 帖子:4
积分:20
LV1
本网技工
  • 2018-5-17 11:16:19
单片机驱动低压大电流场效应管在消防应急灯推诿逆变器中的运用。
执行国标GB17945-2010
逆变功率18W ?工作2小时 场效应管50度


一、充电控制
   1.电池为定压充电,达到4.2V后停止充电
   2.电池电压回落后到4V以下,开始充电,达到4.2停止,循环进行。
   3.充电回路开通充电时,红色LED常亮,充电主回路关闭时,红色LED熄灭;
二、 放电控制
   1. 应急放电状态下,电池电压降至额定电压(7.4V的)≧80%时,应急终止;
   2. 应急终止后电路静态泄放电流为0。

三、转换电压控制
   1.对主电电压检测,实现主电→应急→主电切换,切换时间小于5秒。
   2. 市电电压降至132V--165V的某一点,可进入应急状态,应急状态下所有指示LED熄灭,按键只有强制应急停止功能。
   3.市电电压回升至160V—187V的某一点,应急关断,恢复正常主电工作状态。

四、 过充电保护、充电回路开路和短路检测与保护
   1. 过充电保护;
   2. 主电时对充电回路开路、短路检测;
   3. 充电回路开路、短路时红色LED熄灭,黄色LED按1Hz频率闪亮;

五、状态指示灯:充电红色LED、主电绿色LED、故障黄色LED
(1) 主电绿色LED
   1.接通主电绿色LED亮,断开主电绿色LED熄灭
   2.月自检测闪烁(1Hz)
   3.年自检测闪烁(3Hz)

(2)充电红色LED
   1.充电主回路开通,充电红色LED亮,
   2.充电主回路关闭,转入涓流状态时充电红色LED熄灭;

(3) 故障黄色LED
   1.充电端开路、短路故障                              故障黄灯闪烁(1Hz)
   2.光源开路故障时(非持续型有该功能)    故障黄灯闪烁(3Hz)
   3.月、年自检不能完成                                      故障黄灯常亮

(4) 自检功能
在接通主电48小时后系统自动进入计时状态;每隔30天(误差不大于2天),自动进行一次模拟断电,使系统进入应急状态60秒,然后自动恢复到主电工作状态;检测系统应急功能是否正常。

系统进入自检状态时绿色状态指示灯按1 HZ频率闪烁;
不能进入自检状态或进入自检状态但自检应急时间小于60秒,进行声、光报警,故障声信号(正前方1米处)65 dB—85dB,每分钟提示3次,每次持续时间2秒,黄色故障指示灯常亮。

系统在计时状态下,每隔365天(误差不大于24天),自动进行一次模拟断电,使系统进入应急状态并持续至放电终止,然后自动恢复到主电工作状态;检测系统放电时间是否满足>30分钟的要求。

系统进入自检状态时绿色状态指示灯按3 HZ频率闪烁;
不能进入自检状态或进入自检状态但自检应急时间<30分钟放电时间进行声、光报警,故障声信号(正前方1米处)65 dB—85dB,每分钟提示3次,每次持续时间在2秒,黄色故障指示灯常亮。

系统在光源或电池故障状态下,不能进入自检状态,此时发出声、光报警;排除故障后接通主电,系统自动恢复至正常工作状态。

(5) 试验开关:模拟主电故障、手动月自检与手动年自检
   1.按试验开关按键小于3秒系统进入模拟主电故障状态,所有状态指示灯熄灭,放开按钮恢复主电状态。
  
   2. 按键不要松开,连续按键≥3S且<5S时蜂鸣器“滴”响起,此时松开按键,系统进入模拟月自检状态;系统进入自检状态时绿色状态指示灯按1 HZ频率闪烁,若系统正常60S后恢复至主电正常工作状态;
       不能进入自检状态或进入自检状态但自检应急时间<60S,10S内进行声、光报警,故障声信号(正前方1米处)65 dB—85dB,每分钟提示3次,每次持续时间2S,黄色故障指示灯常亮;
   
   3. 按键不要松开,连续按键≥5S时蜂鸣器“滴”响停止,此时松开按键,系统进入模拟年检状态;系统进入自检状态时绿色状态指示灯按3 HZ频率闪烁,若系统正常,放电至电池保护电压后恢复至主电正常工作状态;
       不能进入自检状态或进入自检状态但自检应急时间<30分钟, 10S内进行声、光报警,故障声信号(正前方1米处)65 dB—85dB,每分钟提示3次,每次持续时间在2秒,黄色故障指示灯常亮;
   
   4. 系统在光源或电池故障状态下,不能进入自检状态,此时发出声、光报警;排除故障后接通主电,系统自动恢复至正常工作状态。
   
   5. 手动自检不影响自动自检日期计时。如系统断电,应急工作至放电终止后,在接通电源后重新开始日期计时。

(6) 重复转换试验:应能连续完成至少50次“主电状态1min→应急状态20s→主电状态1 min”的工作状态循环。

(7) 应急强制关闭按键:应急状态下,按住按键>6S可强制应急停止;

六、光源:LED

七、电池规格:7.4V/4400mAh
电路图:




收藏收藏6
FHXWT
  • FHXWT
  • 离线
  • LV8
  • 副总工程师
  • 积分:8199
  • |
  • 主题:1
  • |
  • 帖子:634
积分:8199
LV8
副总工程师
  • 2018-5-17 11:17:18
  • 倒数7
 
不错不错v  关注一下
wxid21
  • 积分:20
  • |
  • 主题:1
  • |
  • 帖子:4
积分:20
LV1
本网技工
  • 2018-5-17 11:19:55
  • 倒数6
 
单片机程序
18WLED灯管的应急电源  锂电池7.4V 4400 MA 不带保护板
#include<KF8F213.h>
//__sfr  __at(0x2007) CONFIG =0x04C8;
unsigned int ADC_Buf;
unsigned int ADC_Res;
unsigned int SumOfAd;
unsigned int ADC_TEMP;
void ADC(void);
void BJQ(void);
void PWM(void);
void ClosePWM(void);
unsigned long microse;     //微秒单元2字节变量;
unsigned char annuijis;    //按钮计时变量
unsigned char baojingjis;  //报警计时变量
unsigned char lvdjis1;     //1hz计时变量
unsigned char lvdjis3;     //3hz指示灯计时变量
unsigned int zijianjis;    //自检计时变量
unsigned char ms50;        //50毫秒
unsigned char yingjjs1;    //
unsigned char yingjjs2;    //
unsigned int second;
unsigned int hour;
unsigned char yue;
unsigned int YANS;
unsigned int YANS1;
unsigned int YANS2;
void chushihua(void);    //声明初始化子程序
void shizhong(void);     //声明时钟子程序
void yanshi(void);       //声明延时子程序
void baojing(void);      //声明报警子程序
void shurupanduan(void); //声明输入判断子程序
void anniu(void);        //声明按钮子程序
void yingjl(void);
void yingjm(void);
void ADC1(void);

union
{
        struct
        { //定义位变量于同一字节
                unsigned bit0 :1;
                unsigned bit1 :1;
                unsigned bit2 :1;
                unsigned bit3 :1;
                unsigned bit4 :1;
                unsigned bit5 :1;
                unsigned bit6 :1;
                unsigned bit7 :1;
        } onebit;
        unsigned char allbits;
} GP;


struct bitDefine0
{
        unsigned bit0 :1;
        unsigned bit1 :1;
        unsigned bit2 :1;
        unsigned bit3 :1;
        unsigned bit4 :1;
        unsigned bit5 :1;
        unsigned bit6 :1;
        unsigned bit7 :1;
} K;
#define K0 (K.bit0)    //K0应急标号
#define K1 (K.bit1)           //K1自检动作
#define K2 (K.bit2)           //报警2秒标号
#define K3 (K.bit3)           //报警20秒标号
#define K4 (K.bit4)    //故障标号
#define K5 (K.bit5)    //关灯标号
#define K6 (K.bit6)           //闪烁标号
#define K7 (K.bit7)           //闪烁标号
//------------------------------------------------------------
struct bitDefine1
{
        unsigned bit0 :1;
        unsigned bit1 :1;
        unsigned bit2 :1;
        unsigned bit3 :1;
        unsigned bit4 :1;
        unsigned bit5 :1;
        unsigned bit6 :1;
        unsigned bit7 :1;
} YY;
//然后我们用宏定义的方法将我们需要的位名称赋予相对应的位。如:
#define YY0 (YY.bit0)  //电池电压充满标号
#define YY1 (YY.bit1)  //按钮按下3秒
#define YY2 (YY.bit2)  //按钮按下5秒
#define YY3 (YY.bit3)  //应急关灯标号,关灯电压到或者按钮按下7秒
#define YY4 (YY.bit4)  //48小时计时标号
#define YY5 (YY.bit5)  //16小时充电标号
#define YY6 (YY.bit6)  //月自检动作
#define YY7 (YY.bit7)  //年自检动作
//-------------------------------------------------------------
struct bitDefine2
{
        unsigned bit0 :1;
        unsigned bit1 :1;
        unsigned bit2 :1;
        unsigned bit3 :1;
        unsigned bit4 :1;
        unsigned bit5 :1;
        unsigned bit6 :1;
        unsigned bit7 :1;
} X;
//然后我们用宏定义的方法将我们需要的位名称赋予相对应的位。
#define X0 (X.bit0)    //自检计时秒标号
#define X1 (X.bit1)           //自检计时秒标号
#define X2 (X.bit2)           //自检计时标号
#define X3 (X.bit3)           //应急动作标号
#define X4 (X.bit4)    //光源开路计时标号
#define X5 (X.bit5)
#define X6 (X.bit6)
#define X7 (X.bit7)
//MCU引脚  1.Vcc 2.空 3.空 4.按钮 5.推诿PWM输出  6.推诿PWM输出  7.ADC电池电压测量
//8.蜂鸣器 9.红指示灯 10 应急供电 11.电池充电 12.电流反馈 13.主电检测 14.绿15.黄。
#define hongd        P26//红灯
#define huangd        P00//黄灯
#define lvd            P01//绿灯
#define fengm        P27//蜂鸣器
#define yjgd        P25//应急供电
#define ann            P03//按钮
#define zdsu        P02//主电输入
#define cdsc        P11//充电输出

#define  _nop_()          __asm NOP  __endasm
///////////////////初始化////////////////////////////////////////
void init(void)
{
        INTCTL = 0;          //关闭中断
//--------IO口---------------------------------

        TR2 = 0B00000000; //GJ
        P2 = 0X00;

        TR0 = 0B00001100; //GJ
        P0 = 0X00;

        TR1 = 0B00001001; //GJ
    P1 = 0X00;
        //-----------------------------
    OSCCTL = 0b01100000; //主频设置 rc8M

    ANSEL = 0B10010000; //设置模拟通道AN7模拟输入口
  // ANSEH = 0B00000000; //设置模拟通道

        ADCCTL0 = 0B10011101; //右对齐,AN7为模拟通道,参考电压为  VDD  ADC 使能
        ADCCTL1 = 0B01010000; // 转换时钟101 FOSC/16
        //....adc............................
        AMPCTL = 0; //禁止运放

        CMCTL0 = 0B00000000;
        //CMCTL1 = 0B00000011; //开比较器,11 = 1/2VDD作为CMP1的负端输入
        CMCTL1 = 0B00000000;
        //----PWM----------------------------
        PP2 = 60; //pp2=31-60khz
        //PWM2L = 50;
        PWMCTL = 0b11000000;
        T1CTL = 0b00000001;
        T1L = 0;
        T1H = 0;
    //-----PWM3---------------------------------
    PWM3CTL1 = 0X02; //死区时间
    PP3 = 0X46;   //设置周期 28K
    PWM3L = 0X23; //设置占空比

        //----------T0定时器-------------------------
        OPTR = 0B10000100; // T0模式 预分频为1:32
        EIE1 =0X00;
        INTCTL = 0B11110000; //中断控制


        GP.onebit.bit0 = 1;
        GP.onebit.bit1 = 0;
        GP.onebit.bit2 = 1;
        GP.onebit.bit3 = 1;
        GP.onebit.bit4 = 0;

        K0 = 0;
        K1 = 0;
        K2 = 0;
        K3 = 0;
        K4 = 0;
        K5 = 0;
        K6 = 0;
        K7 = 0;

        YY0 = 0;
        YY1 = 0;
        YY2 = 0;
        YY3 = 0;
        YY4 = 0;
        YY5 = 0;
        YY6 = 0;
        YY7 = 0;


        X0 = 0;
        X1 = 0;
        X2 = 0;
        X3 = 0;
        X4 = 0;
        X5 = 0;
        X6 = 0;
        X7 = 0;

        ms50 = 0;
        second = 0;
        hour = 0;
        yue = 0;        //月归零
        annuijis = 0;   //按钮计时加一
        baojingjis = 0; //报警计时加一
        zijianjis = 0;  //自检计时加一

        microse = 0;    //微秒单元2字节变量;
        lvdjis1 = 0;    //1hz计时变量
        lvdjis3 = 0;    //3hz指示灯计时变量

        yingjjs1 = 0;   //
        yingjjs2 = 0;   //
        YANS = 0;
        YANS1 = 0;
        YANS2 = 0;
//-------------------------------------------

}
///////////////////////////////////////////////////////////////////////
void ADC(void)
{
        unsigned char ad_convert_times; //8次 求平均
        SumOfAd = 0;
        ADC_Res = 0;
        ADC_Buf = 0;
        ADC_TEMP = 0;
        for (ad_convert_times = 0; ad_convert_times < 8; ad_convert_times++)
        {
                START = 1; //启动ADC
                while (START)
                {
                        _NOP();
                }

                ADC_Res = ADCDATAL; //读取ADC低8位结果值
                ADC_Res |= ADCDATAH << 8; //高4位数据左移8次与低8位数据相加,存储在AD_Result中
                SumOfAd += ADC_Res;
                    _NOP();
        }
        ADC_Buf = SumOfAd >> 3;
//------------------------------数据判断---------------------//
        if (GP.onebit.bit2)
        { //主电时的判断
        if (ADC_Buf < 300)        //电池电压低于1V 测量0.5V
        GP.onebit.bit0 = 0;   //电池短路标号
        else GP.onebit.bit0 = 1;  //电压高压1V ,消短路标号
                if (ADC_Buf > 889)    //电池电压高于8.4V测量4.2V 电池开路VDD4.95
                GP.onebit.bit1 = 1; //电池开路标号

                if (ADC_Buf < 875)
                GP.onebit.bit1 = 0; //电压正常消开路标号

                if (ADC_Buf > 869)      //电池电压8.4V电池充满 ,实际测量
            YY0=1;
                if(GP.onebit.bit0){     //没有电池短路
                if (ADC_Buf < 849)      //电池电压低于电池充电
                        YY0=0;
                                  }
        }
        if (CHS0)       //--------电池电压检测-----
        {
                if (X3)  //应急动作标号X3
                {
                        if(X5){   //应急动作后延时2秒钟测电压
                        if (ADC_Buf < 620) //电压低于655  6.5V关掉
                        {
                                GP.onebit.bit4 = 1;
                                YY3 = 1;
                        }                  //电池没电标号 关灯
                        else
                        {
                                GP.onebit.bit4 = 0;
                        }
                              }
                }
        }
        if (CHS0==0)
        {
                if (X3)  //应急动作标号X3
                   {
                        if (ADC_Buf < 3)  //16w        led荧光灯  18处在临界 电流2.2A
                        { X4 = 1; //
                          P05=1; }
                        else
                        { X4 = 0;       //应急工作正常 标号归零
                          P05=0; }
           }
        }

//-----------------------------通道切换----------//
        if (X3)   //应急动作标号X3
        {
                if (CHS0)
                        ADCCTL0 = 0B10010001; //右对齐,AN4为模拟通道,应急电流通道
                else
                        ADCCTL0 = 0B10011101; //右对齐,AN7为模拟通道,电池通道
        }
        else                          //没有应急标号 主电测电池
                ADCCTL0 = 0B10011101;     //右对齐,AN7为模拟通道,电池通道
}

//////////////////////中断程序///////////
void INT_FUN()
__interrupt //定时中断
{
        if(T0IF) //判断tmr0中断
        {
                T0IF=0; //清除中断标志位
                microse+=4096;//加上一次中断时间
                if(zdsu)
                        GP.onebit.bit2=1;//主电标号
                else
                        GP.onebit.bit2=0;
                if(ann)
                        GP.onebit.bit3=1;//按钮标号
                else
                        GP.onebit.bit3=0;
                //----------------------------------------
        }
        if(INT0IF) //判断是否是外部中断,停电立即开应急
        {
                INT0IF=0;
        //        if(YY3==0)
        //        {
                            yjgd = 1;     //应急供电打开
                            T2ON = 1;     //打开T2
                                PWM3CTL0=0X8C;  //输出PWM3
                         GP.onebit.bit2=0;//清主电标号
        //        }
        }
}
//////////////////////时钟子程序/////////////////////
void shizhong(void) //
{
        if (microse > 50000)
         {
        microse -= 50000;
        ms50++;
        lvdjis1++;
        lvdjis3++;
         }
        if (ms50 > 20)
            {
        ms50 = 0;
        second++; //秒计时加一
        if(X3)
        {
                YANS2++;
                if(YANS2 > 2)
                X5=1;
        }
        else {
                  YANS2=0;
                  X5=0;
              }

        if (X4) YANS++; //应急光源开路动作计时

        else YANS = 0;

        if (YANS > 2){
                YY3 = 1;      //光源开路3秒 后关灯    --光源电流检测--
            K5 = 1;
                      }
//------------------------------------------------
        if (GP.onebit.bit4) //电池电压低关灯标号
        {
                YANS1++;
                if (YANS1 > 2)
                        K5 = 1;
        }
        else
                YANS1 = 0;
//----------------------------------------------------
        if (GP.onebit.bit3 == 0) //按钮按下
                annuijis++; //按钮计时加一
        baojingjis++; //报警计时加一
        zijianjis++; //自检计时加一
            }
        if (second >3600)
                {
        second = 0;
        hour++;
        if (YY4 == 0)     //检测计时标号48小时到否
        {
                //if (hour == 16)
                //        YY5 = 1;  //看16小时充电计时到否,到置充满标号Y5
                if (hour >48)
                     {
                YY4 = 1;      //置开始计时标号
                YY5 = 0;
                hour = 0;     //小时归零
                second = 0;
                ms50 = 0;
                     }
        }

        if(YY7==0){
           if(hour>720) //1个月等于  24*30=720小时
                    {
           hour=0;               //小时归零
           YY6=1;                //置月自检标号
           yue++;
                    }
                  }             //
           if(yue>12)  //年自检等于12个月
                    {
           yue=0;
           YY6=0;                //月归零
           YY7=1;                //置年自检标号
                    }
                }
}
/////////////////////////计时程序///////////////////////////
void jishi(void)
{
        if (annuijis == 7)
                YY3 = 1; //按钮安下7秒到置Y3 为1
        if (annuijis == 5)
                YY2 = 1; //按钮安下5秒到置Y2 为1
        if (annuijis == 3)
                YY1 = 1; //按钮安下3秒到置Y1 为1
        if (K4 == 0) //故障标号
        {
                baojingjis = 0;
                K3 = 0;
                K2 = 0;
        } //没有故障标号,计时器,各标号归零FP54=0;
        if (baojingjis == 20)
                K3 = 1; //到20秒置报警发声20秒标号K3
        if (baojingjis == 2)
                K2 = 1; //到2秒置报警发声2秒标号K2
        if (K1)
        {
                if (zijianjis == 1800)
                        X2 = 1; //到30分钟 自检记时30分钟标号
                if (zijianjis == 60)
                        X1 = 1; //到1分钟  自检记时1分钟标号
                if (zijianjis == 1)
                        X0 = 1; //到1秒钟  自检记时1秒钟标号
        }
        else
        {
                X0 = 0;
                X1 = 0;
                X2 = 0;
                zijianjis = 0;
        }
//--------------------------------------指示灯闪烁
        if (lvdjis3 == 3) //指示灯3HZ闪烁时间50MS*3
        {
                lvdjis3 = 0;  //到计时器清零,闪烁标志位取反
                if (K7)
                        K7 = 0;
                else
                        K7 = 1;
        }

        if (lvdjis1 == 10) //指示灯1HZ闪烁时间50MS*10
        {
                lvdjis1 = 0;   //到计时器清零,闪烁标志位取反
                if (K6)
                        K6 = 0;
                else
                        K6 = 1;
        }

}
////////////////////////////////////////////////////
void huangd3hz(void)
{
        if (K7)
        {
                huangd = 1;
        } //k7是3HZ
        else
        {
                huangd = 0;
        }
}
///////////////////////////////////////////////////
void huangd1hz(void)
{
        if (K6)
        {
                huangd = 1;
        } //k6是1hz
        else
        {
                huangd = 0;
        }
}
//////////////////////////////////////////////////
void lvd3hz(void)
{
        if (K7)
                lvd = 1;
        else
                lvd = 0;
}
//////////////////////////////////////////////////
void lvd1hz(void)
{
        if (K6)
                lvd = 1;
        else
                lvd = 0;
}

void anniu1(void)    //按钮按下的处理子程序
{                //
if(GP.onebit.bit3==1)return;  //按钮没按下返回
if(K4==1)return;     //有K4故障标号,退出
yingjl();
if(YY2==1)           //计时5秒到否
{fengm=0;             // 到停提示音
}
else                  //计时5秒没到
{if(YY1==0)return;   //看计时3秒到否,没到返回
fengm=1;             //3秒到启动提示音
}
}
////////////////////////////////////////////////////
void anniu2(void)    //按钮弹起的处理子程序
{
if(GP.onebit.bit3==0)return;   //按钮在按下时退出
if(YY7==1)return;    //有年自检标号退出
if(YY6==1)return;    //有月自检标号退出
if(K4==1)return;     //有K4故障标号退出
fengm=0;            //停止发声
if(YY2==0){
            if(YY1==0)yingjm();
            else YY6=1;
          }
else YY7=1;
YY1=0;
YY2=0;
YY3=0;
annuijis=0;
}
//////////////////////////////////////////////////
void yuezij(void)  //-----------------月自检
{
        K1 = 1;        //置自检标号
        lvd1hz();      //
        if (K5 )       //亮黄灯,调报警
        {
                yingjm();
                huangd = 1;
                baojing();
        }
        else
        {
                if (X1)       //自检记时1分钟标号
                {
                        YY6 = 0;  //月自检标号
                        K1 = 0;   //清自检标号
                }
                else
                {
                        yingjl();
                }
        }
}
//////////////////////////////////////////////////////
void nianzij(void) //-----------------年自检
{
        K1 = 1; //自检标号
        lvd3hz(); //自检指示
        if (K4) //亮黄灯,调报警
        {
                yingjm();
                huangd = 1;
                baojing();
        }
        else//没有故障标号
        {
                if (X2)
                {
                        if (K5)
                        {
                                YY7 = 0;  //年自检标号归零
                                K1 = 0;   //自检标号归零
                                YY4 = 0;  //48小时充电标号归零
                                YY5 = 0;  //充电标号为零
                                hour = 0; //小时归零
                                K5=0;
                        }
                        else
                        {
                                yingjl();
                        }
                }
                else //30分钟没到
                {
                        if (K5)//亮黄灯,调报警
                        {
                                yingjm();
                                huangd = 1;
                                baojing();
                        }
                        else//没到关灯电压 亮灯
                        {
                                yingjl();
                        }
                }
        }
}
//////////////////////报警声程序//////////////////////////
void baojing(void)
{
        K4 = 1;
        if (K3)
        {
                K2 = 0;
                K3 = 0;
                baojingjis = 0;
        }
        else
        {
                if (K2)
                        fengm = 0;
                else
                        fengm = 1;
        }
}
/////////////////指示灯///////////////////////////////////
void CD(void)
{
        if (K1)
                return; //按钮按下退出
        if(GP.onebit.bit3 == 0)
                return; //按钮按下退出
        if(X3==1)
                return; //应急动作退出
        lvd = 1;
        //if (YY5==0)     //充电时间标号,到设定时间YY5为1
        //{
                if(YY0){
                PWM2ON = 0;   //关闭充电的PWM
                cdsc = 0;     //下啦端口
                hongd = 0;          //红灯灭
                       }

                else {
                        PWM2ON = 1;   //关闭充电的PWM
                        PWM2L = 60;
                        hongd = 1;          //红灯亮
                     }
        //}
//--------------------故障判断--------------------------------------
/*
        if (GP.onebit.bit0)
        {
                if (GP.onebit.bit1 == 0)
                {
                        K4 = 0;
                        huangd = 0;
                        return;
                }
        }

        PWM2ON = 0;   //关闭充电的PWM
        cdsc = 0;     //下啦端口
        huangd1hz();
        baojing();
}
*/
        if (GP.onebit.bit0 == 0)        {
                PWM2ON = 0;   //关闭充电的PWM
                cdsc = 0;     //下啦端口
                huangd1hz();
                baojing();
                return;
                                    }
        if (GP.onebit.bit1 == 1){
                PWM2ON = 0;   //关闭充电的PWM
                cdsc = 1;     //
                huangd1hz();
                baojing();
                return;
                                }
        if (GP.onebit.bit0)
        {
                if (GP.onebit.bit1 == 0)
                {
                        K4 = 0;
                        huangd = 0;
                        fengm = 0;
                }
        }
}
//////////////////////应急动作/////////////////////////////
void yingjl(void)
{   yjgd = 1;     //应急供电打开
    T2ON = 1;
        PWM3CTL0=0X8C;//0b10001100
        PWM2ON = 0;   //关闭充电的PWM
        cdsc = 0;     //下啦端口
        if (K1 == 0)
                lvd = 0;  //绿灯灭
        X3 = 1;       //应急动作标号
        hongd = 0;    //红灯灭
        huangd = 0;
        //fengm = 0;
}
/////////////////////应急关闭///////////////////////////////
void yingjm(void)
{
        //P3ON0 = 0;     //关闭PWM3
        PWM3CTL0=0X00;
        T2ON = 0;
        yjgd = 0;      //应急供电关闭
        X3 = 0;        //应急动作标号
        P14 = 0;       //下啦端口
        P15 = 0;       //下啦端口
}

/////////////////////主程序////////////////////////////////
void main()
{
        init(); //初始化
        while (1)
        {
                __asm
                CWDT
                __endasm;
                shizhong(); //时钟子程序
                jishi();    //计时程序
                ADC();
                if (GP.onebit.bit2)
                {
                        if (K0)
                        {      //有主电有应急标号 进行初始化
                                T2ON=0;
                            P3ON0=0;
                                K0 = 0;
                                K1 = 0;
                                K2 = 0; //
                                K3 = 0;
                                K4 = 0;
                                K5 = 0;
                                K6 = 0;
                                K7 = 0;
                                YY0 = 0;
                                YY1 = 0;
                                YY2 = 0;
                                YY3 = 0;
                                YY4 = 0;
                                YY5 = 0;
                                YY6 = 0;
                                YY7 = 0;
                                X0 = 0;
                                X1 = 0;
                                X2 = 0;
                                X3 = 0;
                                X4 = 0;
                                X5 = 0;
                                X6 = 0;
                                X7 = 0;
                                ms50 = 0;
                                second = 0;
                                hour = 0;
                                yue = 0; //月归零
                                annuijis = 0; //按钮计时加一
                                baojingjis = 0; //报警计时加一
                                zijianjis = 0; //自检计时加一
                                GP.onebit.bit0 = 1;
                                GP.onebit.bit1 = 0;
                                GP.onebit.bit2 = 1;
                                GP.onebit.bit3 = 1;
                                GP.onebit.bit4 = 0;
                                P1 = 0X00;
                                //P14=0;
                                //P15=0;
                        }

                        anniu1(); //按钮子程序
                        anniu2(); //按钮子程序
                        if (YY7 )
                                nianzij();
                        if (YY6)
                                yuezij();
                        CD();
                }
                else //应急工作循环
                {
                        if (YY3)
                        {
                                yingjm();
                        }
                        else//YY3为关灯标志,按钮下7秒或电池电压低于85% YY3=1.
                        {
                                yingjl();
                                K0 = 1; //应急工作状态标号
                        }
                }
        }
}


youyouhm
  • 积分:387
  • |
  • 主题:0
  • |
  • 帖子:13
积分:387
LV4
初级工程师
  • 2018-5-17 22:46:45
  • 倒数2
 
电路图好模糊,可以上存个高清的吗
wxid21
  • 积分:20
  • |
  • 主题:1
  • |
  • 帖子:4
积分:20
LV1
本网技工
  • 2018-5-17 13:27:59
  • 倒数5
 
单片机程序 1.txt (16.37 KB, 下载次数: 29)



hunter4051
  • 积分:8032
  • |
  • 主题:37
  • |
  • 帖子:579
积分:8032
LV8
副总工程师
  • 2018-5-17 16:18:26
  • 倒数4
 
楼主的分享精神很赞很赞。。。
niyin
  • niyin
  • 离线
  • LV0
  • 禁止发言
  • 积分:804
  • |
  • 主题:2
  • |
  • 帖子:151
积分:804
LV0
禁止发言
  • 2018-5-17 22:22:45
  • 倒数3
 
提示: 作者被禁止或删除 内容自动屏蔽
wxid21
  • 积分:20
  • |
  • 主题:1
  • |
  • 帖子:4
积分:20
LV1
本网技工
最新回复
  • 2018-5-23 15:54:54
  • 倒数1
 
这是电源的环境温度,还有变压器呢?
热门技术、经典电源设计资源推荐

世纪电源网总部

地 址:天津市南开区黄河道大通大厦8层

电 话:400-022-5587

传 真:(022)27690960

邮 编:300110

E-mail:21dy#21dianyuan.com(#换成@)

世纪电源网分部

广 东:(0755)82437996 /(138 2356 2357)

北 京:(010)69525295 /(15901552591)

上 海:(021)24200688 /(13585599008)

香 港:HK(852)92121212

China(86)15220029145

网站简介 | 网站帮助 | 意见反馈 | 联系我们 | 广告服务 | 法律声明 | 友情链接 | 清除Cookie | 小黑屋 | 不良信息举报 | 网站举报

Copyright 2008-2024 21dianyuan.com All Rights Reserved    备案许可证号为:津ICP备10002348号-2   津公网安备 12010402000296号