⑴ 單片機AD採集的C程序
1.你的描述有點不清,你要抄採集1600路的信號?還是要對一個信號進行1/1600的量化?如果你是要採集1600路信號,那麼你的單片機不可能有這么多引腳,只能通過模擬開關,有不可避免引進信號通路切換雜訊。
2.如果你需要採集這么多的信號,可能將將這些信號線存儲到RAM里,然後在想辦法處理一下,例如;做平均值或者減半等運算,這就就相對方便存儲一點了!
3.不過一般設計中不會采樣1600路電壓信號!你的理解有問題!
⑵ 關於單片機向串口發送AD轉換結果的程序
兄弟:不知道你玩不玩32 ,有個32 的在工程上用過,直接刷程序,串口連接電腦就可以輸出AD 轉換的結果。如果不玩32 的話。
首先第一步排查: 排查單片機能不能正確顯示 你測試到的 AD 信號,顯示正確不?
比如給他 3V 電壓 ,用數碼管顯示出來。
第二: 串口發送,找個能正確發送數據的代碼 ,直接把 ,你檢查的數值給這個變數,讓串口發送,
一步一步找問題,你絕對能解決的。我把AD0809 的代碼給你用數碼管測試
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code LEDData[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f
};
sbit OE = P1^0;
sbit EOC = P1^1;
sbit ST = P1^2;
sbit CLK = P1^3;
void DelayMS(uint ms)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void Display_Result(uchar d)
{
P2 = 0xf7;
P0 = LEDData[d%10];
DelayMS(5);
P2 = 0xfb;
P0 = LEDData[d%100/10];
DelayMS(5);
P2 = 0xfd;
P0 = LEDData[d/100];
DelayMS(5);
}
void main()
{
TMOD = 0x02;
TH0 = 0x14;
TL0 = 0x00;
IE = 0x82;
TR0 = 1;
P1 = 0x3f;
while(1)
{
ST = 0;
ST = 1;
ST = 0;
while(EOC == 0);
OE = 1;
Display_Result(P3);
OE = 0;
}
}
void Timer0_INT() interrupt 1
{
CLK = !CLK;
}
⑶ AD轉換晶元AD7321 的使用方法是怎樣的
隨著現代科學技術的日益發展,顆粒尺寸及其分布在諸如石油、冶金、制葯、建材等領域占據著越來越重要的地位。激光粒度儀就是用來丈量微小顆粒尺寸及其分布的儀器,其基本原理是光的衍射理論[1]。數據採集系統對激光粒度儀的光電探測器上光能信號的採集速度是激光粒度儀的性能指標之一,一般來說採集速度越快丈量結果的正確性、重復性和穩定性越好[2]。隨著各種新型光電探測器的不斷出現,原有的數據採集系統需要重新設計升級。在新的設計方案中,數據採集系統的模擬通道容量增加到了 112路,並且系統的採集速度也有了大幅度的進步。
FPGA具有硬體資源豐富、設計靈活等特點,適用於數據通訊、數據採集和系統控制中,特別是它的並行結構和算術運算的特點,已越來越受到科技開發職員的青睞,被廣泛應用到數據信號處理當中。對本系統而言, FPGA作為一種可編程、可重配置的數字集成電路,為實現系統的設計目標提供了有力的保證。
1 系統硬體設計
根據激光粒度儀的應用場合,本數據採集系統採用單通道採集的方案,它主要由模擬部分、數字部分和介面部分三部分組成。其中模擬部分包括光電探測器、電信號放大、多路選通、信號調理和 12位 AD轉換,數字部分則完全在 FPGA內部實現,介面部分主要是計算機的 PCI匯流排介面。系統組成框圖如圖 1所示。
光電探測器電信號放大
激光粒度儀所用的光電探測器是由多個同心的光敏環組成的,每一光敏環輸出的模擬電信號反映了照射到該環上的光能量大小。隨著對激光粒度丈量研究的不斷深進,天津大學研製的 LSA系列激光粒度儀的光電探測器組件,其模擬輸出已經發展到 96路之多[3]。為實現對這么多路模擬信號的採集,多路選通採用七片 16選 1模擬開關 DG406和一片 8 選 1模擬開關 MAX308組成雙層級聯結構,共可容納 112路模擬信號,它的地址信號是由 FPGA提供的。AD轉換晶元是數據採集系統的關鍵器件,採用 ADI公司的 12位逐次逼近型模數轉換晶元 AD7321,在本文中該晶元使用其內部的 2.5V參考電壓,模擬輸進范圍選擇為 0~10V,它使用由 FPGA分頻產生的 8.3MHz時鍾信號,這樣該晶元可在 2μs內完成一次模數轉換。若連續兩次采樣間隔的時間設置為 2μs,則系統的數據均勻傳輸速率可達到3Mbps。
2 系統軟體設計
2.1 FPGA內部邏輯設計
本文採用了片上系統的設計理念,在 FPGA內部設計了所有所需的數字邏輯,可以實現數據採集控制、數據存儲和 PCI介面方式的數據傳輸等功能。在本方案中,系統初始化後,首先上位機將採集的參數信息(模擬通道數、采樣方式、AD7321工作模式等等)通過 PCI匯流排送給 FPGA中,FPGA再根據這些參數信息控制多路開關和 AD7321的工作,完成數據採集任務。採集過程中 FPGA將 AD轉換得到的數據存進其內部的 FIFO中,當 FIFO快滿時,它向上位機產生中斷,上位機再通過 PCI匯流排讀取 FIFO中的數據。
根據以上的設計思想,整個 FPGA內部邏輯的設計框圖如圖 2所示。本文中 FPGA選用 ALTERA公司的 EP2C5Q208C7晶元,採用自頂向下的設計方法,使用 Quartus II 7.0 等相關軟體進行硬體代碼的開發。下面給出各模塊的設計過程。
1)PCI_t32模塊。該模塊是採用 ALTERA公司的 32位 PCI TARGET介面宏核邏輯,它支持 PCI配置空間讀寫、內存方式讀寫和 I/O方式讀寫,支持可參數化的配置寄存器,具有奇偶校驗功能,能提供靈活的本地端介面,可以將復雜的、電氣和時序要求高的 PCI匯流排邏輯轉換為易於操縱的本地介面邏輯[4]。
2)本地控制模塊。該模塊主要由一個能根據 PCI_t32的控制信號和 FIFO的狀態跳轉的有限狀態機實現。它主要負責控制 PCI_t32和 FIFO之間的數據傳送以及協調數據傳輸路徑上其它相關模塊的工作。當 FIFO快滿時,該模塊將產生中斷信號通知上位機讀取 FIFO中的數據。
3)命令寄存器模塊。該模塊用來保存並解碼由計算機傳來的 16位命令字,配置 AD轉換控制模塊和地址輸出模塊的工作方式。這 16位命令字包含要採集的模擬通道數、AD7321工作模式和是否答應硬體中斷等信息。 4)AD轉換控制模塊。該模塊可輸出 AD7321所需的 SPI匯流排介面、片選信號和 8.3MHz時鍾信號,其內部主要由一個狀態機和兩個 16位移位寄存器組成。其中移位寄存器可以將 AD7321送來的 16位串列數據轉換為並行數據存進 FIFO中,也可以將命令寄存器模塊中的配置數據串列的發送給 AD7321晶元,狀態機將兩次 AD轉換的間隔時間設置為 2μs。
5)地址輸出模塊。該模塊提供多路模擬開關的片選和地址信號,其內部主要由一個地址計數器組成,當 AD轉換控制模塊完成一路數據的採集時它會自動加 1。 6)PLL和四分頻模塊。 PLL是 FPGA的模擬鎖相環,它工作於 Normal模式下,給其他模塊提供全局時鍾信號。四分頻模塊用來對 33MHz的時鍾信號四分頻,產生 AD轉換控制模塊所需的 8.3MHz時鍾。
在設計中需要特別留意的是非同步時鍾域之間的數據同步題目,尤其是 AD轉換控制模塊和 FIFO之間的數據傳遞。本文中參考了通常所說的用寄存器打兩次的方法,在 33MHz的時鍾域中採用兩個寄存器采樣 AD轉換控制模塊的控制信號,並利用一個同或門檢測兩個寄存器輸出是否一致,再根據同或門的輸出信號就可以實現這兩個模塊之間的數據傳遞。
2.2 PCI驅動程序設計
硬體系同一般都需要軟體的支持才能實現系統的設計功能,驅動程序就是控制硬體設備的一組函數。本系統的驅動程序的開發使用的是 Jungo公司的 WinDriver集成開發包,它可以自動天生設備的信息定向文件.INF和系統文件 WINPNP.SYS。利用 WinDriver 9.01開發設備驅動程序時,驅動程序中的所有函數都是工作在用戶態下的,因此不需要熟悉操縱系統的內核。本文在 Visual C++ 6.0的平台下,通過一個動態鏈接庫 wdapi901.dll調用 WinDriver提供的 API函數來編寫設備的驅動程序,實現了用戶程序對硬體的操縱。其軟體流程圖如圖 3所示。
3實驗結果與分析
由天津大學研製的 LSA-III型激光粒度儀可測粒徑范圍為 6μm-2000μm,其光電探測器由 32個同心光敏環和 1個位於中心的光敏點組成。由於本系統可以軟體選擇模擬通道數,因此只要將計算機發送到命令寄存器模塊中的命令的模擬通道數改為 33就可以應用到該儀器上。在 LSA-III型激光粒度儀上使用焦距為 300mm的傅立葉物鏡對標准粒子板進行測試,利用 R-R分布模型處理得到的數據,對標准粒子板丈量 5次的試驗結果如表 1所示。其中 D50表示小於該直徑的粒子體積占粒子總體積的 50%,D10和 D90的意義與此類似 [5]。變異系數 Cv和相對誤差△是 ISO13320標準的指標,其中 Cv用來衡量丈量的重復性,△用來衡量丈量的正確性[6]。
由表 1數據可知, D50的變異系數和相對誤差均在1.5%以內, D10和 D90的變異系數和相對誤差均在3.5%以內,符合 ISO13320標准對重復性和正確性的規定。試驗表明該系統在對顆粒粒徑的丈量中表現穩定,結果正確,完全滿足了激光粒度測試系統的要求。
4結語
本文創新點:本文以 FPGA為核心為 LSA系列激光粒度儀量身定製的數據採集系統,實現了 PCI匯流排方式的數據採集與傳輸。系統可在 0-112路范圍內軟體選擇模擬通道的採集路數和 AD7321晶元的工作方式,這使得系統具有了一定的通用性,適應了目前光電探測器越來越復雜的趨勢。將該系統應用到 LSA-III型激光粒度儀上時,系統對光電探測器的采樣速率可達到 7.5Ksps,數據均勻傳輸速率可達到 3Mbps。另外,由於設計中貫串了 SOC的設計理念,系統還具有集成度高、本錢低、升級方便、使用靈活等優點。該項目已經在激光粒度儀中得到應用,產生的直接經濟效益達 6萬元。
⑷ 求AD轉換單片機實驗的匯編程序
接線:p3.6接srd
p3.7接swr
p3.0接pin
p3.1接clk
ad0809的clk接脈沖
cs接8000h的解碼電路程序:ad0809 xdata 8000h
org 0000h
ajmp main
org 0030h
main:mov dptr,#8000h
mov a,#01h
movx @dptr,a
call delay
movx a,@dptr
mov r0,a
call disp
call delay
call delay
call delay
ajmp maindisp:mov a,r0
anl a,#00001111b
acall dsend
mov a,r0
swap a
anl a,#00001111b
acall dsend
ret
dsend:mov dptr,#tab
movc a,@a+dptr
mov sbuf,a
jnb ti,$
clr ti
ret delay:mov r4,#250
delay1:mov r5,#250
djnz r5,$
djnz r4,delay1
ret
tab:db 03h ;0
db 9fh ;1
db 25h ;2
db 0dh ;3
db 99h ;4
db 49h ;5
db 41h ;6
db 1fh ;7
db 01h ;8
db 09h ;9
db 11h ;滅
db 11h
db 0c1h
db 63h
db 85h
db 61h
db 71h
db 00h
end