1. 程式人生 > >N76E003之ADC電量檢測(程式、分析、電路)

N76E003之ADC電量檢測(程式、分析、電路)

模數轉換器即A/D轉換器,或簡稱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的數值,再進行線性擬合。
在這裡插入圖片描述