資源描述:
《基于ad7819的ad測(cè)試板設(shè)計(jì)(附原理圖和源代碼)解析》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、使用芯片為AD7819,原理圖如下:制成PCB板子后,直插在黑金FPGA開(kāi)發(fā)板AX309的J3引腳,與FPGA通信。FPGA的主程序如下:`timescale1ns/1ps////////////////////////////////////////////////////////////////////////////////////Company://Engineer:////CreateDate:18:33:5703/12/2017//DesignName://ModuleName:AD_ct
2、rl//ProjectName://TargetDevices://Toolversions://Description:////Dependencies:////Revision://Revision0.01-FileCreated//AdditionalComments:////////////////////////////////////////////////////////////////////////////////////moduleAD_ctrl(inputCLK,inputRST
3、n,inputBUSY,input[7:0]DATAIN,//inputStart_sig,outputRD,outputCS,outputCONVST,outputreg[3:0]ctrl_state,outputDone_sig);regBusy_r;regDone_sig_r;assignDone_sig=Done_sig_r;regCONVST_r;assignCONVST=CONVST_r;regCS_r;assignCS=CS_r;regRD_r;assignRD=RD_r;//處于測(cè)試需
4、要,選擇了AD手冊(cè)上的136k的采樣頻率??偟闹芷跀?shù)為368,去除t_power_up和t_relinquish,t_relinquish可取322。parametert_power_up1=9'd40;//(1.5μs對(duì)應(yīng)的時(shí)鐘數(shù)為75,由于使用mode2,所以選擇了較小的40個(gè)周期。//parametert_convst_width=8'd35;//parametert_busy=8'd230;parametert_wait=9'd265;//t-wait=剩下的t_power_up+t_busy
5、。前一個(gè)的值是35,后一個(gè)的值取了230.parametert_relinquish=9'd6;//100ns,算作6個(gè)吧。本來(lái)可以是想著取322的,從而使得周期與chipscope的采樣周期相同,然而實(shí)測(cè)波形經(jīng)FFT后卻有很大諧波失真。因此等待時(shí)間設(shè)置為6個(gè)時(shí)鐘周期。//reg[3:0]ctrl_state;reg[8:0]ctrl_clk_r;reg[7:0]data_in_r;reg[8:0]chip_clk_cnt;regchip_clk;always@(posedgeCLKornegedge
6、RSTn)//處于測(cè)試需要,選擇了AD手冊(cè)上的136k的采樣頻率。beginif(!RSTn)beginchip_clk_cnt<=9'd0;chip_clk<=0;endelseif(chip_clk_cnt==184)beginchip_clk<=0;chip_clk_cnt<=chip_clk_cnt+1;endelseif(chip_clk_cnt==368)beginchip_clk<=1;chip_clk_cnt<=9'd0;endelsechip_clk_cnt<=chip_clk_cn
7、t+1;endalways@(posedgeCLKornegedgeRSTn)if(!RSTn)beginCONVST_r<=1'd0;//按照芯片收測(cè),要先置零CS_r<=1'd1;RD_r<=1'd1;ctrl_state<=4'd0;data_in_r<=8'd0;Busy_r<=1'd0;ctrl_clk_r<=9'd0;endelsecase(ctrl_state)0://1.5μs的power_upbeginCONVST_r<=1'd1;if(ctrl_clk_r==t_power_up1
8、)beginctrl_state<=4'd1;CONVST_r<=1'd0;ctrl_clk_r<=9'd0;endelsebeginctrl_state<=4'd0;ctrl_clk_r<=ctrl_clk_r+9'd1;endend1:beginif(ctrl_clk_r==t_wait)//t1beginctrl_state<=4'd2;ctrl_clk_r<=9'd0;endelsebeginctrl_clk_r<=ctrl_clk_r+9'd1