在檢測技術與應用、DCS的I/O板卡以及信號傳輸等許多工業生產過程中都需要將數據傳輸到計算機,這一過程必須先進行A/D轉換。目前A/D轉換芯片種類非常多,有的價格高且設計復雜,有的轉換精度低滿足不了要求。為此,挑選了高精度16位A/D轉換芯片AD7705,該芯片轉換精度高、價格低,滿足多種應用。本文設計了以單片機ATmega16為控制核心,以AD7705為前端采集芯片,以CPLD芯片EPM3064為邏輯開關陣列的32通道模擬量采集系統。給出了相應的硬件電路、驅動程序以及應用軟件,指出了AD7705在實際應用中應當注意的一些問題。
1.A/D轉換芯片AD7705
AD7705具有兩個模擬輸入通道,利用Σ-Δ轉換技術實現了16位無丟失代碼性能。模擬調制器具有增益可編程功能,片內設有數字濾波器、處理調制器的輸出信號,通過片內控制器可調節濾波器的截止點和輸出更新速率。是用于智能系統、微控制器系統和DSP系統的理想產品,其串行接口可配置為3線方式。增益值、信號極性以及更新速率的選擇都可通過串行接口由軟件來設置。該器件還包括自校準和系統校準功能,以消除器件本身或系統的增益和偏移誤差。
ATmega16ATmega16是Atmel公司生產的8位嵌入式單片機,它是基于增強的AVRRISC結構的低功耗8位CMOS微控制器。特點為:16K字節的系統內可編程Flash(具有同時讀寫的能力,即RWW),512字節EEPROM,1K字SRAM,32個通用I/O口線,32個通用工作寄存器,用于邊界掃描的JTAG接口,支持片內調試與編程,3個具有比較模式的靈活的定時器/計數器(T/C),片內/外中斷,1個可編程串行USART,1個SPI串行端口等,硬件資源非常豐富。
3.采集系統的設計
采集系統的硬件構成在功能上主要包括線性電源電路、AD7705外圍電路、ATmega16外圍電路和通道選擇電路。
3.1線性電源電路
本電路(圖1)電壓為+5V和+3.3V。使用電源芯片78L05、Z33等,D1、D2為5V穩壓管,D8、D9為3.3V穩壓管。C14、C17用于濾除高頻雜波,C15、C16用于保證輸出電壓平坦,外部供電為+12V。
圖1 線性電源電路
3.2AD7705外圍電路
AD7705的外圍電路如圖2所示。時鐘頻率設計為2.4576MHz,晶振Y1兩端需各接一20pF電容到地以保證時鐘頻率的精準。電源電壓VDD為+5V。AN1+與AN1-,AN2+與AN2-分別接模擬輸入信號。芯片REF192為AD公司生產的精密基準電壓源,為AD7705提供2.5V基準電壓,其輸出引腳6到地之間需并接0.1μF和10μF的電容以保證其輸出電壓平坦。
圖2 AD7705外圍電路原理圖
AD7705與單片機Atmega16接口電路為片選端CS—PD4、復位端RESET—PD5、邏輯輸出端DRRY—PB3、串行數據輸入端DIN—PB5、串行數據輸出端DOUT—PB6和串行時鐘SCLK—PB7。
3.3ATmega16外圍電路
ATmega16(圖3)的供電電壓VCC為+5V,時鐘頻率8MHz。PB5為串行外設接口SPI的主機輸出端,PB6為主機輸入端,PB7為SPI時鐘。PB3、PD4、PD5用作普通的數字接口。AVCC為模擬電源,需經LC網絡接至數字電源VCC,L1為10μH,C11為100nF,LC網絡用于抑制噪聲、提高抗干擾能力。該電路控制AD7705以完成數據的采集,主要是利用其SPI接口對AD7705進行各種初始配置,控制A/D轉換并讀取轉換結果。
圖3 ATmega16外圍電路原理圖
3.4通道選擇電路
該電路在ATmega16的程序控制下工作,AT-mega16的控制信號通過PA4~PA0以完成32個通道模擬的模擬量采集。以高度集成CPLD芯片EPM3064為解碼電路,制作一個5/32解碼器,用VHDL語言編寫而成,其供電電壓3.3V,輸入信號PA4~PA0和PD7,輸出信號為TD0~TD31。EPM3064是基于EEPROM的CMOS工藝CPLD,其有64個宏單元,100管腳TQFP封裝有66個用戶I/O管腳,可滿足許多應用需要。
PD7作為5/32解碼器的使能信號,用于選擇采集通道0~31。DS2Y-S為信號繼電器,其引腳8、9接AD7705模擬信號1的AN1+與AN1-,引腳4、13接通道0的模擬輸入信號AI0+與AI0-。其導通斷開通過PNP三極管Q1驅動,控制信號為TD0,二極管D1起續流作用,保護電路正常工作同時具有抑制尖峰干擾作用。通道1~31的選擇電路類似,同理設計模擬信號輸入AI1~AI31的選擇電路。PD7作為使能信號,低電平有效,總共需要32片信號繼電器,本質上通道選擇電路(圖4)是由CPLD芯片EPM3064和信號繼電器構建的邏輯陣列開關。
圖4 通道選擇電路
4.軟件設計
軟件設計包括3個子模塊:SPI初始化模塊、AD7705驅動模塊、定時器模塊。工作過程:首先通過ATmega16的SPI接口驅動AD7705,完成AD7705通道設置、時鐘設置、更新速率以及校準模式等,然后啟動ATmega16的定時器,在定時器中斷函數中查詢AD7705的狀態,如轉換完成則讀取轉換結果,否則繼續等待直到轉換完成,如此不斷讀出所需的轉換結果。程序流程如圖5所示。
圖5 程序流程框圖
4.1SPI初始化模塊
對ATmega16的SPI接口進行配置:
void spi_init(void)
{
DDRB|=(1《
DDRB&=~(1《
PORTB|=(1《
SPCR=(1《
}
4.2AD7705驅動模塊
該模塊程序完成對AD7705的配置任務,需要注意的是讀寫寄存器之前必須先選擇要操作的寄存器。
向AD7705寫入1字節函數,入口參數data為需寫入的字節數據:
voidwr_7705(unsignedchardata)
{
SPDR=data;//啟動數據傳輸
while(!(SPSR&(1《《SPIF)))//等待傳輸
結束;
}
讀出AD7705數據函數,返回值為讀出的2字節數據:
unsignedintrd_7705(void)
{
unsignedinttemp;//定義臨時變量
wr_7705(0x38);//選擇讀數據寄存器,1通道
SPDR=1;//啟動數據傳輸
while(!(SPSR&(1《《SPIF)))//等待傳輸結
束
{
;
}
temp=SPDR《《8;//讀取高字節
SPDR=1;//啟動數據傳輸
while(!(SPSR&(1《《SPIF)))//等待傳輸結束
{
;
}
temp|=SPDR;//讀取低字節
return(temp);
}
AD7705初始化函數:
voidinit_7705(void)
{
wr_7705(0x20);//選擇時鐘寄存器,下一操作是寫
wr_7705(0x00);//20Hz的更新速率
wr_7705(0x10);//選擇設置寄存器,下一操作是寫
wr_7705(0x44);//自校準模式,增益為1,單極性
}
4.3定時器模塊
利用定時器1按一定的時間間隔讀取AD7705的轉換結果。讀取數據之前必須確定數據寄存器的狀態,有兩種不同的方式:第1種是查詢DRDY引腳,如果處于低電平,表示已經轉換完成,可以讀取;第2種是查詢通信寄存器中的DRDY位,如果是0表示可以讀取數據:
定時器1初始化函數:
定時器1溢出中斷函數:
結語
本文總結了基于AD7705的32通道模擬量采集系統設計,經過試驗證明,該采集系統不僅減少儀表設計調試時間,而且結合測量儀器可以構建靈活的測量系統,節約儀器購置成本,提高工作效率。
責任編輯人:CC
-
模擬量
+關注
關注
5文章
491瀏覽量
25505 -
AD7705
+關注
關注
2文章
39瀏覽量
20498
發布評論請先 登錄
相關推薦
評論