文章結構
文章說明
聲明
如若轉載,請附轉載地址並聲明原作者。此項目在GitHub託管,所有的資料包括datasheet都在GitHub託管,託管地址。若鏈接失效請向作者索要。郵箱:[email protected]
作者還擁有個人公衆號,會寫一些感悟文章,知圈,二維碼如下,歡迎掃描關注:
說明
本項目分AD採集模塊和軟件模塊。本文爲硬件模塊,AD採集的軟件模塊請參考作者的該文章。
項目需求
一秒一千次採樣以上,30通道以上,24bit以上分辨率。
器件選型
最終選擇:AD7779
並選購了官方demo板:EVAL-AD7770FMCZ Evaluation Board
開發板快識
SPI通信
該例用到的SPI知識集
單主從基本SPI原理示意:
SPI 四種模式/Mode numbers
縮寫解釋:
CPOL:clock polarity 時鐘極性
CPHA:clock phase 時鐘相位
一般"Microchip PIC"和"ARM-based" 微處理器遵循以下規則(NCPHA爲CPHA取反):
SPI mode | Clock polarity (CPOL/CKP) | Clock phase (CPHA) | Clock edge (CKE/NCPHA) |
---|---|---|---|
0 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
2 | 1 | 0 | 1 |
3 | 1 | 1 | 0 |
其它處理器遵循以下規則:
Mode | CPOL | CPHA |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
時序如下:
- CPOL決定時鐘的極性。
- CPOL=0,低電平爲空閒態,每一個週期包含一個高電平脈衝。用上升沿表示開始,下降沿表示結束。
- CPOL=1,高電平爲空閒態,每一個週期包含一個低電平脈衝。用下降沿表示開始,用上升沿表示結束。
- CPHA決定時鐘脈衝和數據位的對應關係。
- CPHA=0,在脈衝結束時改變數據,在脈衝開始時(或脈衝開始後很短的時間內)讀取數據。數據從上一個脈衝結束開始一直保持到當前始終週期結束。對於第一個時鐘週期,master(主機)第一位數據必須在時鐘沿到來之前保持在MOSI線上。該模式也被理解爲:前半週期空閒態,後半週期賦值。
- CPHA=1,在脈衝開始時改變數據,在脈衝結束時(或脈衝結束後很短的時間內)讀取數據。數據一直保持到下一個脈衝開始。對於最後一個週期,slaver(從機)必須將數據保持在MISO線上一直到slave select(SS)使能關閉。該模式也被理解爲:前半週期賦值,後半週期空閒態。
SPI的兩種多負載方式
Independent slave configuration/獨立控制模式
獨立控制模式比較好理解,利用片選信號進行從機控制。
Daisy chain configuration/菊鏈法
如上圖所示,菊鏈法利用的類似鎖存器的原理,將主機發送的信號進行傳遞。實例解釋如下:
以最清晰的如上最後一張圖來解釋,每一個使能(C̅S̅)週期包含三段數據(與掛載從機數量相同)。第一個數據週期將數據存在了從機一的上;第二個數據週期時,從機一在接收第二段數據的同時,將上一個週期收到的數據傳給從機二,這樣,當第二個數據段週期結束時,從機一的數據被覆蓋成了第二個數據週期的數據,而從機二則收到了由從機一發來的第一段數據;第三個數據段週期時,從機一的數據被第三段數據覆蓋,從機二的數據被第二段數據覆蓋,而從機三終於收到了由從機二發來的第一段數據。三個週期完成後,從機一、從機二、從機三分別存儲的是第三段、第二段、第一段數據。此時,該階段的所有數據傳輸完成,等待芯片處理動作(比如此時進行指令執行),動作完成後可以再以同樣的原理進行下一個菊鏈數據的填充。
AD7779的SPI
評估板的Demo連接
在手冊中,提到了評估版的基本接口:
如上圖,手冊中提到,獨立使用時:
-
- 連接電源。
-
- MCU連接J1。
考慮方便插接,選的J5通過wall wart接口通9V電壓供電。插上後發現沒反應,查看手冊,默認不是此供電接口,通過下圖的0Ω開關來控制的,把0Ω電阻從A位置(position)拆下來,重新焊道B position,插上電源,燈亮。(請勿將A、B位置同時短路,這兩個是直連的,如果同時接入兩個不同電壓的電源會燒回電路/電源設備)。
因爲手冊中說MCU通過J1控制,所以找出J1的描述及其J1所連接到的AD7779(Manuel中爲AD7770):
通電用示波器測試了一下,J1接口所有信號線都沒有信號輸出,包括時鐘線。說明要demo版的默認設置不是J1輸出,需要更改。
搜索Manuel並找出J1輸出相關的如下板載開關(Solder Link Options)位置:
Link No. | Default Option | Description | 更改爲 |
---|---|---|---|
Main_SUPPLY | A | Unregulated input voltage source selection.
|
前面改了由J5輸入9V供電,所以此處應改爲B位置。 |
SL1 | A | IOVDD supply selection.
|
由於我們並沒有接SDP-H1板,而我們的MCU板選擇3.3V輸出,所以我們在此將此開關改爲B位置。 |
SL5, SL6 | A | Data interface format selection. The evaluation software only supports SPI control mode. The default condition is SPI configuration. See the AD7770, AD7771, and AD7779 data sheets for more information. | SL5應爲A,SL6應爲B,以使輸出爲DOUT0輸出ch0–Ch7 |
SL10, SL11, SL13 | A | GPIO/mode pins.
|
經查看,改爲C位置,以使MODE0–MODE3爲0,Decimation Rate 1024,SPS爲1000,PGA Gain都設爲1 |
SL14 | A | CONVST_SAR selection.
|
改爲C |
SL15, SL16, SL17 | A | SPI data interface lines.
|
SL15改爲B位置,SL16改爲C,SL17改爲C |
SL18 | A | SPI data interface line.
|
可能需要更改 |
SL21 | A | Alert connection.
|
可能需要更改 |
將SL1改爲B位置後,通過示波器測試J1引腳,有輸出,其中,
Dclock 和 DOUT2 輸出如下:
\ready和DOUT2輸出如下:
DOUT2(黃色)和DOUT3(藍色)如下:
從信號可以看出,此時的配置:
經查看電路連接,現在的FORMAT0和FORMAT1都接到了IOVDD,即高電平。
手冊中關於該配置的描述:
根據描述,我們應當按照如下圖設置,即SL14接到C位置以使CONV_SAR State設置爲0,將SL5放在A位置以使FORMAT1設置爲1,將SL6接到B位置以使FORMAT2設置爲0,這樣一來我們需要三根線(DREADY/DCLOCK/DOUT0)就可以將七路信號讀回。
上圖的MODE3/MODE2/MODE1/MODE0設置爲0/0/0/0以將Decimation配置爲1024。然而示波器發現並沒有輸出八通道數據,只有一通道數據。如下:
查看手冊,發現下面的DCLK沒有設置,如果未設置,由於傳輸太慢,後面的數會被新的數據覆蓋,其餘通道一直沒有機會輸出。燃着如下更改。
根據如上公式計算,由於之前選擇的Decimation爲1024,輸入爲DOUT輸出8通道:
DCLK2/DCLK1/DCLK0至少應配置爲1/0/0以使其爲配置爲16分頻以防止數據被覆蓋。
更改後八通道數據全部出來了,示波器顯示如下:
至此,硬件配置完成。如需查看後續的與MCU主機通訊,請查閱作者的此篇文章。