最近做了一個AD採集的相關項目,要動態檢測物體所受應力的大小,然後通過液晶屏顯示出來,當應力大於某個閾值時,要發出一個開關量信號。
這個項目需求簡單,大體的思路就是用單片機進行AD採集,然後通過串口液晶屏顯示讀數,再通過控制一個繼電器模塊實現開關量的通斷。正好手裡有一塊閒置的Arduino Promini,資源完全夠用,唯一的缺點是AD的精度偏低。
客戶選用的壓力傳感器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(TM)7705的方法,首先是接線,模塊上的CN28根針都要接線:
引腳對應關係如下:
///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的寄存器進行讀寫的過程,其中讀寫的時序如下:
要注意,讀取的時候,要等DRDY信號變低才能讀到有效值。
關鍵是下面兩個函數:
希望我的分享為大家帶來幫助,歡迎大家多評論多交流!
閱讀更多 蟻哥愛科技 的文章