久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

基于FPGA的AD采集

 火龍ocnunr7cj9 2021-01-06

LVDS(Low-Voltage Differential Signaling)低電壓差分信號,,是一種低功耗、低誤碼率、低串?dāng)_和低輻射的差分信號技術(shù),。
KSPS(Kilo Samples per Second),,采樣千次每秒,,是轉(zhuǎn)化速率的單位,。

逐次逼近型ADC由比較器包括n位逐次比較型AD轉(zhuǎn)換器,它由控制邏輯電路,、時序產(chǎn)生器,、移位寄存器、DA轉(zhuǎn)換器及電壓比較器組成,。
在這里插入圖片描述
逐次逼近轉(zhuǎn)換過程和用天平秤重相似,,從最重的開始試放與被秤物體進(jìn)行比較,若物體重于砝碼,,則該砝碼保留,,否則移去。再加上第二個次重砝碼,,由物體的重量是否大于砝碼的重量決定第二個砝碼是否保留,。
逐次逼近AD轉(zhuǎn)換器,就是將輸入模擬信號與不同的參考電壓作多次比較,,使轉(zhuǎn)換所得的數(shù)字量在數(shù)值上逐次逼近模擬量對應(yīng)值,。如上圖,它由脈沖啟動后,,在第一個時鐘脈沖作用下,,控制電路使時序產(chǎn)生器的最高位置1,其他位置0,,其輸出數(shù)據(jù)寄存器將100…000送到DA轉(zhuǎn)換器,輸入電壓首先與D/A器輸出電壓(VREF/2)進(jìn)行比較,,如果V1 ≥ (VREF/2),,比較器輸出為1,否則為0.比較結(jié)果存于數(shù)據(jù)的寄存器的Dn-1位,。然后在第二個時鐘脈沖(CP)下,,移位寄存器的次高位置1,其他低位置0. 如最高位已存1,,則此時vO=(3/4)VREF,。于是v1再與(3/4)VREF相比較,如v1≥(3/4)VREF,,則次高位Dn-2存1,,否則Dn-2=0;如最高位為0,則vO=VREF/4,,與vO比較,,如v1≥VREF/4,則Dn-2位存1,,否則存0……,。以此類推,逐次比較得到輸出數(shù)字量,。
基準(zhǔn)電壓VREF,。

舉例如下:電路為8位AD轉(zhuǎn)換器,輸入模擬量vA=6.84v,,DA轉(zhuǎn)換器基準(zhǔn)電壓VREF=10v,。當(dāng)啟動脈沖低電平到來后轉(zhuǎn)換開始,在第一個CP作用下,,數(shù)據(jù)寄存器將D7~D0=10000000送入D/A轉(zhuǎn)換器,,其輸出電壓v0=5V,vA與v0比較,,vA>v0存1,;第二個CP到來時,寄存器輸出D7~D0=11000000,,v0為7.5V,,vA再與7.5V比較,因vA<7.5V,,所以D6存0,;輸入第三個CP時,D7~D0=10100000,,v0=6.25V,;vA再與v0比較,……如此重復(fù)比較下去,,經(jīng)8個時鐘周期,,轉(zhuǎn)換結(jié)束。由圖中v0的波形可見,,在逐次比較過程中,,與輸出數(shù)字量對應(yīng)的模擬電壓v0逐漸逼近vA值,最后得到A/D轉(zhuǎn)換器轉(zhuǎn)換結(jié)果D7~D0為10101111,。該數(shù)字量所對應(yīng)的模擬電壓為6.8359375V,,與實(shí)際輸入的模擬電壓6.84V 的相對誤差僅為 0.06%
在這里插入圖片描述
在這里插入圖片描述

本實(shí)驗(yàn)是打算采用AD7928這個數(shù)據(jù)采集設(shè)備,這是一個12位高速,、低功耗,、8通道逐次逼近型ADC,。采用單電源工作,電源電壓為2.7v~5.25v,,最高吞吐速率可以達(dá)到1Msps,。內(nèi)置有低噪聲、款帶寬采樣保持放大器,,可以處理8Mhz以上的輸入頻率,。

通過配置控制寄存器,器件的模擬輸入范圍可以在0v到REFin或0v到2REFin間選擇,,可采用標(biāo)準(zhǔn)二進(jìn)制或者二進(jìn)制補(bǔ)碼輸出編碼,。AD7928具有八個通道序列器的單端模擬輸入,可以通過預(yù)先編程選擇通道轉(zhuǎn)換順序,。
在這里插入圖片描述
AD7928的最小輸入頻率是50Khz,。
在這里插入圖片描述
AD7928的轉(zhuǎn)換時間取決于SCLK頻率,該頻率同時用作轉(zhuǎn)換控制的主時鐘,。
在這里插入圖片描述
靈活的功耗/串行時鐘管理,。轉(zhuǎn)換速率取決于串行時鐘,通過提高串行時鐘還可以縮短轉(zhuǎn)換時間,。這些器件還提供多種關(guān)斷模式,,可以在較低吞吐量下實(shí)現(xiàn)最高功效,完全關(guān)斷時最大功耗是0.5ua,。

在這里插入圖片描述
VREF = 2.5v
Fclkmax = 20Mhz

時序規(guī)格
在這里插入圖片描述
控制寄存器:
在這里插入圖片描述
序列選擇:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
但是現(xiàn)在又有個問題,,那就是,是否選擇了這個SEQ=1,,SHADOW=1的模式,,從0到指定的地址,會循環(huán)起來呢,?

在這里插入圖片描述
模擬輸入選擇
8個模擬輸入通道中的任何一個都可以選擇用來進(jìn)行轉(zhuǎn)換,,方法是控制寄存器中的地址位ADD2至ADD0對多路復(fù)用器進(jìn)行編程。還可配置為在選定的多個通道間自動循環(huán),。通過控制寄存器中的SEQ和SHADOW位訪問序列器功能,。

通過閱讀手冊第20頁,發(fā)現(xiàn)有三種方式可以解決上述的問題,。
(1)、設(shè)置SEQ=0,,SHADOW=1,,這種方式然后再對SHADOW寄存器進(jìn)行配置。
(2),、設(shè)置SEQ=1,,SHADOW=1.也可以實(shí)現(xiàn)通道循環(huán),,且不需要對對SHADOW寄存器進(jìn)行配置。但是這個配置必須是從通道0到指定通道依次遞增,,然后再從0開始,。但是WRITE必須是低電平。如果是高電平,,那就必須再將SEQ設(shè)為1,,SHADOW設(shè)為0。
(3),、因?yàn)樯弦淮无D(zhuǎn)換輸出的時候會把下一次轉(zhuǎn)換的通道的地址給出,,從而設(shè)計可以讓8個通道循環(huán)起來,這個方法設(shè)計出來只要按照時序要求,,就基本不會出現(xiàn)錯誤

目前存在的問題是,,這只是8通道的AD采集,但是實(shí)驗(yàn)需要用到32個通道,,怎么去用這一個AD采集模塊去完成4次8通道AD采集,??,?

同時使用8個通道只需要對控制寄存器的參數(shù)進(jìn)行輸入配置,,即可讓8個通道循環(huán)使用。

在這里插入圖片描述
在這里插入圖片描述
AD7928的數(shù)據(jù)輸出包括一個前置0和3個地址位(表示轉(zhuǎn)換結(jié)果對應(yīng)的的通道),,然后就是12個轉(zhuǎn)換數(shù)據(jù)位(MSB)優(yōu)先,。輸出編碼方式可選擇標(biāo)準(zhǔn)二進(jìn)制或二進(jìn)制補(bǔ)碼,通過控制寄存器中的CODING位選擇,。
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
針對上述的問題,,準(zhǔn)備在使用這個AD7928之前先給那32路的信號源加上4個八選一的模擬芯片,這樣AD7928這個模塊就只需要四個通道就可以了,,針對這四個通道進(jìn)行循環(huán),。這樣的話,F(xiàn)PGA不光要給AD7928和八選一芯片加上控制,。max4581芯片(模擬開關(guān))
在這里插入圖片描述
在這里插入圖片描述

我想想該怎么加控制,?
把這個AD7928的通道選擇為四個,這四個通道進(jìn)行循環(huán),。每個通道傳輸來自一個八選一模塊的輸出,,然后八路數(shù)據(jù)在這個通道里面依次傳輸。

這個代碼是單純的啟動AD7928八個通道連續(xù)循環(huán)采集數(shù)據(jù),。

module ad7928_ctrl32(input clk,input rst_n,//spiinput adc_dout,output reg adc_cs,output reg adc_sclk,output reg adc_din,//othersoutput reg dout_vld, //每個轉(zhuǎn)換結(jié)束輸出一個標(biāo)志位output [2:0] adc_sel, //控制8選1output reg [18:0] dout,output reg ad_change_flag //每組(即32個PD)結(jié)束之后輸出一個標(biāo)志位);parameter WRITE = 1'b1;parameter PM = 2'b11;parameter SEQ =1'b0;parameter SHADOW = 1'b0;parameter RANGE = 1'b0;parameter CODING = 1'b1;//先設(shè)計一個時鐘頻率為1Mhz的,,那么周期就是1000nsreg [5:0] cnt0;wire add_cnt0 = 1'b1;wire end_cnt0 = add_cnt0 && cnt0==6'd49;always @ (posedge clk or negedge rst_n) beginif(!rst_n) begincnt0 <= 6'd0;endelse if(add_cnt0) beginif(end_cnt0) begincnt0 <= 6'd0;endelse begincnt0 <= cnt0 + 1'b1;endendend//每次采集16位數(shù)據(jù),并且cs的上升沿與下降沿之間最少50nsreg [4:0] cnt1;wire add_cnt1 = end_cnt0;wire end_cnt1 = add_cnt1 && cnt1==5'd17;always @ (posedge clk or negedge rst_n) beginif(!rst_n) begincnt1 <= 5'b0;endelse if(add_cnt1) beginif(end_cnt1) begincnt1 <= 5'b0;endelse begincnt1 <= cnt1 + 1'b1;endendend//切換四個通道reg [2:0] cnt2;wire add_cnt2 = end_cnt1;wire end_cnt2 = add_cnt2 && cnt2 == 3'd3;always @ (posedge clk or negedge rst_n) beginif(!rst_n) begincnt2 <= 3'b0;endelse if(add_cnt2) beginif(end_cnt2) begincnt2 <= 3'b0;endelse begincnt2 <= cnt2 + 1'b1;endendend//切換那4個8選1通道reg [2:0] cnt3;wire add_cnt3 = end_cnt2;wire end_cnt3 = add_cnt3 && cnt3 == 3'd7;always @ (posedge clk or negedge rst_n) beginif(!rst_n) begincnt3 <= 3'b0;endelse if(add_cnt3) beginif(end_cnt3) begincnt3 <= 3'b0;endelse begincnt3 <= cnt3 + 1'b1;endendend//產(chǎn)生adc_csalways @ (posedge clk or negedge rst_n) beginif(!rst_n) beginadc_cs <= 1'b1;endelse if(add_cnt0 && cnt0==6'd24 && cnt1==5'd0) beginadc_cs <= 1'b0;endelse if(add_cnt0 && cnt0==6'd24 && cnt1==5'd17) beginadc_cs <= 1'b1;endend//產(chǎn)生adc_sclkalways @ (posedge clk or negedge rst_n) beginif(!rst_n) beginadc_sclk <= 1'b1;endelse if(add_cnt0 && cnt0==6'd24 && cnt1>=5'd1 && cnt1<5'd17) beginadc_sclk <= 1'b0;endelse if(end_cnt0) beginadc_sclk <= 1'b1;endend//給ADC7928輸入控制寄存器wire [15:0] data;assign data = {WRITE,SEQ,1'b0,cnt2,PM,SHADOW,1'b0,RANGE,CODING,4'b0};always @ (posedge clk or negedge rst_n) beginif(!rst_n) beginadc_din <= 0;endelse if(end_cnt0 && cnt1<16) beginadc_din <= data[15-cnt1];endend//輸出ADC7928的16位數(shù)據(jù)reg [15:0] tmp_dout;always @ (posedge clk or negedge rst_n) beginif(!rst_n) begintmp_dout <= 16'd0;endelse if(add_cnt0 && cnt0==6'd24 && cnt1>=1 && cnt1 <17) begintmp_dout[16-cnt1] <= adc_dout;endendalways @ (posedge clk or negedge rst_n) beginif(!rst_n) begindout <= 19'd0;endelse if(cnt1==5'd16)begindout <= {cnt3,tmp_dout};endendalways @ (posedge clk or negedge rst_n) beginif(!rst_n) beginad_change_flag <= 1'b0;endelse if(cnt1==5'd16 && end_cnt3) beginad_change_flag <= 1'b1;endelse beginad_change_flag <= 1'b0;endendalways @ (posedge clk or negedge rst_n) beginif(!rst_n) begindout_vld <= 1'b0;endelse if(add_cnt0 && cnt0==6'd25 && cnt1==5'd16)begindout_vld <= 1'b1;endelse if(add_cnt0 && cnt0==6'd24 && cnt1==5'd16) begindout_vld <= 1'b0;endendassign adc_sel = cnt3;endmodule
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184

這個代碼仿真過了,,沒錯,,具體還得下板子
后面有機(jī)會再試試其他方法,,設(shè)計這個循環(huán)通道的代碼

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多