ADC這個(gè)東西好神奇,作為模擬到數(shù)字的樞紐,值得研究。我昨天寫了MCP,今天是TI的,其實(shí)手頭還有別的,但是沒(méi)有必要了,再寫一個(gè)SPI的就全了。
Ti.ADS1115-15Bit差分ADC
MCP3421-18bit ADC 調(diào)試
之前水平不高,寫的東西不太行,這篇其實(shí)是對(duì)之前的一個(gè)補(bǔ)充,其實(shí)15bit也沒(méi)有錯(cuò),因?yàn)橛行l件會(huì)丟失一位。
后面有一段計(jì)算,詳細(xì)的去看數(shù)據(jù)手冊(cè)。
以ADS1115的框圖開始
增加增益還可以降低輸入?yún)⒖荚肼?,這在測(cè)量低電平信號(hào)時(shí)特別有用。調(diào)節(jié)PGA。
配置的時(shí)候需要三個(gè)字節(jié),在編程的時(shí)候需要注意
在從機(jī)發(fā)送模式下,主機(jī)發(fā)送的第一個(gè)字節(jié)是 7 位從機(jī)地址,后跟高 R/ W位。
該字節(jié)將從設(shè)備置于發(fā)送模式并指示正在讀取 ADS111x。
從機(jī)發(fā)送的下一個(gè)字節(jié)是寄存器的最高有效字節(jié),由寄存器地址指針位 P[1:0] 指示。
該字節(jié)后面是來(lái)自主機(jī)的確認(rèn)。然后,從機(jī)發(fā)送剩余的最低有效字節(jié),隨后是主機(jī)的確認(rèn)。主設(shè)備可以在任何字節(jié)之后通過(guò)不確認(rèn)或發(fā)出 START 或 STOP 條件來(lái)終止傳輸。
A0 和 A1 的值由 ADDR 引腳決定
看我標(biāo)紅的地方,以前一直不理解為什么有高有低,現(xiàn)在我理解了,是因?yàn)檫@個(gè)地方兩個(gè)狀態(tài)都有可能,要看外部的設(shè)置。
后面的兩位就是不確定的數(shù)據(jù)位
這些都是
中間是范圍,周圍兩個(gè)是溢出的
看換算
后面兩個(gè)位是要配置的
前面的位都不管,后面的位是兩位,是寫明要操作的寄存器
這個(gè)讀取的時(shí)候是很簡(jiǎn)單的,就是16個(gè)位
這個(gè)寄存器有點(diǎn)復(fù)雜
這個(gè)是第一個(gè)OS,可寫可讀,上面已經(jīng)說(shuō)明作用了
這個(gè)是1115才有的多功能MUX
就是個(gè)多功能的開關(guān)
一個(gè)極接地,另外一個(gè)接輸入,也就是構(gòu)成了單端的輸入,因?yàn)橐欢我呀?jīng)是確定的。
這個(gè)是PGA的功能,他的粒度是比MCP的小的
在這里
還是得TI,16位干到了和MCP18位一樣的效果
這個(gè)是一個(gè)轉(zhuǎn)換速率,通過(guò)這個(gè)合理的選擇可以抑制不少噪音
后面的我覺(jué)得沒(méi)有什么作用,好像我沒(méi)有想到有什么應(yīng)用。
其實(shí)也不是完全沒(méi)有用,就是這里可以作為一個(gè)中斷的引腳來(lái)節(jié)省資源
真實(shí)的連接可能是這樣的
ADS111x 的全差分電壓輸入非常適合連接具有較低源阻抗的差分源,例如熱電偶和熱敏電阻。盡管 ADS111x 可以讀取雙極性差分信號(hào),但這些器件不能接受任一輸入上的負(fù)電壓。 這句話有點(diǎn)拗口,意思可能是不可以直接接負(fù)電壓。單端口的情況下不可以直接接負(fù)電壓。
在MCP里面也是
單端輸入不準(zhǔn)是負(fù)數(shù)
ADS111x 在轉(zhuǎn)換期間消耗瞬態(tài)電流。0.1μF 電源旁路電容器可提供電源所需的瞬時(shí)額外電流。 SDA 和 SCL 線上都需要上拉電阻,因?yàn)?I 2 C 總線驅(qū)動(dòng)器是漏極開路的。這些電阻器的大小取決于總線運(yùn)行速度和總線線路的電容。電阻值越高,功耗越低,但會(huì)增加總線上的轉(zhuǎn)換時(shí)間,從而限制總線速度。較低阻值的電阻可實(shí)現(xiàn)更高的速度,但代價(jià)是功耗更高。長(zhǎng)總線具有更高的電容,并且需要更小的上拉電阻來(lái)補(bǔ)償。不要使用太小的電阻,因?yàn)榭偩€驅(qū)動(dòng)器可能無(wú)法將總線拉低。 單端信號(hào)范圍從 0 V 到正電源或 +FS,以較低者為準(zhǔn)。 負(fù)電壓不能施加到這些器件,因?yàn)?ADS111x 只能接受相對(duì)于地的正電壓。 ADS111x 在輸入范圍內(nèi)不會(huì)失去線性度。 比較好玩的是這個(gè):通過(guò)適當(dāng)設(shè)置 MUX[2:0] 位,ADS1115 還允許 AIN3 作為測(cè)量的公共點(diǎn)。
那就是這個(gè),注意,不是直接接地
AIN0、AIN1 和 AIN2 都可以相對(duì)于 AIN3 進(jìn)行測(cè)量。在此配置中,ADS1115 通過(guò)輸入運(yùn)行,其中 AIN3 作為公共點(diǎn)。此功能提高了單端配置的可用范圍,因?yàn)楫?dāng)GND < V (AIN3) < VDD 時(shí)允許負(fù)差分電壓;然而,不提供共模噪聲衰減。
這個(gè)地我也說(shuō)不明白
二極管的電流處理能力有限,并且長(zhǎng)時(shí)間超出電源軌約 300 mV 的模擬輸入電壓可能會(huì)永久損壞 ADS111x。防止過(guò)壓的一種方法是在輸入線上放置限流電阻。ADS111x 模擬輸入可承受高達(dá) 10 mA 的連續(xù)電流。
噪音什么的,我就不細(xì)說(shuō)了。
噪聲分量的幅度通常小于實(shí)際傳感器信號(hào)。使用截止頻率設(shè)置為輸出數(shù)據(jù)速率或高 10 倍的一階 RC 濾波器作為系統(tǒng)設(shè)計(jì)的一般良好起點(diǎn)。
高端的型號(hào)有引腳沒(méi)有全部使用,怎么辦?
浮動(dòng)未使用的模擬輸入,或?qū)⑽词褂玫哪M輸入連接到中間電源或 VDD。可以將未使用的模擬輸入連接到 GND,但可能會(huì)產(chǎn)生比以前的選項(xiàng)更高的泄漏電流??梢灾苯舆B到VDD浮動(dòng) NC(未連接)引腳,或?qū)?NC 引腳連接到 GND。如果未使用ALERT/RDY 輸出引腳,請(qǐng)將該引腳懸空或使用弱上拉電阻將該引腳連接至 VDD。
寫入配置寄存器以將 ADS111x 設(shè)置為連續(xù)轉(zhuǎn)換模式,然后讀取轉(zhuǎn)換結(jié)果,請(qǐng)按以下順序發(fā)送以下字節(jié)。
基于電阻分流的電流測(cè)量解決方案廣泛用于監(jiān)測(cè)負(fù)載電流。低側(cè)電流分流測(cè)量與總線電壓無(wú)關(guān),因?yàn)榉至鞴材k妷航咏亍?/p>
負(fù)載電流通過(guò)測(cè)量分流電阻兩端的電壓來(lái)確定
計(jì)算
對(duì)接地參考信號(hào)進(jìn)行電平轉(zhuǎn)換,以允許在使用單極電源時(shí)進(jìn)行雙向電流測(cè)量。
分流電阻器 V SHUNT兩端的電壓由共模電壓 V CM進(jìn)行電平轉(zhuǎn)換
也就是這樣的
也就是前面是控制OP在正常的工作范圍里面,后面是一個(gè)放大的同相
最后面加入ADC之前是一個(gè)RC濾波,要求在ADC 差分輸入電壓,定義成Vcm-Vout。
分流電阻器 (R SHUNT ) 是與負(fù)載串聯(lián)插入的精確電阻。
如果分流器兩端的絕對(duì)壓降 |V SHUNT | 占總線電壓的百分比較大,則壓降可能會(huì)降低整體效率和系統(tǒng)性能。
如果 |V分流| 太低,測(cè)量小電壓降需要仔細(xì)設(shè)計(jì)并正確選擇 ADC、運(yùn)算放大器和精密電阻。
確保分流端子處的絕對(duì)電壓不會(huì)導(dǎo)致違反運(yùn)算放大器的輸入共模電壓范圍要求。
由于電流流過(guò)分流電阻,分流電阻上的功耗會(huì)增加溫度。為了最大限度地減少溫度變化引起的測(cè)量誤差,選擇低漂移分流電阻。
為了最大限度地減少測(cè)量增益誤差,選擇具有低容差值的分流電阻。
要消除雜散接地電阻引起的誤差,使用四線開爾文連接的分流電阻。
R 12 3 4來(lái)調(diào)節(jié)運(yùn)放的共模電壓
如果 Vout連接到 ADC 正輸入 (AINP),且 Vcm連接到 ADC 負(fù)輸入 (AINN),則 Vcm將作為 ADC 的共模電壓出現(xiàn)。
如果 Vcm設(shè)置為中間電源 (Vdd / 2),則此配置允許偽差分測(cè)量并使用 ADC 的最大動(dòng)態(tài)范圍。
可以使用連接 VDD 和 GND 的電阻分壓器(后接緩沖放大器)來(lái)生成 V CM。經(jīng)典玩法
后面的濾波
還添加了兩個(gè)共模濾波電容器(Ccm1和 Ccm2),以提供高頻共模噪聲分量的衰減。選擇比這些共模電容器至少大一個(gè)數(shù)量級(jí) (10 倍) 的差分電容器 Cdiff ,因?yàn)檫@些共模電容器的不匹配會(huì)將共模噪聲轉(zhuǎn)換為差分噪聲。
看個(gè)RC就好了
自帶的數(shù)字濾波器也是差不多
完美
地址最方便就是接地了,也就是0x48的地址
我們對(duì)最重要的配置寄存器來(lái)一些封裝吧
最后的寄存器的樣子就是這樣
使用的時(shí)候可以這樣寫
函數(shù)定義,函數(shù)名為ADS1115_init。這個(gè)函數(shù)接收三個(gè)參數(shù):
I2C_HandleTypeDef *hi2c:這是一個(gè)指向I2C句柄類型的指針,用于操作I2C設(shè)備。 uint16_t Addr:這是一個(gè)無(wú)符號(hào)16位整數(shù),表示ADS1115設(shè)備的地址。 ADS1115_Config_t config:這是一個(gè)ADS1115配置結(jié)構(gòu)體,包含了初始化ADS1115所需的配置信息。函數(shù)返回一個(gè)指向ADS1115_Handle_t類型的指針,這個(gè)指針指向一個(gè)ADS1115設(shè)備實(shí)例。通常來(lái)說(shuō),這個(gè)函數(shù)會(huì)創(chuàng)建一個(gè)新的ADS1115_Handle_t實(shí)例,然后使用傳入的配置信息對(duì)其進(jìn)行初始化,最后返回這個(gè)實(shí)例的指針。
驅(qū)動(dòng)一個(gè)ADC,重要的事情是,IIC硬件的驅(qū)動(dòng),地址的確認(rèn),相關(guān)寄存器的操作,這個(gè)就是句柄了。
需要的配置的和讀取的都這樣設(shè)計(jì)好
分配內(nèi)存空間,創(chuàng)建一個(gè)ADS1115_Handle_t類型的指針pConfig
注意最后的config,因?yàn)橹羔樖切枰獋鞒鋈サ?。其次就是結(jié)構(gòu)體是倒著看,hi2c給了等號(hào)左邊的元素。
釋放一塊內(nèi)存
接下來(lái)我們組裝一個(gè)函數(shù)
channel:通道選擇,通過(guò)左移6位后與config.channel進(jìn)行按位或操作; pgaConfig:增益配置,通過(guò)左移3位后與config.pgaConfig進(jìn)行按位或操作; operatingMode:工作模式,通過(guò)左移0位后與config.operatingMode進(jìn)行按位或操作。
這個(gè)是更新配置
我寫程序的時(shí)候使用了中斷
上面的封裝可以讓人很方便進(jìn)行配置
中斷的時(shí)候需要在it文件的里面打開
審核編輯:湯梓紅
-
寄存器
+關(guān)注
關(guān)注
31文章
5294瀏覽量
119814 -
ti
+關(guān)注
關(guān)注
112文章
7956瀏覽量
212032 -
adc
+關(guān)注
關(guān)注
98文章
6391瀏覽量
543762 -
調(diào)試
+關(guān)注
關(guān)注
7文章
571瀏覽量
33870 -
SPI
+關(guān)注
關(guān)注
17文章
1688瀏覽量
91201
原文標(biāo)題:ADS1115-16Bit ADC 調(diào)試.上
文章出處:【微信號(hào):TT1827652464,微信公眾號(hào):云深之無(wú)跡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論