交直流双电源无缝切换

 

使用ATmega32编写交直流双电源无缝切换,输入过欠压保护,输出过流保护。主要使用了单片机自带的比较器功能,比较器的一端使用了LT431制作的2.5V基准源。

--------------------------------------------------
#include  "iom32v.h"
#define   WDR()  asm("WDR")
#define   NOP()  asm("NOP")
unsigned char dcovervoltage_flag=0,acovervoltage_flag=0,dcundervoltage_flag=0,acundervoltage_flag=0;
             //直流过压标志        交流过压标志         直流欠压标志          交流欠压标志     
unsigned char dcreovervoltage_flag=0,acreovervoltage_flag=0,dcreundervoltage_flag=0,acreundervoltage_flag=0;
             //直流过压恢复标志      交流过压恢复标志        直流欠压恢复标志       交流欠压恢复标志
static unsigned char overcurrent[2]={0,0};

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


   /*使能看门狗*/
void WDT_enable(void)
     {
      WDTCR|=0x08;   //Allow change,WDT enable
      WDTCR|=0x0F;   //Set reset time,2.1S.
     }
//---------------------------------------------------------
//---------------------------------------------------------
   /*自定义延时程序*/
void delay(void)
    {
     unsigned char  i;
     for(i=2;i>0;i--);
    }
//---------------------------------------------------------
//---------------------------------------------------------
    /*初始化模拟比较器*/
void initialization_ac()
  {
   SFIOR|=0x08;        //使能模拟比较器多工输入
   ACSR&=0x3F;         //使能模拟比较器,利用外部基准,关闭中断
   ADCSRA|=0x80;       //关闭多路复用器,模拟比较器选择负极输入
  }
//---------------------------------------------------------
//---------------------------------------------------------
    /*直流过压检测程序*/
 unsigned char  dc_overvoltage(void)
     {
        unsigned char value;
        ADCSRA&=0x7F;                   // ADCSRA的ADEN位(位7)为0时,打开多路复用器,ADC多路复用器为模拟比较器选择负极输入
        ADMUX&=0xF8;                    //选择通道0,直流过压检测
        delay();                        //转换延迟,等待转化结果
        ACSR=0x10;
        if(ACSR==0x00)              //条件成立,直流过压
           {
            PORTD&=0xDF;                //PD5输出设置为0,禁止直流输出
        
            PORTD&=0xF7;                // PD3输出低电平
            PORTD|=0x10;                //PD4输出高电平,说明直流输入异常
            value=1;
           }
         else                    //直流没有过压
            {
          PORTD|=0x08;        // PD3输出高电平,输入正常
       
            PORTD&=0xEF;          //PD4输出低电平,输入正常 
            value=0;
            } 
        ADCSRA|=0x80;             //关闭多路复用器,模拟比较器选择负极输入
        return(value);
 }
//---------------------------------------------------------
//---------------------------------------------------------
     /*直流过压恢复检测程序*/
 void dc_reovervoltage(void)
    {
    
      if(dcovervoltage_flag==1)      //条件成立,说明过压,需要检测恢复
         {
              ADCSRA&=0x7F;    //ADCSRA的ADEN位(位7)为0时,打开多路复用器,ADC多路复用器为模拟比较器选择负极输入
              ADMUX&=0xF8;     //选择通道1,直流过压恢复检测
              ADMUX|=0x01;
              delay();         //转换延迟,等待转化结果。
              ACSR=0x10;
              if(ACSR==0x20)    //条件成立,说明过压恢复
                {
       
            PORTD|=0x08;        // PD3输出高电平,输入正常
          
                  PORTD&=0xEF;          //PD4输出低电平,输入正常
                  dcovervoltage_flag=0;
                  
                } 
               
         }
     ADCSRA|=0x80;       //关闭多路复用器,模拟比较器选择负极输入
    }
//---------------------------------------------------------
//---------------------------------------------------------
     /*直流欠压检测程序*/
unsigned  char  dc_undervoltage(void)
    {
         unsigned char  value;
         ADCSRA&=0x7F;     // ADCSRA的ADEN位(位7)为0时,打开多路复用器,ADC多路复用器为模拟比较器选择负极输入
         ADMUX&=0xF8;     //选择通道2,直流欠压检测
         ADMUX|=0x02;
         delay();        //转换延迟,等待转化结果
         ACSR=0x10;
         if(ACSR==0x20)       //条件成立,直流欠压
           {
           PORTD&=0xDF;        //PD5输出设置为0,禁止直流输出

            PORTD&=0xF7;       // PD3输出低电平
            PORTD|=0x10;                //PD4输出高电平,说明直流输入异常
            value=1;
            
           }
         else                       //直流没有欠压
           {
            PORTD|=0x08;        // PD3输出高电平,输入正常
    
            PORTD&=0xEF;          //PD4输出低电平,输入正常
            value=0;
           } 
         ADCSRA|=0x80;         //关闭多路复用器,模拟比较器选择负极输入
         return(value);
    }

//---------------------------------------------------------
//---------------------------------------------------------
     /*直流欠压恢复检测程序*/
void  dc_reundervoltage(void)
    {
       if(dcundervoltage_flag==1)      //条件成立,说明过压,需要检测恢复
         {
            ADCSRA&=0x7F;     //ADCSRA的ADEN位(位7)为0时,打开多路复用器,ADC多路复用器为模拟比较器选择负极输入
            ADMUX&=0xF8;      //选择通道3,直流欠压恢复检测
            ADMUX|=0x03;
            delay();        //转换延迟,等待转化结果。
            ACSR=0x10;
            if(ACSR==0x00)       //条件成立,说明欠压恢复
              {
       
             PORTD|=0x08;        // PD3输出高电平,输入正常
        
                PORTD&=0xEF;          //PD4输出低电平,输入正常
                dcundervoltage_flag =0;
              }
          
          }
        ADCSRA|=0x80;    

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
交直流双向变换器(PDF)是一种能够实现交流电(AC)和直流电(DC)之间相互转换的电力变换器。交直流双向变换器广泛应用于电力系统、能源存储系统和电动车辆等领域。 交直流双向变换器的主要功能是将交流电转换为直流电,或将直流电转换为交流电。在将交流电转换为直流电时,变换器工作在整流模式下,通过电子开关将交流电转换为直流电,以供电力系统或能源存储系统使用。而在将直流电转换为交流电时,变换器则工作在逆变模式下,通过电子开关将直流电转换为交流电,并输出给电动车辆或接入电力系统。 为了实现交直流双向变换,变换器通常由功率开关、滤波电容、滤波电感和控制电路等组成。通过控制电路的调节,可以实现变换器的工作模式切换和输出电流、电压的调节。 交直流双向变换器的应用有很多,其中一项重要应用是在电动车辆中。电动车辆的电池通常输出直流电,而驱动电机则需要交流电才能正常工作,通过交直流双向变换器,可以将电池输出的直流电转换为交流电,以供驱动电机使用。同时,当车辆行驶时,通过逆变模式将交流电转换为直流电进行能量回馈,将制动过程中产生的能量回收储存,提高整个系统的能量利用效率。 总的来说,交直流双向变换器是一种非常重要的电力转换设备,广泛应用于电力系统、能源存储和电动车辆等领域,实现了交流电和直流电之间的相互转换,提高了能量利用效率,推动了新能源与电动化技术的发展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值