N76E003之ADC电量检测(程序、分析、电路)

时间:2024-04-01 11:24:12

模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。

先来看看N76E003 ADC工作方式
N76E003之ADC电量检测(程序、分析、电路)
再看下相关寄存器,方便理解上图
N76E003之ADC电量检测(程序、分析、电路)
现在我们只需要配置好以上几个寄存器,就可以开始使用ADC了,为了保证程序的及时性,我们采取ADC中断的方式进行处理,ADCF是中断标志位。(上图ETGSEL中,ADC模块提供了外部触发的功能,可以使用PWM上升沿,下降沿,中点等进行触发,该功能可以用于检测电流,在自动控制中做电流环,相关调试将在后期的博文中写出,此处不表。)
接下来让我们配置相关代码(此次代码,源自新唐官方例程修改)

#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"



void ADC_ISR (void) interrupt 11
{
	if(ADCF)
	{
		clr_ADCF;//清除ADC转化完成标志,进行下一次转换
		set_ADCS;//当单次转换完成后,ADCS会硬件置0,需要重新使能
		printf ("\n Value = 0x%bx",ADCRH);//输出测量值高八位 
	}
}
void main (void) 
{
  Set_All_GPIO_Quasi_Mode;
	InitialUART0_Timer1(9600);//串口0配置,引脚P06\07
	Enable_ADC_AIN6;//配置使能P03,作为AIN6。
	//P04_FALLINGEDGE_TRIG_ADC;// 使用P04下降沿触发中断,使			    用外部触发时,可以不使能ADCS。
  set_EADC;//使能ADC中断
	EA = 1;
	set_ADCS;//使能ADCS,启动ADC测量
	while(1);
}

接下来就是ADC采样电路的设计,下图为一个典型的分压电路,前期可以大致确定ADC的电压范围,建议加上R1,以此保护单片机。之后则是进行各个点的采样,得到相应ADCRH&ADCRL的数值,再进行线性拟合。
N76E003之ADC电量检测(程序、分析、电路)