摘要
本作品是基于FPGA的ADC0809采集控制電路。ADC0809是美國國家半導體公司生產的CMOS工藝8通道,8位逐次逼近式A/D模數轉換器。其內部有一個8通道多路開關,它可以根據地址碼鎖存譯碼后的信號,只選通8路模擬輸入信號中的一個進行A/D轉換。
Abstract
This work is ADC0809 sampling control circuit based on FPGA. ADC0809 is produced national semiconductor CMOS 8 channel, eight successive approximation A/D analog-to-digital converter. Its internal have A 8 channel multiplex switch, it can according to the address latch signal after decoding, only gate 8 analog input signals of an A/D conversion.
1. 設計任務
基于FPGA的ADC0809控制電路設計,并闡明其控制原理。
2. ADC0809簡介
2.1. ADC0809主要特性
?、?路8位A/D轉換器,即分辨率8位。
?、诰哂修D換起??刂贫?。
?、坜D換時間為100μs
?、菽M輸入電壓范圍0~+5V,不需零點和滿刻度校準。
⑥工作溫度范圍為-40~+85攝氏度
⑦低功耗,約15mW
2.2. ADC0809外部特性(引腳功能)
?、貯DC0809芯片有28條引腳,下面說明各引腳功能。
②IN0~IN7:8路模擬量輸入端。
③D0~D7:8位數字量輸出端。
?、蹵DDA、ADDB、ADDC:3位地址輸入線,用于選通8路模擬輸入中的一路
?、軦LE:地址鎖存允許信號,輸入,高電平有效。
⑥START: A/D轉換啟動信號,輸入,高電平有效。
⑦EOC: A/D轉換結束信號,輸出,當A/D轉換結束時,此端輸出一個高電平(轉換期間一直為低電平)。
⑧OE:數據輸出允許信號,輸入,高電平有效。當A/D轉換結束時,此端輸入一個高電平,才能打開輸出三態門,輸出數字量。
?、酑LK:時鐘脈沖輸入端。要求時鐘頻率不高于640KHZ。
?、釸EF(+)、REF(-):基準電壓。
?、佗賄cc:電源,單一+5V。
?、佗贕ND:地。
2.3. ADC0809工作原理
首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此地址經譯碼選通8路模擬輸入之一到比較器。START上升沿將逐次逼近寄存器復位。下降沿啟動 A/D轉換,之后EOC輸出信號變低,指示轉換正在進行。直到A/D轉換完成,EOC變為高電平,指示A/D轉換結束,結果數據已存入鎖存器,這個信號可用作中斷申請。當OE輸入高電平 時,輸出三態門打開,轉換結果的數字量輸出到數據總線上。
3. 理論分析與計算
3.1. 系統設計原理
圖3-1:系統設計原理圖
工作原理:FPGA通過控制總線輸入采集端口地址,此地址經ADC0809譯碼后選通8路模擬采集輸入口之一。FPGA輸出控制信號使AD的START腳信號出現高電平,上升沿將逐次逼近寄存器復位,下降沿啟動 A/D轉換。啟動轉換之后ADC0809的EOC腳輸出信號變低,指示FPGA AD轉換工作正在進行。直到A/D轉換完成,EOC腳變為高電平,指示A/D轉換結束,結果數據已存入鎖存器。當FPGA檢測到EOC腳變為高電平時,控制ADC0809的OE腳變為高電平,輸出三態門打開,轉換結果的數字量輸出到數據總線上,再由FPGA存儲起來。
3.2. AD計算分析
?、俎D換量程:0~5V
?、诜直媛剩簠⒖茧妷簽?-5V的話,ADC0809為8位AD,則每一位的電壓值為(5-0)/255≈0.0196V
?、坜D換時間: 取決于芯片時鐘頻率,本作品提供給AD的時鐘頻率為500KHZ,按官方資料知道AD轉換時間為100μs(時鐘為640KHz時),按此比例算出時鐘為500KHz時的轉換時間為130μs;
?、懿杉罡哳l率:按130us轉換時間來算,依據實際經驗,在一個信號周期內采集6~7個點能使信號較好恢復原狀,則能采集的最高頻率大約為1Khz。
圖4-1:ADC0809硬件電路圖
注意事項:
?、?a target="_blank">電阻R2用于限流,發光二級管D1用于指示電源是否接通
②電容C1、C2用于濾波
?、刍瑒幼冏杵鱎1接AD采集輸入口IN3主要用于測試精確AD是否正常工作
?、?a target="_blank">排針用于連接FPGA和方便調試
?、軦D信號線與FPGA接口直接相連
⑥AD的工作頻率由FPGA分頻直接提供
5. 軟件設計
5.1. 程序流程圖
圖5-1:程序流程圖
確認AD轉換完成有三種辦法,分別是定時傳送辦法、查詢方式、中斷方式。本作品采用查詢方式,即查詢EOC的狀態,即可確認轉換是否完成,并接著進行數據傳送。
附錄:verilog程序
/*FPGA實現的程序:(verilog)
module AD0809(clk, //脈寬(至少100ns)
rst_n,
EOC, //約100us后EOC變為高電平轉換結束
START, //啟動信號,上升沿有效(至少100ns)
OE, //高電平打開三態緩沖器輸出轉換數據
ALE, //高電平有效,選擇信道口
ADDA, //因為ADDB,ADDC都接地了,這里只有ADDA為變量
DATA, //轉換數據
Clk500k,
DATA_R);
output START,OE,ALE,ADDA,clk500K;
input EOC,clk500K,rst_n;
input[7:0] DATA;
output[7:0] DATA_R;
reg START,OE,ALE,ADDA,clk500K;
reg[7:0] DATA_R;
reg[4:0] CS,NS;
Reg[5:0] counter;
/**********************產生AD時鐘500Khz***********************************/
always @(posedge clk)
begin
if(counter==6‘b11_0010)
begin
Clk500K《=~clk500k;//1000HZ
counter《=6’b0;
end
else
counter《=counter+1‘b1;
End
/****************************編碼*******************************************/
parameter IDLE=5’b00001,START_H=5‘b00010,START_L=5’b00100,CHECK_END=5‘b01000,GET_DATA=5’b10000;
/**********************利用有限狀態機設計AD工作流程************************/
always @(posedge clk500K)
case(CS)
IDLE:
NS=START_H;
START_H:
NS=START_L;
START_L:
NS=CHECK_END;
CHECK_END:
if(EOC)
NS=GET_DATA;
else
NS=CHECK_END;
GET_DATA:
NS=IDLE;
default:
NS=IDLE;
endcase
always @(posedge clk500K)
if(!rst_n)
CS《=IDLE;
else
CS《=NS;
always @(posedge clk500K)
case(NS)
IDLE: //停止轉換狀態
begin
OE《=0;
START《=0;
ALE《=0;ADDA《=1;
end
START_H:
begin
OE《=0;
START《=1; //產生啟動信號
ALE《=1;
ADDA《=1;//選擇信道口IN0
end
START_L:
begin
OE《=0;
START《=0;
ALE《=1;//啟動信號脈寬要足夠長,在啟動的時候ALE要一直有效
end
CHECK_END:
begin
OE《=0;
START《=0;
ALE《=0;
end
GET_DATA:
begin
OE《=1; //高電平打開三態緩沖器輸出轉換數據
DATA_R《=DATA;//提取轉換數據
START《=0;
ALE《=0;
end
default:
begin
OE《=0;
START《=0;
ALE《=0;
ADDA《=0;
end
endcase
endmodule
評論
查看更多