N76E003之ADC電量檢測(程式、分析、電路)
阿新 • • 發佈:2018-12-12
模數轉換器即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的數值,再進行線性擬合。