基于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仿真工程文件可到本帖附件中下載)
proteus.jpg (212.58 KB, 下載次數: 123)
下載附件
2018-5-23 21:52 上傳
0.png (56.99 KB, 下載次數: 129)
下載附件
2018-5-24 00:00 上傳
單片機源程序如下:
- #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)
2018-5-23 21:49 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|