交直流双电源无缝切换

2023-11-18

 

使用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;    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

交直流双电源无缝切换 的相关文章

  • QT QLabel样式设置

    需要设置error的样式 设置样式 color rgb 255 0 0 font size 12pt font family Microsoft YaHei 字体 颜色也可通过富文本设置在程序中设置 emit LoginError QStr
  • 一文带你了解如何编写自动化测试用例

    自动化测试脚本 什么是自动化测试 自动化测试是验证和验证软件是否满足所有用户需求 并使用自动化工具按预期运行 它检查在产品开发阶段期间和之后出现的错误 问题和其他类型的缺陷 这种类型的软件测试运行在由测试工具处理的编程脚本上 有多种测试工具

随机推荐

  • 关于rider引入使用nuget无法加载包的解决方式

    关于rider引入使用nuget无法加载包的解决方式 这个问题已经是困扰我三天了 因为C 使用rider开发的人相对较少 也可能是我自身遇到这个问题比较特殊 终于找到了nuget无法引入包的解决方案 首先看图 我在Nuget下面查找Nuni
  • 蓝桥杯基础练习VIP——矩阵乘法——快速幂

    题目https www dotcpp com oj problem1472 html 1 普通做法 循环嵌套 n m list map int input split mat for i in range n row list map in
  • uniapp 仿网易云音乐播放器 微信小程序

    效果视频 uniapp 仿照网易云播放器功能 效果截图 上代码
  • pxe无盘服务器教程,[教程]Synology+PXE挂载iSCSI网络无盘启动Win7(08.04更新)

    本帖最后由 shuaiking 于 2020 5 16 09 32 编辑 前言 之前发了一篇关于 synology部署无盘win7的帖子https www chiphell com thread 823492 1 1 html 教程本想找个
  • Android Studio 从安装到第一个Android 应用Demo

    安装Android Studio 安装需要 上网 我这挺顺利的 就是在官网下载安装包 一路 Next 大概连下载总共半个小时 第一个应用 参考官方教程 https developer android com codelabs basic a
  • 智能指针的deleter机制

    一 介绍 智能指针的deleter机制是指 当智能指针的引用计数降为0时 智能指针会自动调用一个指定的析构函数 deleter 来释放所管理的内存 这个析构函数通常是一个函数对象 可以是一个函数指针 一个lambda表达式或者一个重载了函数
  • 基于模型的六轴机器人阻抗力控制算法(matlab simscape,机器人模型可换)

    基于模型的六轴机器人阻抗力控制算法 matlab simscape 机器人模型可换 视频中红色为期望轨迹 黑色为实际轨迹 工程可一键运行 可学到机器人阻抗力控制算法以及通过m文件设置simulink参数及调用simulink的方法 ID 4
  • FutureWarning: Criterion ‘mse‘ was deprecated in v1.0 and will be removed in version 1.2.

    出现FutureWarning Criterion mse was deprecated in v1 0 and will be removed in version 1 2 Use criterion squared error whic
  • c++如何按照空格分割字符串

    我们经常会需要在txt文本或csv中提取字符串 例如 调用了一次readline 之后 我们得到了如下一行string id 1 name 345 size 728 632 value 3 1415926 我们想把这行字符串按照空格进行分割
  • 【TypeScript】断言

    目录 概念 用法 实例 总结 概念 TypeScript类型断言是一个编译时语法 用于告诉编译器用户比编译器更加确定变量的类型 进而解除编译错误 类型断言有点类似于其他语言的类型转换 但它没有运行时的影响 只是在编译阶段起作用 所以 即使通
  • 树莓派下opencv3.4.0的安装与错误处理

    1 opencv3 4 0的下载 1 可以在树莓派的终端界面通过wegt命令下载 但下载速度可能很慢 终端输入下列代码进行下载 cd home pi Downloads wget https github com Itseez opencv
  • 【ElementUI组件】视频上传+计算视频时长

    效果如下 实现步骤 1 首先先安装官网的操作步骤安装elementui 或者 不安装直接引入 安装指令 npm i element ui S 引入方式 2 以下是参考代码 HTML代码 div div
  • 内网端口转发及穿透-

    转 内网端口转发及穿透 最近尝试了一些内网端口的转发和内网穿透 现在一起总结一下 0x01 正向和反向代理 正向代理中 proxy和client同属一个LAN 对server透明 反向代理中 proxy和server同属一个LAN 对cli
  • 执行npm install 时报错 Host key verification failed

    问题 安装依赖的时候出现Host key verification failed问题 整理了一下解决流程 1 要在git设置一下身份的名字和邮箱 git config global user name yourname gt 用户名 git
  • Unity中自定义协程函数

    Unity中提供了协程的方法 在处理一些需要异步的函数时非常方便 尤其是在处理网络请求响应的时候 但是协程函数有些时候需要自定义 这就需要自己实现满足条件的协程函数了 好在Unity提供了这样的类来帮助我们实现相关的功能 通过继承Custo
  • Springboot2.0中webflux到底优秀在哪里

    Spring boot webflux中所说的反应堆式编程reactor到底优秀在哪里 小编的Springboot2 0的课程已经快全部写完了 总结来看 对于有基础的同学学习难度不是很大 一周内就能上手 但是在小编看来编程如果说只会用 而不
  • 记一次wwwscan目录扫描后获取敏感目录登录后台

    1 开启wwwscan工具 2 配置信息 目标域名不要带协议头 直接www xxx com或者192 168 67 xxx 3 点击 扫描 等待扫描之后会在wwwscan的同级目录下生成结果文件 4 打开第三个文件 5 点击访问 说明 tx
  • [机器学习与scikit-learn-31]:算法-回归-线性模拟拟合拟合非线性数据-概述

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123555129 目录 第1章 什么是
  • 进程和线程的详解和区别

    1 进程和线程概述 我们都知道计算机的核心是CPU 它承担了所有的计算任务 而操作系统是计算机的管理者 它负责任务的调度 资源的分配和管理 统领整个计算机硬件 应用程序是具有某种功能的程序 程序是运行于操作系统之上的 2 进程 我们编写的代
  • 交直流双电源无缝切换

    使用ATmega32编写交直流双电源无缝切换 输入过欠压保护 输出过流保护 主要使用了单片机自带的比较器功能 比较器的一端使用了LT431制作的2 5V基准源 include iom32v h define WDR asm WDR defi