基于pic16f1503单片机的电源电压不足检测和指示方法:
原理:
利用单片机内部的FVR稳压电源,ADC进行检测判断单片机的VDD电压是否足够,不足进行输出显示。
应用:
当单片机的供电是由电池供电时,可以测量单片机的供电是否足够,指示电池电量不足。
实际电路测试功能可行,已经应用在具体电路上。
软件:
MPLAB X IDE v4.15 proteus 8.6.
1、仿真电路图;
2、源程序加注释。
请看附件,
说明:1、利用PIC16F1501内部的FVR,ADC可以测量VDD电压,判断单片机是否供电电压不足。
2、将ADC的基准设为Vdd,通过FVR使能并稳定到1.024V后,用ADC测量值。
3、有公式ADC读值=(1.024/VDD)*1024。设置Vdd参考为3.3V,则(1.024/VDD)*1024=318.
4、VDD越大,FVR的ADC读值越小,所以只要判断读值小于318,说明VDD 大于3.3V
5、图中左边VDD=3.3V.输出指示灯亮,正常,右边VDD=3.29V输出指示灯灭。
6、两个芯片的程序相同,电压基准是3.3V,3.3V以下指示输出灯不亮。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include"sys.h"
- #include <stdint.h> /* For uint8_t definition */
- #include <stdbool.h> /* For true/false definition */
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include<math.h>
- #define POWER_LED PORTCbits.RC0 //RC0 为系统电源指示灯,
- //电源大于3.3V时,灯亮;
- //电源小于3.3V时,灯灭;
- void sys_init() //系统初始化
- {
- OSCCON=0x7F; //16M 内部晶振
- FVRCON=0B01010001; //FVREN,ADCFVR=01(1.024V)
- ADCON0=0B01111100; //FVR channel,ADCON
- ADCON1=0B10000000; //right 对齐
- ANSELC=0; //PORTC是IO口
- PORTC=0;
- TRISC=0; //PORTC是输出
-
- }
- void main()
- {
- sys_init(); //系统初始化
- while(1)
- {
- FVRCONbits.FVREN=1; //FVR 使能
- while(!FVRCONbits.FVRRDY); //FVR 是否稳定
- ADCON0bits.ADON=1; //ADC 使能
- __delay_ms(1); //delay
- ADCON0bits.GO=1; //ADC 转换开始
- while(ADCON0bits.GO); //等待ADC 转换结束
- uint16_t adc_result=(uint16_t)ADRESH<<8 |ADRESL; //得到ADC 读数
- if(adc_result<318) POWER_LED=1; //(1.024/3.3)*1024=318
- else POWER_LED=0;
- FVRCONbits.FVREN=0; //FVR 使能关闭,节能
- __delay_ms(5000);
-
- }
- }
复制代码
所有资料51hei提供下载:
一种单片机检测VDD输入的方法.rar
(331.46 KB, 下载次数: 79)
|