秦偉
(陜西理工學(xué)院 電信工程系,陜西 漢中 723003)
在某工程項(xiàng)目中需要對(duì)應(yīng)變片信號(hào)采集,傳統(tǒng)的由單片機(jī)、A/D轉(zhuǎn)換器組成的數(shù)據(jù)采集系統(tǒng)使用的器件較多,系統(tǒng)復(fù)雜,成本高,系統(tǒng)開發(fā)時(shí)間比較長。C8051F06x系列單片機(jī)內(nèi)部集成A/D轉(zhuǎn)換器,能大大降低系統(tǒng)開發(fā)時(shí)間和成本。
C8051F064器件是完全集成的混合信號(hào)片上系統(tǒng)型MCU,片內(nèi)集成硬件資源有:兩個(gè)16位、1Msps的ADC,兩個(gè)12位DAC,具有可編程數(shù)據(jù)更新方式,控制器局域網(wǎng)(CAN2.0B)控制器,64KB或32KB可在系統(tǒng)編程的FLASH存儲(chǔ)器,4352(4K+256)字節(jié)的片內(nèi)RAM,可尋址64KB地址空間的外部數(shù)據(jù)存儲(chǔ)器接口,5個(gè)通用的16位定時(shí)器,6個(gè)捕捉/比較模塊的可編程計(jì)數(shù)器/定時(shí)器陣列,硬件實(shí)現(xiàn)的SPI、SMBus/IC和兩個(gè)UART串行接口,片內(nèi)看門狗定時(shí)器、VDD監(jiān)視器和溫度傳感器。工作電壓為2.7~3.6V。端口I/O、/RST和JTAG引腳都容許5V的輸入信號(hào)電壓。
C8051F064的ADC子系統(tǒng)包括兩個(gè)1Msps、16位分辨率的逐次逼近寄存器型ADC,ADC中集成了跟蹤保持電路、可編程窗口檢測(cè)器和DMA接口。這兩個(gè)ADC可以被配置為兩個(gè)獨(dú)立的單端方式ADC或組成一個(gè)差分對(duì)。數(shù)據(jù)轉(zhuǎn)換方式、窗口檢測(cè)器和DMA接口都可用軟件通過特殊功能寄存器來控制。這兩個(gè)ADC及相應(yīng)的跟蹤保持電路可以被獨(dú)立使能或禁止(用特殊功能寄存器)。ADC控制寄存器(ADCnCN)中的ADnEN位被置為邏輯1時(shí)ADCn被使能。當(dāng)ADnEN位為邏輯0時(shí),ADCn處于低功耗關(guān)斷方式。
2.1 ADC使用的電壓基設(shè)置
ADC0和ADC1的電壓基準(zhǔn)電路允許使用多種不同的電壓基準(zhǔn)配置。每個(gè)ADC都可以使用其專用的內(nèi)部電壓基準(zhǔn)或外部基準(zhǔn)。每個(gè)ADC的內(nèi)部電壓基準(zhǔn)電路由一個(gè)溫度穩(wěn)定性好的1.2V帶隙電壓基準(zhǔn)發(fā)生器和一個(gè)兩倍增益的輸出緩沖放大器組成。VREFn(VREF0和VREF1)引腳對(duì)AGND的最大負(fù)載必須小于100μA。實(shí)際電路中在VREFn引腳與VRGNDn之間接入0.1μF和47μF的旁路電容。
本設(shè)計(jì)選著內(nèi)部電壓基準(zhǔn),每個(gè)ADC的電壓基準(zhǔn)電路由相應(yīng)的基準(zhǔn)控制寄存器控制。REF0CN是ADC0的基準(zhǔn)控制寄存器,REF1CN是ADC1的基準(zhǔn)控制寄存器。REFnCN寄存器用于獨(dú)立地使能/禁止每個(gè)ADC的內(nèi)部基準(zhǔn)和偏置發(fā)生器電路。BIASEn位使能每個(gè)ADC的內(nèi)部偏置發(fā)生器,而REFBEn位使能驅(qū)動(dòng)VREFn引腳的2倍增益緩沖放大器。當(dāng)被禁止時(shí),帶隙基準(zhǔn)和緩沖放大器消耗的電流小于1μA(典型值),緩沖放大器的輸出進(jìn)入高阻狀態(tài)(約25KΩ)。如果ADC使用內(nèi)部電壓基準(zhǔn),則ADC所對(duì)應(yīng)的BIASEn和REFBEn位必須都被置‘1’。根據(jù)上述要求設(shè)置REF0CN為“00000011”,REF1CN為“00000011”,故系統(tǒng)ADC電壓基準(zhǔn)初始化程序代碼如下:
void Voltage_Reference_Init(){ unint i;char old_SFRPAGE=SFRPAGE;SFRPAGE=ADC0_PAGE; //轉(zhuǎn)換到ADC0頁REF0CN =0x03;//ADC0使用內(nèi)部電壓基準(zhǔn)for(i=0;i<1000;i++); //延時(shí),等待VREF平穩(wěn)SFRPAGE=ADC1_PAGE; //轉(zhuǎn)換到ADC1頁
REF1CN=0x03;//ADC1使用內(nèi)部電壓基準(zhǔn)for(i=0;i<1000;i++);//延時(shí),等待VREF平穩(wěn)SFRPAGE=old_SFRPAGE;//重置SFRPAGE }
2.2 ADC寄存器工作方式設(shè)置
ADC0和ADC1可以獨(dú)立地工作于單端方式或兩者組合工作在差分方式。在單端方式,兩個(gè)ADC可以被配置為同時(shí)采樣,或分別使用不同的轉(zhuǎn)換速度。在差分方式,ADC1從屬于ADC0,其配置由ADC0的配置決定,僅在偏移和增益校準(zhǔn)時(shí)例外。通道選擇寄存器AMX0SL中的DIFFSEL位為“0”用于選擇ADC工作在單端方式,DIFFSEL位為“1”選擇ADC工作在差分方式。此次設(shè)計(jì)采用單端方式工作故DIFFSEL位為“0”
圖1 ADC0數(shù)據(jù)采集流程圖
ADC0有4種轉(zhuǎn)換啟動(dòng)方式,由ADC0CN中的ADC0啟動(dòng)轉(zhuǎn)換方式位(AD0CM1,AD0CM0)的狀態(tài)決定。ADC1有5種轉(zhuǎn)換啟動(dòng)方式,由ADC1CN中的ADC1啟動(dòng)轉(zhuǎn)換方式位(AD1CM2~AD1CM0)的狀態(tài)決定。
本設(shè)計(jì)中均采用向ADCnCN的ADnBUSY位寫1的方式啟動(dòng)轉(zhuǎn)換,ADnBUSY位在轉(zhuǎn)換期間被置‘1’,轉(zhuǎn)換結(jié)束后復(fù)‘0’。ADnBUSY位的下降沿觸發(fā)中斷(當(dāng)被允許時(shí))并將中斷標(biāo)志ADnINT(ADCnCN.5)置‘1’。在單端方式,ADCn的轉(zhuǎn)換數(shù)據(jù)被保存在ADCn數(shù)據(jù)字的MSB和LSB寄存器:ADCnH和ADCnL中。當(dāng)通過向ADnBUSY寫‘1’啟動(dòng)數(shù)據(jù)轉(zhuǎn)換時(shí),應(yīng)查詢ADnINT位以確定轉(zhuǎn)換何時(shí)結(jié)束(也可以使用ADCn中斷)。查詢步驟如下:①寫‘0’到ADnINT;②向ADnBUSY寫‘1’;③查詢并等待ADnINT變‘1’;④處理ADCn數(shù)據(jù)。根據(jù)以上配置規(guī)則,ADC0數(shù)據(jù)采集流程圖如圖1所示,ADC1與ADC0工作方式方式相同故不再敘述。
基于C8051F064的數(shù)據(jù)采集系統(tǒng)的程序設(shè)計(jì)簡潔、高效。將該數(shù)據(jù)采集系統(tǒng)應(yīng)用于應(yīng)變片信號(hào)采集,降低了硬件設(shè)計(jì)難度,提高系統(tǒng)的可靠性和電氣性能指標(biāo)。
[1]潘琢金,孫德龍,夏秀峰,譯.C8051F單片機(jī)應(yīng)用解析[M].北京:北京航空航天大學(xué)出版社,2002.
[2]何立民.MCS-51系列單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)[M].北京:北京航天大學(xué)出版社,2005.