德州儀器AMC1204的應(yīng)用指南
2 調(diào)制器輸出濾波的設(shè)計(jì)
AMC1204 輸出1 比特位寬由0 和1 組成的數(shù)據(jù)流,數(shù)據(jù)流中1 的密度與模擬輸入電壓成正比。當(dāng)輸入電壓為250mV 時(shí),輸出1 的比例為89.0625%;當(dāng)輸入電壓為-250mV 時(shí),輸出1 的比例為10.9375%;當(dāng)輸入電壓為0mV 時(shí),輸出1 的比例為50%。當(dāng)輸入電壓從-250mV 到+250mV 之間,AMC1204 的轉(zhuǎn)換性能可以得到保障。為了得到真實(shí)的輸出數(shù)據(jù)信息,一般需要在輸出后端進(jìn)行數(shù)字濾波處理,實(shí)際應(yīng)用中可以采用以下兩種濾波器對(duì)輸出數(shù)據(jù)進(jìn)行處理。
2.1 移動(dòng)平均濾波器
移動(dòng)平均濾波器比較簡(jiǎn)單,它是取輸入信號(hào)的最近的一些值,進(jìn)行算術(shù)平均,相當(dāng)于一個(gè)低通濾波器,濾除高頻分量,保留低頻分量。在時(shí)鐘clk 的上升沿,對(duì)AMC1204 輸出的高脈沖進(jìn)行計(jì)數(shù),計(jì)算M 個(gè)clk 的上升沿時(shí),對(duì)應(yīng)的高電平脈沖個(gè)數(shù)N。則,對(duì)應(yīng)的轉(zhuǎn)換結(jié)果為(640*N/M-320)mV。平均的項(xiàng)數(shù)越多,即M 越大,則得到變化越緩慢的輸出信號(hào),但得到的精度也越高。
圖5 AMC1204 輸出數(shù)據(jù)波形
需要注意的是,在實(shí)際應(yīng)用中,這種方法必須平均盡可能多的輸入信號(hào)才能獲得比較高的精度。移動(dòng)平均濾波器實(shí)現(xiàn)比較簡(jiǎn)單,不需要單獨(dú)增加DSP 或FPGA 即可實(shí)現(xiàn)。但是,移動(dòng)平均濾波器的頻域效果較差,滾降較慢,因此,在檢測(cè)低頻信號(hào)及對(duì)精度要求不高的應(yīng)用中,可以考慮使用這種方法。但是,對(duì)于精度要求比較高的應(yīng)用中,需要考慮使用性能更好的濾波器,如Sinc 濾波器。 2.2 Sinc 濾波器
Sinc濾波器具有良好的頻域特性,較低的成本和功耗,延時(shí)較低,因此,廣泛用作Delta-Sigma DAC 的濾波器。Sinc 濾波器可通過(guò)專門(mén)的濾波器芯片或者通過(guò)FPGA 或DSP 算法來(lái)實(shí)現(xiàn)。
AMC1210 是一個(gè)4 通道的數(shù)字濾波器,芯片輸出接口可設(shè)置為SPI 接口或者并行接口方式,方便與CPU 進(jìn)行數(shù)據(jù)通信。數(shù)字濾波器可設(shè)置為Sincfast,,或者方式。實(shí)際應(yīng)用時(shí),由于濾波器具有更好的低通特性,建議將AMC1210 配置為濾波器,過(guò)采樣率(OSR)設(shè)為256以獲得最優(yōu)的轉(zhuǎn)換結(jié)果。
圖6 AMC1204 與AMC1210 的連接
此外,也可以通過(guò)FPGA 或DSP 來(lái)實(shí)現(xiàn)Sinc 濾波器算法。濾波器的基本架構(gòu)如圖7 所示。
圖7 調(diào)制器與抽取濾波器的基本架構(gòu)
以下是用VHDL 語(yǔ)言實(shí)現(xiàn)SINC3 濾波器的一段示例程序。其中,CNR=MCLK/M,M 為抽取率(即過(guò)采樣率OSR)。
圖8數(shù)字濾波器架構(gòu)
圖8 的示例代碼:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity FLT is
port(RESN, MOUT, MCLK, CNR : in std_logic;
CN5 : out std_logic_vector(23 downto 0));
end FLT;
architecture RTL of FLT is
signal Z1 : std_logic_vector(23 downto 0);
signal Z2 : std_logic_vector(23 downto 0);
signal Z3 : std_logic_vector(23 downto 0);
signal Z4 : std_logic_vector(23 downto 0);
signal Z5 : std_logic_vector(23 downto 0);
signal Z6 : std_logic_vector(23 downto 0);
signal Z7 : std_logic_vector(23 downto 0);
begin
process(MCLK, RESN)
begin
if RESN = ‘0’ then
Z1 《= (others =》 ‘0’);
Z2 《= (others =》 ‘0’);
評(píng)論