秦偉
(陜西理工學院 電信工程系,陜西 漢中 723003)
在某工程項目中需要對應變片信號采集,傳統的由單片機、A/D轉換器組成的數據采集系統使用的器件較多,系統復雜,成本高,系統開發時間比較長。C8051F06x系列單片機內部集成A/D轉換器,能大大降低系統開發時間和成本。
C8051F064器件是完全集成的混合信號片上系統型MCU,片內集成硬件資源有:兩個16位、1Msps的ADC,兩個12位DAC,具有可編程數據更新方式,控制器局域網(CAN2.0B)控制器,64KB或32KB可在系統編程的FLASH存儲器,4352(4K+256)字節的片內RAM,可尋址64KB地址空間的外部數據存儲器接口,5個通用的16位定時器,6個捕捉/比較模塊的可編程計數器/定時器陣列,硬件實現的SPI、SMBus/IC和兩個UART串行接口,片內看門狗定時器、VDD監視器和溫度傳感器。工作電壓為2.7~3.6V。端口I/O、/RST和JTAG引腳都容許5V的輸入信號電壓。
C8051F064的ADC子系統包括兩個1Msps、16位分辨率的逐次逼近寄存器型ADC,ADC中集成了跟蹤保持電路、可編程窗口檢測器和DMA接口。這兩個ADC可以被配置為兩個獨立的單端方式ADC或組成一個差分對。數據轉換方式、窗口檢測器和DMA接口都可用軟件通過特殊功能寄存器來控制。這兩個ADC及相應的跟蹤保持電路可以被獨立使能或禁止(用特殊功能寄存器)。ADC控制寄存器(ADCnCN)中的ADnEN位被置為邏輯1時ADCn被使能。當ADnEN位為邏輯0時,ADCn處于低功耗關斷方式。
2.1 ADC使用的電壓基設置
ADC0和ADC1的電壓基準電路允許使用多種不同的電壓基準配置。每個ADC都可以使用其專用的內部電壓基準或外部基準。每個ADC的內部電壓基準電路由一個溫度穩定性好的1.2V帶隙電壓基準發生器和一個兩倍增益的輸出緩沖放大器組成。VREFn(VREF0和VREF1)引腳對AGND的最大負載必須小于100μA。實際電路中在VREFn引腳與VRGNDn之間接入0.1μF和47μF的旁路電容。
本設計選著內部電壓基準,每個ADC的電壓基準電路由相應的基準控制寄存器控制。REF0CN是ADC0的基準控制寄存器,REF1CN是ADC1的基準控制寄存器。REFnCN寄存器用于獨立地使能/禁止每個ADC的內部基準和偏置發生器電路。BIASEn位使能每個ADC的內部偏置發生器,而REFBEn位使能驅動VREFn引腳的2倍增益緩沖放大器。當被禁止時,帶隙基準和緩沖放大器消耗的電流小于1μA(典型值),緩沖放大器的輸出進入高阻狀態(約25KΩ)。如果ADC使用內部電壓基準,則ADC所對應的BIASEn和REFBEn位必須都被置‘1’。根據上述要求設置REF0CN為“00000011”,REF1CN為“00000011”,故系統ADC電壓基準初始化程序代碼如下:

void Voltage_Reference_Init(){ unint i;char old_SFRPAGE=SFRPAGE;SFRPAGE=ADC0_PAGE; //轉換到ADC0頁REF0CN =0x03;//ADC0使用內部電壓基準for(i=0;i<1000;i++); //延時,等待VREF平穩SFRPAGE=ADC1_PAGE; //轉換到ADC1頁

REF1CN=0x03;//ADC1使用內部電壓基準for(i=0;i<1000;i++);//延時,等待VREF平穩SFRPAGE=old_SFRPAGE;//重置SFRPAGE }
2.2 ADC寄存器工作方式設置
ADC0和ADC1可以獨立地工作于單端方式或兩者組合工作在差分方式。在單端方式,兩個ADC可以被配置為同時采樣,或分別使用不同的轉換速度。在差分方式,ADC1從屬于ADC0,其配置由ADC0的配置決定,僅在偏移和增益校準時例外。通道選擇寄存器AMX0SL中的DIFFSEL位為“0”用于選擇ADC工作在單端方式,DIFFSEL位為“1”選擇ADC工作在差分方式。此次設計采用單端方式工作故DIFFSEL位為“0”

圖1 ADC0數據采集流程圖
ADC0有4種轉換啟動方式,由ADC0CN中的ADC0啟動轉換方式位(AD0CM1,AD0CM0)的狀態決定。ADC1有5種轉換啟動方式,由ADC1CN中的ADC1啟動轉換方式位(AD1CM2~AD1CM0)的狀態決定。
本設計中均采用向ADCnCN的ADnBUSY位寫1的方式啟動轉換,ADnBUSY位在轉換期間被置‘1’,轉換結束后復‘0’。ADnBUSY位的下降沿觸發中斷(當被允許時)并將中斷標志ADnINT(ADCnCN.5)置‘1’。在單端方式,ADCn的轉換數據被保存在ADCn數據字的MSB和LSB寄存器:ADCnH和ADCnL中。當通過向ADnBUSY寫‘1’啟動數據轉換時,應查詢ADnINT位以確定轉換何時結束(也可以使用ADCn中斷)。查詢步驟如下:①寫‘0’到ADnINT;②向ADnBUSY寫‘1’;③查詢并等待ADnINT變‘1’;④處理ADCn數據。根據以上配置規則,ADC0數據采集流程圖如圖1所示,ADC1與ADC0工作方式方式相同故不再敘述。
基于C8051F064的數據采集系統的程序設計簡潔、高效。將該數據采集系統應用于應變片信號采集,降低了硬件設計難度,提高系統的可靠性和電氣性能指標。
[1]潘琢金,孫德龍,夏秀峰,譯.C8051F單片機應用解析[M].北京:北京航空航天大學出版社,2002.
[2]何立民.MCS-51系列單片機應用系統設計[M].北京:北京航天大學出版社,2005.