分享最近做的一個Arduino採集AD的小項目

最近做了一個AD採集的相關項目,要動態檢測物體所受應力的大小,然後通過液晶屏顯示出來,當應力大於某個閾值時,要發出一個開關量信號。

分享最近做的一個Arduino採集AD的小項目

應力檢測系統

這個項目需求簡單,大體的思路就是用單片機進行AD採集,然後通過串口液晶屏顯示讀數,再通過控制一個繼電器模塊實現開關量的通斷。正好手裡有一塊閒置的Arduino Promini,資源完全夠用,唯一的缺點是AD的精度偏低。

分享最近做的一個Arduino採集AD的小項目

Arduino Promini

客戶選用的壓力傳感器AD輸出為0~5V,對應拉力範圍是0~5000N,要求精度達到1N,也就是說0.001V,而Arduino Promini的AD分辨率為10位,5/1024=0.00488V,顯然精度是達不到要求的。

沒辦法,這就要藉助專門的高精度AD模塊來實現了,簡單查了一下某寶,發現AD(TM)7705模塊的各項指標均能滿足要求:16位精度,0.003%的非線性誤差,SPI串行總線讀寫。Ok,下單,買模塊,接線,調程序,很快完成需求。

分享最近做的一個Arduino採集AD的小項目

AD(TM)7705模塊

這裡著重說一下Arduino控制AD(TM)7705的方法,首先是接線,模塊上的CN28根針都要接線:

分享最近做的一個Arduino採集AD的小項目

與單片機接口

引腳對應關係如下:

///7705控制引腳/////////////////////////////

#define T7705_RST 9

#define T7705_CS A1

#define T7705_DRDY A0

#define T7705_MOSI 11

#define T7705_MISO 12

#define T7705_SCK 13

接下來是寫代碼,賣家提供的AD770X庫文件裡有AD7706的例子,當時沒有細看7706和7705的區別(其實就是差了一個輸入通道),於是就把另一個單片機的例子代碼移植了過來,主要是通過SPI對AD7705的寄存器進行讀寫的過程,其中讀寫的時序如下:

分享最近做的一個Arduino採集AD的小項目

AD7705寫時序

分享最近做的一個Arduino採集AD的小項目

AD7705讀時序

要注意,讀取的時候,要等DRDY信號變低才能讀到有效值。

關鍵是下面兩個函數:

分享最近做的一個Arduino採集AD的小項目

AD7705初始化函數

分享最近做的一個Arduino採集AD的小項目

AD7705讀取AD值函數

希望我的分享為大家帶來幫助,歡迎大家多評論多交流!


分享到:


相關文章: