原理:
利用单片机内部的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以下指示输出灯不亮。
仿真原理图如下
单片机源程序如下:
#include"sys.h"
#include
#include
#include
#include
#include
#include
#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);
}
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』