TMS320F2812是德州儀器公司(TI)推出的主頻最高可達150 MHz的32位高性能數字信號處理器(DSP),內部集成了ADC轉換模塊。ADC模塊是一個12位、具有流水線結構的模數轉換器,內置雙采樣保持器(S/H),可多路選擇16通道輸入,快速轉換時間運行在25 MHz、ADC時鐘或12.5 Msps,16個轉換結果寄存器可工作于連續自動排序模式或啟動/停止模式。
在現代電子系統中,作為模擬系統與數字系統接口的關鍵部件,模數轉換器(ADC)已經成為一個相當重要的電路單元,用于控制回路中的數據采集。在實際使用中,發現該ADC的轉換結果誤差較大,如果直接將此轉換結果用于控制回路,必然會降低控制精度。為了克服這個缺點,提高其轉換精度,筆者在進行了大量實驗后,提出一種用于提高TMS320F2812ADC精度的方法,使得ADC精度得到有效提高。
1 ADC模塊誤差的定義及影響分析
1.1 誤差定義
常用的A/D轉換器主要存在:失調誤差、增益誤差和線性誤差。這里主要討論失調誤差和增益誤差。理想情況下,ADC模塊轉換方程為y=x×mi,式中x=輸入計數值 =輸入電壓×4095/3;y=輸出計數值。在實際中,A/D轉換模塊的各種誤差是不可避免的,這里定義具有增益誤差和失調誤差的ADC模塊的轉換方程為y=x×ma±b,式中ma為實際增益,b為失調誤差。通過對F2812的ADC信號采集進行多次測量后,發現ADC增益誤差一般在5%以內,即0.95
圖1理想ADC轉換與實際ADC轉換
1.2 影響分析
在計算機測控系統中,對象數據的采集一般包含兩種基本物理量:模擬量和數字量。對于數字量計算機可以直接讀取,而對于模擬量只有通過轉換成數字量才能被計算機所接受,因此要實現對模擬量準確的采集及處理,模數轉換的精度和準確率必須滿足一定的要求。由于F2812的ADC具有一定增益誤差的偏移誤差,所以很容易造成系統的誤操作。下面分析兩種誤差對線性電壓輸入及A/D轉換結果的影響。
F2812用戶手冊提供的ADC模塊輸入模擬電壓為0~3 V,而實際使用中由于存在增益誤差和偏移誤差,其線性輸入被減小,分析如表1所列。
下面以y=x×1.05+80為例介紹各項值的計算。當輸入為0時,輸出為80,由于ADC的最大輸出值為4095,則由式y=x×1.05+80求得輸入最大電壓值為2.8013。 因此,交流輸入電壓范圍為1.4007±1.4007,此時有效位數N=ln4015/ln2=11.971,mV/計數位=2.8013/4015=0?6977,其余項計算同上。表1中的最后一行顯示了ADC操作的安全參數,其有效位數減少為11.865位,mV/計數位從0.7326增加為0.7345,這將會使轉換結果減少0.2%。
在實際應用中,所采集的信號經常為雙極型信號,因此信號在送至ADC之前需要添加轉換電路,將雙極型信號轉化為單極型信號。典型的轉換電路如圖2所示。對于ADC模塊,考慮到增益誤差和失調誤差對輸入范圍的影響,轉換電路需要調整為如圖3所示的電路。在圖3中,輸入增益誤差的參考范圍已經改變。
對于雙極性輸入,其0 V輸入的增益誤差對應單極性輸入的1.4315V的增益誤差,因此,原有ADC的增益誤差和失調誤差被增大了。例如,如果ADC的增益誤差為5%,失調誤差為2%,則其雙極性的增益誤差計算如下:雙極性輸入x′= 0.0000 V,單極性的ADC輸入電壓x = 1.4315 V,其理想的轉換值為ye=1.4315×4095/3=1954,而由ya=1954×1.05+80計算得實際轉換值,則雙極性增益誤差為ya-ye=2132-1954=178(9.1%誤差)。通過計算可以看出,ADC的誤差大大增加,因此要使用ADC進行數據采集,就必須對ADC進行校正,提高其轉換精度。
圖2理想情況下的電壓轉換電路
圖3校正后的電壓轉換電路
2 ADC校正
2.1校正方法
通過以上分析可以看出,F2812的ADC轉換精度較差的主要原因是存在增益誤差和失調誤差,因此要提高轉換精度就必須對兩種誤差進行補償。對于ADC模塊采取了如下方法對其進行校正。
選用ADC的任意兩個通道作為參考輸入通道,并分別提供給它們已知的直流參考電壓作為輸入(兩個電壓不能相同),通過讀取相應的結果寄存器獲取轉換值,利用兩組輸入輸出值求得ADC模塊的校正增益和校正失調,然后利用這兩個值對其他通道的轉換數據進行補償,從而提高了ADC模塊轉換的準確度。圖1示出了如何利用方程獲取ADC的校正增益和校正失調。具體計算過程如下:
① 獲取已知輸入參考電壓信號的轉換值yL和yh。
② 利用方程y=x×ma+b及已知的參考值(xL,yL)和(xH,yH)計算實際增益及失調誤差:
實際增益ma=(yH-yL)/(xH-xL);
失調誤差 b="yL" -xL×ma。
③ 定義輸入x=y×CalGain-CalOffset,則由方程y=x×ma+b得校正增益CalGain=1/ma=(xH-xL)/(yH -yL),校正失調CalOffset=b/ma=yL/ma-xL。
④ 將所求的校正增益及校正失調應用于其他測量通道,對ADC轉換結果進行校正。
上述即為實現ADC校正的全過程,通過使用這種方法,ADC的轉換精度有很大提高。由于這種方法是通過某個通道的誤差去修正其他通道的誤差,因此要采用這種方法,必須保證通道間具有較小的通道誤差。對F2812ADC轉換模塊,由于其通道間的增益及失調誤差均在0.2%以內,所以可以采用這種方法對其進行校正。
2.2 軟件實現
與一般的ADC轉換程序相比,帶校正的ADC轉換程序需要另外增加兩個程序段:校正值的計算以及利用校正值對ADC進行處理。為了方便操作及轉換結果獲取,實現中定義了結構體變量ADC?CALIBRATION?VARS,用來保存ADC轉換后的各種數據。另外,提高程序的通用性,采樣的方式、參考電壓值及高低電壓理想的轉換值均在ADC轉換頭文件ADCCalibration.h中定義。ADC?CALIBRATION?VARS定義如下:
typedefstruct{
Uint*RefHighChAddr;//參考高電壓所連通道地址
Uint*RefHighChAddr;//參考低電壓所連通道地址
Uint*ChoAddr;//0通道地址
UintAvg_RefHighActualCount;//參考高電壓實際轉換值
UintAvg_RefHighActualCount;//參考低電壓實際轉換值
UintRefHighIdealCount;//參考高電壓理想轉換值
UintRefLowCount;//參考低電壓實際轉換值
UintCalGain;//校正增益
UintCalOffset;//校正失調
//校正通道的轉換值
UintCh0;
UintCh16;
}ADC CALIBRATION VARS;
整個A/D轉換任務由中斷函數intADC()和主函數ADCCalibration()構成。中斷函數主要用于轉換數據的讀取,而校正參數計算及各通道轉換結果的修正在主函數完成。校正完后,將結果保存到所定義的結構體變量中。此處,對ADC的校正采用單采樣單校正的處理方法,當然也可以采用多采樣單校正的處理方法,但是為了提高精度,如果設計系統開支允許,建議最好使用單采樣單校正的方法,以提高ADC精度。
2.3實驗結果
筆者在自己所使用的F2812系統上進行了實驗,選用1 V和2 V作為參考電壓,選用通道A6和A7作為參考通道,通過對0 V、0.5 V、1.5 V、2.5 V校正前后的數據進行比較,發現采用上述校正方法后,ADC的轉換準確度明顯得到改善,比較結果如表2所列。
注:由參考電壓計算得:CalGain=0.965;CalOffset=6.757。
表2中所給出的數據只是筆者進行大量實驗后所得數據的一組,實驗證明通過校正后ADC的誤差能被控制在0.5%以內,這對大多數測控系統來說已滿足要求,對于轉換精度要求更高的系統,可以采用外擴A/D轉換器。
結語
A/D轉換器是數據采集電路的核心部件,其良好的精度與準確性是提高數據采集電路性能的關鍵。TMS320F2812作為TI公司推出的一款集微控制器及數字信號處理器于一身的32位處理器,以其運行速度高和強大的處理功能得到廣泛應用,而對其ADC模塊精度的提高,將進一步提高其在控制領域中的應用。本文提出的用于提高ADC模塊精度的校正算法,經實際應用證明實用可行。
在現代電子系統中,作為模擬系統與數字系統接口的關鍵部件,模數轉換器(ADC)已經成為一個相當重要的電路單元,用于控制回路中的數據采集。在實際使用中,發現該ADC的轉換結果誤差較大,如果直接將此轉換結果用于控制回路,必然會降低控制精度。為了克服這個缺點,提高其轉換精度,筆者在進行了大量實驗后,提出一種用于提高TMS320F2812ADC精度的方法,使得ADC精度得到有效提高。
1 ADC模塊誤差的定義及影響分析
1.1 誤差定義
常用的A/D轉換器主要存在:失調誤差、增益誤差和線性誤差。這里主要討論失調誤差和增益誤差。理想情況下,ADC模塊轉換方程為y=x×mi,式中x=輸入計數值 =輸入電壓×4095/3;y=輸出計數值。在實際中,A/D轉換模塊的各種誤差是不可避免的,這里定義具有增益誤差和失調誤差的ADC模塊的轉換方程為y=x×ma±b,式中ma為實際增益,b為失調誤差。通過對F2812的ADC信號采集進行多次測量后,發現ADC增益誤差一般在5%以內,即0.95
圖1理想ADC轉換與實際ADC轉換
1.2 影響分析
在計算機測控系統中,對象數據的采集一般包含兩種基本物理量:模擬量和數字量。對于數字量計算機可以直接讀取,而對于模擬量只有通過轉換成數字量才能被計算機所接受,因此要實現對模擬量準確的采集及處理,模數轉換的精度和準確率必須滿足一定的要求。由于F2812的ADC具有一定增益誤差的偏移誤差,所以很容易造成系統的誤操作。下面分析兩種誤差對線性電壓輸入及A/D轉換結果的影響。
F2812用戶手冊提供的ADC模塊輸入模擬電壓為0~3 V,而實際使用中由于存在增益誤差和偏移誤差,其線性輸入被減小,分析如表1所列。
下面以y=x×1.05+80為例介紹各項值的計算。當輸入為0時,輸出為80,由于ADC的最大輸出值為4095,則由式y=x×1.05+80求得輸入最大電壓值為2.8013。 因此,交流輸入電壓范圍為1.4007±1.4007,此時有效位數N=ln4015/ln2=11.971,mV/計數位=2.8013/4015=0?6977,其余項計算同上。表1中的最后一行顯示了ADC操作的安全參數,其有效位數減少為11.865位,mV/計數位從0.7326增加為0.7345,這將會使轉換結果減少0.2%。
在實際應用中,所采集的信號經常為雙極型信號,因此信號在送至ADC之前需要添加轉換電路,將雙極型信號轉化為單極型信號。典型的轉換電路如圖2所示。對于ADC模塊,考慮到增益誤差和失調誤差對輸入范圍的影響,轉換電路需要調整為如圖3所示的電路。在圖3中,輸入增益誤差的參考范圍已經改變。
對于雙極性輸入,其0 V輸入的增益誤差對應單極性輸入的1.4315V的增益誤差,因此,原有ADC的增益誤差和失調誤差被增大了。例如,如果ADC的增益誤差為5%,失調誤差為2%,則其雙極性的增益誤差計算如下:雙極性輸入x′= 0.0000 V,單極性的ADC輸入電壓x = 1.4315 V,其理想的轉換值為ye=1.4315×4095/3=1954,而由ya=1954×1.05+80計算得實際轉換值,則雙極性增益誤差為ya-ye=2132-1954=178(9.1%誤差)。通過計算可以看出,ADC的誤差大大增加,因此要使用ADC進行數據采集,就必須對ADC進行校正,提高其轉換精度。
圖2理想情況下的電壓轉換電路
圖3校正后的電壓轉換電路
2 ADC校正
2.1校正方法
通過以上分析可以看出,F2812的ADC轉換精度較差的主要原因是存在增益誤差和失調誤差,因此要提高轉換精度就必須對兩種誤差進行補償。對于ADC模塊采取了如下方法對其進行校正。
選用ADC的任意兩個通道作為參考輸入通道,并分別提供給它們已知的直流參考電壓作為輸入(兩個電壓不能相同),通過讀取相應的結果寄存器獲取轉換值,利用兩組輸入輸出值求得ADC模塊的校正增益和校正失調,然后利用這兩個值對其他通道的轉換數據進行補償,從而提高了ADC模塊轉換的準確度。圖1示出了如何利用方程獲取ADC的校正增益和校正失調。具體計算過程如下:
① 獲取已知輸入參考電壓信號的轉換值yL和yh。
② 利用方程y=x×ma+b及已知的參考值(xL,yL)和(xH,yH)計算實際增益及失調誤差:
實際增益ma=(yH-yL)/(xH-xL);
失調誤差 b="yL" -xL×ma。
③ 定義輸入x=y×CalGain-CalOffset,則由方程y=x×ma+b得校正增益CalGain=1/ma=(xH-xL)/(yH -yL),校正失調CalOffset=b/ma=yL/ma-xL。
④ 將所求的校正增益及校正失調應用于其他測量通道,對ADC轉換結果進行校正。
上述即為實現ADC校正的全過程,通過使用這種方法,ADC的轉換精度有很大提高。由于這種方法是通過某個通道的誤差去修正其他通道的誤差,因此要采用這種方法,必須保證通道間具有較小的通道誤差。對F2812ADC轉換模塊,由于其通道間的增益及失調誤差均在0.2%以內,所以可以采用這種方法對其進行校正。
2.2 軟件實現
與一般的ADC轉換程序相比,帶校正的ADC轉換程序需要另外增加兩個程序段:校正值的計算以及利用校正值對ADC進行處理。為了方便操作及轉換結果獲取,實現中定義了結構體變量ADC?CALIBRATION?VARS,用來保存ADC轉換后的各種數據。另外,提高程序的通用性,采樣的方式、參考電壓值及高低電壓理想的轉換值均在ADC轉換頭文件ADCCalibration.h中定義。ADC?CALIBRATION?VARS定義如下:
typedefstruct{
Uint*RefHighChAddr;//參考高電壓所連通道地址
Uint*RefHighChAddr;//參考低電壓所連通道地址
Uint*ChoAddr;//0通道地址
UintAvg_RefHighActualCount;//參考高電壓實際轉換值
UintAvg_RefHighActualCount;//參考低電壓實際轉換值
UintRefHighIdealCount;//參考高電壓理想轉換值
UintRefLowCount;//參考低電壓實際轉換值
UintCalGain;//校正增益
UintCalOffset;//校正失調
//校正通道的轉換值
UintCh0;
UintCh16;
}ADC CALIBRATION VARS;
整個A/D轉換任務由中斷函數intADC()和主函數ADCCalibration()構成。中斷函數主要用于轉換數據的讀取,而校正參數計算及各通道轉換結果的修正在主函數完成。校正完后,將結果保存到所定義的結構體變量中。此處,對ADC的校正采用單采樣單校正的處理方法,當然也可以采用多采樣單校正的處理方法,但是為了提高精度,如果設計系統開支允許,建議最好使用單采樣單校正的方法,以提高ADC精度。
2.3實驗結果
筆者在自己所使用的F2812系統上進行了實驗,選用1 V和2 V作為參考電壓,選用通道A6和A7作為參考通道,通過對0 V、0.5 V、1.5 V、2.5 V校正前后的數據進行比較,發現采用上述校正方法后,ADC的轉換準確度明顯得到改善,比較結果如表2所列。
注:由參考電壓計算得:CalGain=0.965;CalOffset=6.757。
表2中所給出的數據只是筆者進行大量實驗后所得數據的一組,實驗證明通過校正后ADC的誤差能被控制在0.5%以內,這對大多數測控系統來說已滿足要求,對于轉換精度要求更高的系統,可以采用外擴A/D轉換器。
結語
A/D轉換器是數據采集電路的核心部件,其良好的精度與準確性是提高數據采集電路性能的關鍵。TMS320F2812作為TI公司推出的一款集微控制器及數字信號處理器于一身的32位處理器,以其運行速度高和強大的處理功能得到廣泛應用,而對其ADC模塊精度的提高,將進一步提高其在控制領域中的應用。本文提出的用于提高ADC模塊精度的校正算法,經實際應用證明實用可行。
評論
查看更多