应广PMS171B(3)--比较器测供电电源VDD电压

概述

应广PMS171B单片机有很实用的功能,就是可以用内部的分压电阻,Band-gap 电路提供 1.2V 参考电压,和比较器一起,测试单片机VDD电压.不使用任何外部器件,不占用端口就可以测试供电的电源电压.!当电池低压的时候可以做相应的动作.比如休眠,进入低功耗等。本章就写一个实例,当低于4.2V时候,LED输出低电平,高于4.2V时候,LED输出高电平。

PMS171B配置之比较器初始化

在这里插入图片描述
gpcc寄存器是比较器 比较器控制寄存器,需要打开时需要7位配置为1,本文使用内部1.20V的band-gap参考电压,需配置3-1位为010,gpcc配置如下所示:

gpcc=0b1_0_0_0_010_0;

在这里插入图片描述
在这里插入图片描述
gpcs寄存器是配置比较电压,本文中以测试4.2V电压为例,将VDD=4.2V带入,得到N只为0.14、5.85、2.43、8.14;由于N为整数,所以Case 4模式较为适合,即gocs寄存器4-5位配置为11,切换为Case4模式,N为8,3-0位设置为1000,gpcs配置如下所示:

gpcs=0B0_0_11_1000;//检测4.2V

比较器测供电电源VDD电压完整代码

#include	"extern.h"//是程序的头文件。
BIT     LED           :        PA.7;  
#define        f_Com    !p_Com_Out
BIT        p_Com_Out    :    gpcc.6
BIT        f_getBat;
/*比较器初始化*/
void InitCompare ( void )
{
	/*b7@1=开启比较器
	b6@0=负输入大于正输入
	b5@0=比较器不用tm2_ck采样
	b4@0=比较结果没有极性相反
	b3:1@ 010=内部Band-gap电压
	b0@1=PA4输入0=内部电阻输入*/
	gpcc=0b1_0_0_0_010_0;
//$ padier 0b111_0_100_1;
	/*
	b7@0=不输出到PA0
	b6@0保留
	b5@0=高R
	b4@0=低R
	b3:0@0000-1111内部r值
	*/
	gpcs=0B0_0_0_0_0000;
}
void GetBat ( void )
{
	/*设置模式为Case 4,检测4.2V*/
	gpcs=0B0_0_11_1000;
	.delay 10;
	if ( f_Com )
	{
		/*电压低于4.2V,执行LED低电平*/
		f_getBat=1;
	}
	else//LED高电平
	{	
	f_getBat=0;
	}
}
void	FPPA0 (void)//相当于程序的 main() 函数。
{
	/*单片机内部RC震动时钟为 IHRC默认为16M,因此,IHRC/4=4M,系统时钟为4M*/
	.ADJUST_IC	SYSCLK=IHRC/4, IHRC=16MHz, VDD=5V;
    /*端口设置为输出*/
      pa.7=0;
      pac.7=1;/*输入*/
      paph.7=0;/*上拉*/
	  /***********电压比较器****************/
InitCompare();
	while (1)
	{
		GetBat();
		if(f_getBat)
			LED = 0;
		else
			LED = 1;
		.delay 4000*10;
	}
}

演示效果

可以看到,4.2V以上为LED输出高电平,4.2以下为LED输出低电平,由于4.2V左右会抖动,建议后期加防抖保证稳定运行。
在这里插入图片描述
在这里插入图片描述

最后

关注微信公众号『记贴』,持续更新文章和学习资料,可加作者的微信交流学习!在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_24312945/article/details/106531820
PMS