ADμC812的數(shù)據(jù)采集子系統(tǒng)及其ISP技術
摘要:主要介紹AD公司推出的在系統(tǒng)可編程微轉換器ADμC812的ADC采集子系統(tǒng)的組成、結構和控制特性;對片內Flash存儲器的在系統(tǒng)編程技術和程序調試方式;舉例說明如何采用中斷方式定時進行AD數(shù)據(jù)采集和數(shù)字濾波的過程。 關鍵詞:數(shù)據(jù)采集 Flash存儲器 ISP 數(shù)字濾波 在單片機應用如火口荼的今天,一個真正的單片在系統(tǒng)可編程全智能數(shù)據(jù)采集系統(tǒng)終于出現(xiàn)了。它就是AD公司最新推出的嵌入式Flash MCU微轉換器ADμC812。 ADμC812在單個芯片內集成了8路12位ADC采集系統(tǒng)、2路12位DAC、80C52MCU內核、8KB的閃速/電可擦除程序存儲器、640字節(jié)的閃速/電可擦除數(shù)據(jù)存儲器、看門狗定時器、640字節(jié)的閃速/電可擦除數(shù)據(jù)存儲器、看門狗定時器、電源監(jiān)視器、I2C兼容的SPI和標準的UART串行I/O模塊及靈活的電源管理方案等等,真正實現(xiàn)了單片機應用系統(tǒng)的單片機。限于篇幅,本文只介紹其ADC采集子系統(tǒng)及其在系統(tǒng)編程技術。 一、ADμC812的ADC采集子系統(tǒng) 1.硬件組成結構 ADμC812的ADC采集子系統(tǒng)部分由模擬多路轉換器、溫度傳感器、采樣保持電路(T/H)、12位逐次逼近比較的ADC、+2.5V基準源和ADC校正、控制邏輯組成,其組成如圖1所示。 ADμC812可工作在-40~+85℃的工業(yè)級范圍,有3V和5V兩種供電工作方式,以便進一步降低功耗。ADC模擬包含了5μs、8通道、12位、單電源A/D轉換器。其中,A/D轉換器由基于電容DAC的常規(guī)則逐次逼近轉換器組成,可保證的±1LSB的差分非線性和±1/2LSB和積分非線性。在上電時由工廠編程的校準系數(shù)自動下載到ADC,以確保最佳的ADC性能。該校準系數(shù)包括內部失調和增益校準兩個方面,用戶可根據(jù)需要重寫工廠編程的校準系數(shù),以便使用戶目標系統(tǒng)中端點誤差的影響最小。來自片內溫度傳感器的電壓輸出正比于熱力學溫度,它可通過多路轉換器的第9個ADC通道輸入,這方便了溫度測量的實現(xiàn)。 2.軟件控制特性 可編程性是應用系統(tǒng)發(fā)展的必然趨勢。為適應不同信號源的實際需求,ADμC812片內ADC模塊內的所有部件都能方便地通過3個SFR寄存器來設置。 (1)ADCCON1——控制轉換和采集時間
二、ADμC812的系統(tǒng)調試、編程技術 目前,由于ADμC812只提供表貼封裝形式,因而在用仿真器進行程序調試時將會帶來一些問題。為方便調試,ADμC812A片內除集成了各具特色的硬件模塊外,還因化了方便實用的監(jiān)控調試軟件,使其只需少量的外圍器件即可實現(xiàn)聯(lián)機調試,從而大大方便了用戶的使用,縮短了產(chǎn)品的研制周期。啟用調試方式的電路連接如圖3所示。 在上電復位的瞬間,使EA引腳接高電平,PSEN引腳接一下拉電阻,即可使ADμC812進入監(jiān)控調試支援方式。在此方式下,通過基于PC的Quick Start開發(fā)工具包,即可下載用戶程序。通過運行于Microsoft Windows系統(tǒng)下的下的ADμC.exe調試軟件,可實時調試用戶程序。 該調試軟件支持單步、斷點和連續(xù)運行等工作方式,可方便地觀察MCU的運行結果,包括內部RAM、SFR、程序Flash EEPROM和數(shù)據(jù)Flash EEPROM等單元的內容。從而提高了工作效率,縮短了產(chǎn)品的開發(fā)周期。圖3中MAX232為RS232電平轉換器,用于將TTL電平轉換成RS232電平,以便直接連至PC的串行口,進行聯(lián)機調試或下載程序。 三、定時ADC編程舉例 該例程主要說明如何利用ADC的單次轉換功能實現(xiàn)定時采樣的目的。定時器T0用于1.25ms定時,8個通道完成一次數(shù)據(jù)采集需要10ms。為增加抗干擾的能力,軟件中還加入了數(shù)字濾波功能。每個通道連續(xù)采樣16次后再進行平均處理,然后將高8位結果送出,其匯編語言源程序清單如下: $NOMOD51 $INCLUDE() ;使用ADμC812預定義符 Timer_ms_const equ(65536-9216/8);當晶振頻率為11.0592MHz時,10ms對應9216個周期 ADC_tlag equ 20H.0;AD轉換標志,=1時表示采樣的8路AD值有效 ADC_coun equ 30H;用于指示當前正在處理的ADC通道 ADC_result equ 38H;38H~3FH存入0~7通道的ADC結果 ADC_acc equ 40H;40~4FH存入0~7通道的累加值 ORG 0000H start: jmp Begin ORG start+0BH Jmp Timer0_interrupt ORG start+100h Begin; mov SP,#60H mov R0,#20H;清工作單元 mov R7,#40H clr A iRAM_init; mov @R0,A inc R0 djnz R7,iRAM_init call Timer0_init;初始化T0為1.25ms中斷一次 call ADC_init;初始化ADC為單次轉換 setb EA Controlloop: Jnb ADC_flag,Controlloop …… ;將AD轉換的結果取走 clr ADC_flag;允許開始下一次轉換 jmp Controlloop ADC_init: mov ADCCON1,#01101100B;上電ADC mov ADCCON2,ADC_count;選擇轉換通道 ret Timer0_interrupt: setb SCONV;開始單次ADC轉換 mov TL0,#LOW(Timer_ms_const);裝入定時常數(shù) mov TH0,#HIGH(Timer_ms_const) push PSW mov PSW,#00001000B;使用page1 mov R2,A;暫存A累 Timer0_int_ADC: jb ADC_flag,Timer0_int_ADC_end;數(shù)據(jù)未取走則退出 Mov A,ADCCON3;讀ADC狀態(tài) jb ACC.7,Timer0_int_ADC mov A,ADC_count anl A,#07H rl A add A,#ADC_acc mov R0,A mov A,ADCDATAL;將ADC轉換結果加入累加單元 add A,@R0 mov @R0,A inc R0 mov A,ADCDATAH anl A,#0FH addc A,@R0 mov #R0,A inc ADC_count mov A,ADC_count anl A,#07H mov ADCCON2,A;選擇下一通道 mov A,ADC_count cjne A,#80H,Timer0_int_ADC_end mov ADC_count,#0 mov R0,#ADC_acc;數(shù)字濾波后存入ADC結果 mov R1,#ADC_result mov R7,#08 Timer0_int_save_ADC: clr A mov #R0,A inc R0 xch A,#R0 mov @R1,A inc R0 inc R1 djnz,R7,Timer0_int_save_ADC setb ADC_flag Timer0_int_ADC_end: Mov A,R2 Pop PSW Reti Timer0_init; mov TH0,#HIGH(Timer_ms_const);裝入定時常數(shù) mov TL0,#LOW(Timer_ms_const) anl TMOD,#11110000B orl TMDD,#00000001B Setb ET0;允許T0中斷 Setb TR0;T0開始運行 Ret END |