AD7606B是AD7606模數(shù)數(shù)據(jù)采集系統(tǒng)(DAS)的增強(qiáng)版。AD7606B可用作AD7606的引腳替代直接引腳,稱為硬件模式,其優(yōu)點(diǎn)如表1所示。但是,軟件模式下的AD7606B具有以下高級特性:
基于每個(gè)通道的獨(dú)立范圍選擇,包括 ±2.5 V 范圍選項(xiàng)
系統(tǒng)增益/相位/失調(diào)片內(nèi)校準(zhǔn)
額外的過采樣率(OSR = 128 和 256)
可選的 1、2 或 4 個(gè)串行數(shù)據(jù)輸出配置
診斷和監(jiān)測
參數(shù) | AD7606 | AD7606B (硬件模式) | AD7606B (軟件模式) |
典型輸入阻抗 | 1兆安 | 5兆安 | 5兆安 |
最大吞吐率 | 200 千秒 | 800 千秒 | 800 千秒 |
溫度范圍 | ?40°C 至 +85°C | ?40°C 至 +125°C | ?40°C 至 +125°C |
在駕駛范圍 | 2.3 V 至 5.25 V | 1.71 V 至 3.6 V | 1.71 V 至 3.6 V |
絕對最大輸入電壓 | ±16.5 V | ±21 V | ±21 V |
模擬輸入范圍 | ±10 V 或 ±5 V1 | ±10 V 或 ±5 V1 |
±10 V、±5 V 或 ±2.5 V2 |
系統(tǒng)增益、相位和失調(diào)片內(nèi)校準(zhǔn) | 不適用 | 無法訪問 | 可用2 |
過采樣率 |
從無過采樣 到 OSR = 64 |
從無操作系統(tǒng) 到 OSR = 64 |
從無操作系統(tǒng) 到 OSR = 256 |
開路檢測 | 不適用 | 無法訪問 | 可用2 |
串行數(shù)據(jù)輸出線 | 2 | 2 |
可選: 1、2 或 4 |
診斷 | 不適用 | 無法訪問 | 可用 |
1不是基于每個(gè)通道。
2以每個(gè)通道為基礎(chǔ)。
軟件或寄存器模式通過將三個(gè)過采樣數(shù)字輸入(OS2、OS1和OS0)連接高電平來啟用,從而允許訪問配置寄存器映射以利用前面所述的功能。有關(guān)向后兼容性、如何在硬件模式和軟件模式下從AD1559遷移到AD7606B以及如何在串行(SDI引腳)和并行接口(WR引腳)中寫入寄存器映射的完整詳細(xì)信息,請參見AN-7606應(yīng)用筆記。
本應(yīng)用筆記介紹了AD7606B在軟件模式下提供的各種高級特性及其對系統(tǒng)級的影響。有關(guān)AD7606B的完整詳細(xì)信息,請參見AD7606B數(shù)據(jù)手冊。請結(jié)合本應(yīng)用筆記查閱本數(shù)據(jù)手冊。
通知
本應(yīng)用筆記中包含的軟件片段版權(quán)歸ADI公司2021所有?。保留所有權(quán)利。本軟件歸ADI公司及其許可方所有。本軟件按“原樣”提供,不作任何形式的陳述、保證、擔(dān)?;蜇?zé)任。該軟件的使用受 Clear BSD 許可證的條款和條件的約束。有關(guān)固件示例代碼的更多信息,請?jiān)L問AD7606 Mbed IIO應(yīng)用維基頁面。
初始化AD7606B
上電時(shí)進(jìn)入軟件模式
要在軟件模式下初始化AD7606B,請確保滿足以下條件:
所有三個(gè)過采樣引腳(OS2、OS1 和 OS0)必須連接到邏輯高電平。
PAR/SER 引腳連接得低或高,具體取決于所使用的數(shù)據(jù)接口,分別是并行或串行。
RANGE引腳可以連接為低電平或高電平,因?yàn)樵谲浖J较聲?huì)被忽略。范圍通過每個(gè)通道的相應(yīng)寄存器進(jìn)行選擇。
在上一個(gè)列表中提到的初始化過程之后,AD7606B配置為軟件模式,寄存器處于默認(rèn)狀態(tài)。在本應(yīng)用筆記和“通知”部分,以軟件串行模式下使用AD7606B為例。
初始化后,電壓引腳通常如下:
AVCC = 5.0 V
在駕駛= 3.3 V、2.5 V 或 1.8 V
REGCAP = 1.9 V
精煉/重新輸出 = 2.5 V
REFCAPA, REFCAPB = 4.4 V
驗(yàn)證上述引腳上的電壓時(shí),發(fā)出復(fù)位可確保AD7606B上正確加載默認(rèn)參數(shù)。若要發(fā)出重置,請使用以下代碼:
int32_t ad7606_reset(struct ad7606_dev *dev)
{
int32_t ret; ret = gpio_set_value(dev->gpio_reset, 1); udelay(3); ret = gpio_set_value(dev->gpio_reset, 0); ad7606_reset_settings(dev);
return ret;
}
AD7606B 通過寄存器讀取進(jìn)行檢查
AD7606B初始化后,寄存器值均為默認(rèn)值,如AD7606B數(shù)據(jù)手冊所示。用戶可以檢查 DEVICE_ID、SILICON_REVISION 或 RESET_DETECT 位 內(nèi)存映射,例如,確認(rèn)收到有效的完全或部分重置。以下代碼中顯示了單個(gè)AD7606B寄存器讀取功能作為基準(zhǔn)。將寄存器地址替換為包含DEVICE_ID位、SILICON_REVISION位或RESET_DETECT位的寄存器。串行外設(shè)接口(SPI)模式2可用于微控制器(MCU)或數(shù)字信號處理器(DSP)與AD7606B之間的直接連接。
int32_t ad7606_spi_reg_read(struct ad7606_dev
*dev,
uint8_t reg_addr,
uint8_t *reg_data)
{
uint8_t buf[3];
uint32_t sz = 2;
int32_t ret;
buf[0] = AD7606_RD_FLAG_MSK(reg_addr);
buf[1] = 0x00;
ret = spi_write_and_read(dev->spi_desc,buf, sz);
if (ret < 0)
return ret;
dev->reg_mode = true;
buf[0] = AD7606_RD_FLAG_MSK(reg_addr);
buf[1] = 0x00;
ret = spi_write_and_read(dev->spi_desc,buf, sz);
if (ret < 0)
return ret;
if (reg_data)
*reg_data = buf[1];
return ret;
}
寄存器配置
在電壓正確且SPI正常工作后,必須根據(jù)所需的應(yīng)用寫入寄存器以加載工作配置,例如范圍、過采樣或診斷等參數(shù)。無操作系統(tǒng)驅(qū)動(dòng)程序中包含的某些函數(shù)(如 ad7606_ set_oversampling() 或 ad7606_set_ch_range())有助于寫入寄存器,如過采樣或范圍配置。反過來,這些函數(shù)使用 ad7606_spi_reg_write() 函數(shù),該函數(shù)通常用于寫入任何設(shè)備寄存器。若要寫入寄存器,請使用以下代碼:
int32_t ad7606_spi_reg_write(struct ad7606_dev *dev,
uint8_t reg_addr,
uint8_t reg_data)
{
uint8_t buf[3];
int32_t ret;
uint32_t sz = 2;
/* Dummy read to place the chip in register mode. */
if (!dev->reg_mode) {
ret = ad7606_spi_reg_read(dev, reg_addr, NULL);
}
buf[0] = AD7606_WR_FLAG_MSK(reg_addr);
buf[1] = reg_data;
ret = spi_write_and_read(dev->spi_desc, buf, sz);
return ret;
}
校準(zhǔn)功能
雖然AD7606B選擇了硬件模式,但該器件的引腳和功能與AD7606完全兼容。如AN-7606應(yīng)用筆記所述,AD1559B帶來的優(yōu)勢是更高的輸入阻抗、更高的吞吐速率、更寬的溫度范圍和更低的數(shù)字電源電壓工作范圍。但是,通過將三個(gè)過采樣引腳(引腳 3、引腳 4 和引腳 5)連接高電平進(jìn)入軟件模式,可以實(shí)現(xiàn)許多高級功能,從而帶來系統(tǒng)級優(yōu)勢,如以下部分所述。
模擬輸入范圍
在AD7606上,數(shù)字輸入RANGE引腳(引腳8)上的極性決定了八個(gè)模擬輸入通道的輸入范圍。如果該引腳連接到邏輯高電平,則所有通道的模擬輸入范圍均為±10 V。如果該引腳連接到邏輯低電平,則所有通道的模擬輸入范圍均為±5 V。該引腳上的邏輯變化會(huì)立即影響模擬輸入范圍。
同樣,在硬件模式下的AD7606B上,所有通道的模擬輸入范圍通過RANGE引腳選擇。但是,在軟件模式下,模擬輸入范圍是按通道選擇的。為此,使用寄存器0x03到寄存器0x06分別設(shè)置每個(gè)通道的范圍。
例如,在圖1所示的RANGE_CH2_CH0寄存器(地址03x1)中,四個(gè)MSB確定通道2上的模擬輸入范圍,四個(gè)LSB確定通道1上的模擬輸入范圍。模擬輸入電壓可選擇±2.5 V、±5 V或±10 V單端。
圖1.RANGE_CH1_CH2 注冊,地址0x03
這種每通道模擬輸入范圍選擇允許在每個(gè)通道上設(shè)置不同的范圍,例如,如果電壓和電流通道在能源監(jiān)控應(yīng)用中需要不同的范圍,這可能是有益的。每通道模擬輸入范圍選擇還可用于在測量和保護(hù)通道上設(shè)置不同的范圍,例如,在能量保護(hù)應(yīng)用中。
系統(tǒng)失調(diào)誤差校準(zhǔn)
軟件模式下的AD7606B具有寄存器,用于補(bǔ)償系統(tǒng)中存在的失調(diào)誤差,無論這些誤差是由于傳感器的固有失調(diào)誤差還是傳感器之間的不匹配引起的。 每個(gè)模擬輸入端的前端電阻(Vx和VxGND),例如圖2所示的濾波電阻(RFILTER)。
圖2.片內(nèi)增益/失調(diào)校準(zhǔn)
每個(gè)通道的8位長寄存器(地址0x11到地址0x18)允許AD7606B以數(shù)字方式將?128 LSB(寫入寄存器0x00)到+127 LSB(寫入寄存器0xFF)的失調(diào)添加到模數(shù)轉(zhuǎn)換器(ADC)轉(zhuǎn)換數(shù)據(jù),以補(bǔ)償此類系統(tǒng)失調(diào)誤差。
換言之,添加到ADC代碼的失調(diào)(以LSB為單位)等于CHx_OFFSET寄存器減去128。表2顯示了CHx_OFFSET寄存器數(shù)據(jù)寫入以及從ADC代碼增加/減去相應(yīng)失調(diào)的示例。
CH1_OFFSET注冊 | 偏移校準(zhǔn) |
0x00 | ?128 LSB |
0x45 | ?59 LSB |
0x80(默認(rèn)) | 0 LSB |
0x83 | +3 LSB |
0xFF | +127 LSB |
如圖2所示,通過將兩個(gè)輸入連接在一起并將它們連接到模擬地(AGND),可以通過讀取ADC代碼獲得系統(tǒng)失調(diào)。然后可以通過寫入相應(yīng)的寄存器來校準(zhǔn)該系統(tǒng)偏移。
例如,如果連接在通道1上的傳感器的失調(diào)相當(dāng)于10 LSB(多個(gè)ADC數(shù)據(jù)讀取的平均值,以消除噪聲引起的分布),或者當(dāng)輸入接地時(shí),前端電阻上的不匹配導(dǎo)致ADC代碼為10 LSB,則必須在每次轉(zhuǎn)換時(shí)從ADC代碼中減去10 LSB以消除該失調(diào)。由于128是失調(diào)寄存器上的默認(rèn)值,因此使用1x0(11d(十進(jìn)制))寫入CH0_OFFSET寄存器(地址76x118),AD7606B有效地從每個(gè)ADC轉(zhuǎn)換代碼中減去10個(gè)LSB。因此,該系統(tǒng)失調(diào)誤差可以通過片內(nèi)寄存器進(jìn)行內(nèi)部補(bǔ)償,從而消除了在后端通過軟件進(jìn)行補(bǔ)償?shù)呢?fù)擔(dān)。要了解有關(guān)如何對CHx_OFFSET寄存器進(jìn)行編程的更多信息,請參考AD7606B產(chǎn)品頁面中的AD7606x軟件型號。
圖3.CH1_OFFSET寄存器、地址0x11、默認(rèn)值0x80
要執(zhí)行失調(diào)誤差校準(zhǔn),請使用以下代碼:
int32_t ad7606_set_ch_offset(struct ad7606_dev
*dev, uint8_t ch, int8_t offset)
{
int ret;
uint8_t value = (uint8_t)(offset - 0x80);
if (ch >= dev->num_channels)
return -EINVAL;
ret = ad7606_spi_reg_write(dev,
AD7606_REG_OFFSET_CH(ch), value);
dev->offset_ch[ch] = offset;
return ret;
}
系統(tǒng)增益誤差校準(zhǔn)
根據(jù)每個(gè)通道上選擇的模擬輸入范圍,可編程增益放大器(PGA)配置為選擇適當(dāng)?shù)脑鲆妫ǚ答侂娮瑁≧FB)/輸入電阻(RIN)) 調(diào)整模擬輸入信號以滿足ADC的輸入范圍。
圖4.模擬輸入電路,AD7606的RIN為1 MΩ,而AD7606B的RIN為5 MΩ
在內(nèi)部,AD7606B對R具有嚴(yán)格的控制FB和 R在,使得該理想增益通過工廠調(diào)整精確設(shè)置,假設(shè)前端沒有電阻。但是,如果在前端放置一個(gè)外部電阻,例如用于保護(hù)或額外濾波,則實(shí)際增益不再是理想的RFB/R在.
添加 R濾波器串聯(lián)到 R在修改除數(shù),通過添加額外的增益誤差來改變實(shí)際系統(tǒng)增益。R 越大濾波器使用時(shí),引入的增益誤差越大,如圖5所示。對于給定的 R濾波器,因?yàn)?R在AD7606B的增益誤差(5 MΩ)比AD7606(1 MΩ)大得多,增益誤差由R濾波器與AD7606相比,AD7606B的尺寸要小得多。因此,AD7606B對放置外部R引入的增益誤差不太敏感。濾波器到設(shè)備。
圖5.R引入的系統(tǒng)增益誤差濾波器AD7606或AD7606B(校準(zhǔn)使能或禁用)通過片內(nèi)校準(zhǔn)
了解AD7606數(shù)據(jù)手冊和AD7606B數(shù)據(jù)手冊中提供的典型輸入電阻后,如果有可用資源,可以對控制器側(cè)的后端校準(zhǔn)(現(xiàn)場可編程門陣列(FPGA)、DSP)進(jìn)行編程。但是,如果在軟件模式下使用AD7606B,則每個(gè)通道的片內(nèi)寄存器可以自動(dòng)補(bǔ)償此系統(tǒng)增益誤差。由于AD7606B的輸入阻抗在每個(gè)器件上都是內(nèi)部準(zhǔn)確的,因此其自動(dòng)增益校準(zhǔn)始終比基于輸入阻抗典型值編程的任何后端校準(zhǔn)更精確,從而減輕了在控制器端進(jìn)行所有校準(zhǔn)計(jì)算的負(fù)擔(dān)。圖6所示,在AD7606B上針對特定范圍的R進(jìn)行校準(zhǔn)的示例濾波器值。
圖6.應(yīng)用后端校準(zhǔn)(假設(shè)RIN等于典型輸入阻抗值)與應(yīng)用片上校準(zhǔn)相比的總誤差
圖7.具有每通道增益校準(zhǔn)功能的模擬信號鏈,可減輕后端數(shù)字控制器的負(fù)擔(dān)
要使用增益校準(zhǔn)功能,分配寄存器0x09到寄存器0x10以對R進(jìn)行編程濾波器在每個(gè)通道上使用,最高可達(dá)65 kΩ,分辨率為1024 Ω。使用此功能,系統(tǒng)增益誤差可以保持在0.02%以下,與R無關(guān)濾波器,如圖 5 所示。如果使用后端校準(zhǔn),則由于輸入阻抗的不確定性,請考慮額外的誤差幅度。
例如,27 kΩ R引入的系統(tǒng)增益誤差濾波器通道5前端使用,通過將0x1B(27d)寫入CH5_GAIN寄存器(地址0x0D)進(jìn)行自動(dòng)補(bǔ)償,如圖8所示。要了解有關(guān)如何對CHx_GAIN寄存器進(jìn)行編程的更多信息,請參考AD7606B產(chǎn)品頁面中的AD7606x軟件模型。
圖8.CH5_GAIN 寄存器,地址0x0D
為了配置通道的增益,以下代碼執(zhí)行前面提到的功能:
int32_t ad7606_set_ch_gain(struct ad7606_dev
*dev, uint8_t ch,
uint8_t gain)
{
int ret;
if (ch >= dev->num_channels)
return -EINVAL;
gain = field_get(AD7606_GAIN_MSK, gain);
ret = ad7606_spi_reg_writewrite(dev,
AD7606_REG_GAIN_CH(ch), gain);
dev->>gain_ch[ch] = gain;
return ret;
系統(tǒng)相位誤差校準(zhǔn)
當(dāng)通過電流互感器測量同一電源線上的電壓和電流時(shí),兩個(gè)通道之間存在相位不匹配。如果 R 不匹配,則可能會(huì)發(fā)生類似的事情濾波器和濾波電容(C濾波器) 之間 必須同時(shí)采樣的兩個(gè)通道。
AD7606B可通過延遲內(nèi)部采樣時(shí)刻來內(nèi)部補(bǔ)償系統(tǒng)相位誤差。在圖 9 所示的示例中,存在輕微的延遲 (tPHASE_REG) 在通道 1 和通道 4 之間。如果知道此時(shí)間延遲,則通過編程 它返回到CH4_PHASE寄存器(地址0x1C),通道4實(shí)際上是采樣的tPHASE_REGV1之后的時(shí)間,補(bǔ)償兩個(gè)通道之間的相位失配并提供同相輸出。
請注意,延遲任何通道都意味著延長BUSY 引腳高電平時(shí)間,即轉(zhuǎn)換時(shí)間(t卷積) 的擴(kuò)展與編程最延遲的通道一樣多,因此,最大吞吐速率可能會(huì)受到影響。
圖9.系統(tǒng)相位校準(zhǔn)功能
每個(gè)通道有一個(gè)相位寄存器,地址0x19到地址0x20,允許以1.25 μs的分辨率單獨(dú)補(bǔ)償每個(gè)通道上的相位誤差,并且每個(gè)通道中相對于CONVST引腳信號的時(shí)間延遲高達(dá)318.75 μs。
要檢查此功能,請執(zhí)行以下步驟:
向所有信號鏈輸入施加一個(gè)交流電源(或具有精確相位控制的多通道校準(zhǔn)器),如50 Hz或60 Hz。
捕獲足夠的通道代碼,以通過快速傅里葉變換 (FFT)、離散傅里葉變換 (DFT) 或其他方法計(jì)算通道到通道組的延遲匹配。
以1.25 μs的步長計(jì)算CHx_PHASE_OFFSET寄存器值。
將相位匹配誤差寄存器寫入AD7606B。
若要寫入相位匹配錯(cuò)誤寄存器,請使用以下代碼:
int32_t ad7606_set_ch_phase(struct ad7606_dev
*dev, uint8_t ch, uint8_t phase)
{
int ret;
if (ch >= dev->num_channels)
return -EINVAL;
ret = ad7606_spi_reg_write(dev,
AD7606_REG_PHASE_CH(ch), phase);
dev->phase_ch[ch] = phase;
return ret;
}
開路檢測
如AN-1559應(yīng)用筆記所述,因?yàn)锳D7606B具有更大的R在比AD7606(5 MΩ對比1 MΩ)更容易檢測傳感器何時(shí)斷開 通過使用給定的下拉電阻(R帕金森) 允許與傳感器并聯(lián)。R的增加在當(dāng)傳感器斷開連接時(shí),ADC輸出代碼較低。
圖 10.帶 R 的模擬前端帕金森
進(jìn)入AD7606B的軟件模式時(shí),有一個(gè)開路檢測功能,默認(rèn)情況下禁用,有兩種可能的模式:手動(dòng)和自動(dòng)開路檢測。
手動(dòng)模式
默認(rèn)情況下,開路檢測功能處于禁用狀態(tài),但將0x01寫入OPEN_DETECT_QUEUE寄存器(地址0x2C)可啟用手動(dòng)開路檢測模式。
圖 11.OPEN_DETECT_QUEUE 寄存器,地址0x2C
在手動(dòng)模式下,如果ADC代碼重復(fù)多次轉(zhuǎn)換,則在假設(shè)傳感器已斷開連接之前,可以通過更改PGA共模來驗(yàn)證斷開連接。PGA的共模電壓由OPEN_DETECT_ENABLE寄存器(地址0x23)中相應(yīng)的CHx_OPEN_DETECT_EN位控制,每個(gè)通道,如圖12所示。如果更改給定通道上的PGA共模會(huì)更改ADC輸出代碼,則表示傳感器已斷開連接。否則,傳感器仍連接到模擬輸入。
圖 12.OPEN_DETECT_ENABLE 寄存器,地址0x23
此方法仍然需要一些后端工作。檢測N個(gè)重復(fù)采樣(低于閾值),更改PGA共模,然后驗(yàn)證ADC輸出代碼是否隨共模變化而變化。通過啟用自動(dòng)模式可以消除這種負(fù)擔(dān),該模式允許AD7606B自動(dòng)檢測何時(shí)發(fā)生開路。若要在手動(dòng)模式下實(shí)現(xiàn)開路檢測算法,請使用以下代碼:
/* Enter into manual open circuit detection mode */
do {
if (ad7606_spi_reg_write(device, AD7606_REG_OPEN_DETECT_QUEUE, 1) == SUCCESS) {
/* Read the ADC on selected chnnel (first reading post open circuit detection start) */
prev_adc_code = single_data_read(device,
channel->ch_num - 1,
attr_polarity_val[channel->ch_num - 1]);
/* Perform N conversions and monitor the code delta */
for (cnt = 0; cnt < MANUAL_OPEN_DETECT_CONV_CNTS; cnt++) {
/* Check if code is within 350LSB (nearest ZS code) */
if (prev_adc_code>= 0 && prev_adc_code < MANUAL_OPEN_DETECT_ENTRY_TRHLD)
{
/* Perform next conversion and read the result */
curr_adc_code = single_data_read(device,
channel->ch_num - 1,
attr_polarity_val[channel->ch_num - 1]);
/* Check if delta b/w current and previus reading is within 10 LSB code */
if (abs(curr_adc_code - prev_adc_code) > MANUAL_OPEN_DETECT_CONV_TRSHLD) {
open_detect_done = true;
break;
}
/* Get the previous code */
prev_adc_code = curr_adc_code;
} else {
open_detect_done = true;
break;
}
}
/* Break if open circuit detection aborted (in case above conditions not met) */
if (open_detect_done)
break;
/* Set common mode high (enabling open circuit detect on selected channel) */
if (ad7606_spi_reg_write(device,
AD7606_REG_OPEN_DETECT_ENABLE,
(1 << ((channel->ch_num) - 1))) == SUCCESS) {
/* Perform next conversions (~2-3) and read the result (with common mode set high) */
for (cnt = 0; cnt < MANUAL_OPEN_DETECT_CM_CNV_CNT; cnt++) {
udelay(100);
curr_adc_code = single_data_read(device,
channel->ch_num - 1,
attr_polarity_val[channel->ch_num - 1]);
}
/* Check if delta b/w common mode high code and previous N conversion code is >
threshold */
if ((curr_adc_code - prev_adc_code) < MANUAL_OPEN_DETECT_THRESHOLD_RPD50K) {
open_detect_done = true;
break;
}
} else {
return -EINVAL;
}
/* Break if open circuit detection aborted (in case above conditions not met) */
if (open_detect_done)
break;
/* Set common mode low (disabling open circuit detect on channel) */
if (ad7606_spi_reg_write(device,
AD7606_REG_OPEN_DETECT_ENABLE,
0) == SUCCESS) {
/* Perform next conversion and read the result (with common mode set low) */
curr_adc_code = single_data_read(device,
channel->ch_num - 1,
attr_polarity_val[channel->ch_num - 1]);
/* Check if delta b/w common mode low code and previous N conversion code is <
threshold */
if (abs(curr_adc_code - prev_adc_code) < MANUAL_OPEN_DETECT_THRESHOLD_RPD50K) {
open_detect_flag = true;
open_detect_done = true;
}
} else {
return -EINVAL;
}
} else {
return -EINVAL;
}
} while (0);
自動(dòng)模式
在自動(dòng)模式下,以前的方法是在芯片上實(shí)現(xiàn)的,消除了檢測傳感器斷開連接的后端軟件的負(fù)擔(dān)。自動(dòng)模式通過在標(biāo)志觸發(fā)之前寫入轉(zhuǎn)換次數(shù) (N) 來啟用,如圖 11 所示。然后,可以通過OPEN_DETECT_ENABLE寄存器單獨(dú)啟用或禁用每個(gè)通道檢查器(圖 12)。
該算法在圖13的圖表中進(jìn)行了簡化,在后臺運(yùn)行,如果在特定通道中觸發(fā)錯(cuò)誤標(biāo)志,則可以在OPEN_檢測到寄存器(地址0x24)或STATUS報(bào)頭(如果附加到ADC數(shù)據(jù))或STATUS寄存器中檢查該算法。
圖 13.自動(dòng)開路檢測算法
以下代碼在自動(dòng)模式下實(shí)現(xiàn)開路檢測算法。自動(dòng)檢測開路所需的時(shí)間取決于其他元件,如外部RC元件和過采樣率。要計(jì)算此時(shí)間,建議訪問AD7606B產(chǎn)品頁面并下載“工具和仿真”部分提供的設(shè)計(jì)工具。該工具允許用戶了解有關(guān)本應(yīng)用筆記中描述的其他校準(zhǔn)功能的更多信息。
/* Enter into open circuit auto open detect mode */
if (ad7606_spi_reg_write(device,
AD7606_REG_OPEN_DETECT_QUEUE,
open_detect_queue_cnts[channel->ch_num - 1]) == SUCCESS) {
/* Enable open circuit detection on selected channel */
if (ad7606_spi_reg_write(device,
AD7606_REG_OPEN_DETECT_ENABLE,
(1 << ((channel->ch_num) - 1))) == SUCCESS) {
/* Monitor the open detect flag for max N+15 (open detect queue count) conversions.
* Note: In ideal scenario, the open detect flash should be monitored continuously while
* background N conversions are in progress */
for (conv_cnts = 0;
conv_cnts < (open_detect_queue_cnts[channel->ch_num - 1] +
AUTO_OPEN_DETECT_QUEUE_EXTRA_CONV_CNT);
conv_cnts++) {
if (ad7606_convst(device) == SUCCESS) {
udelay(100);
/* Monitor the open detect flag */
if (ad7606_spi_reg_read(device,
AD7606_REG_OPEN_DETECTED,
&open_detect_flag) == SUCCESS) {
open_detect_flag >>= (channel->ch_num - 1);
open_detect_flag &= 0x1;
rw_status = SUCCESS;
if (open_detect_flag) {
break;
}
} else {
rw_status = FAILURE;
break;
}
} else {
rw_status = FAILURE;
break;
}
}
}
監(jiān)視和診斷功能
過壓 (OV)/欠壓 (UV)
AD7606B上的每個(gè)模擬輸入V1至V8和V1GND至V8GND均內(nèi)置比較器電路,用于監(jiān)控過壓和欠壓事件。默認(rèn)情況下,此電路處于禁用狀態(tài)。這些比較器中的任何一個(gè)都可以通過AIN_OV_UV_DIAG_ENABLE寄存器(地址0x25)單獨(dú)使能,以便監(jiān)控模擬輸入電壓,并在超過OV閾值或UV閾值時(shí)觸發(fā)警報(bào)。
圖 14.每個(gè)模擬輸入上的過壓和欠壓電路
電路使能時(shí),當(dāng)任何模擬輸入引腳上的電壓超過AD7606B數(shù)據(jù)手冊中顯示的OV閾值時(shí),AIN_OV_DIAG_ERROR寄存器(地址0x26)顯示哪個(gè)或多個(gè)通道發(fā)生過壓事件。
當(dāng)任何模擬輸入引腳上的電壓低于AD7606B數(shù)據(jù)手冊中所示的UV閾值時(shí),AIN_UV_ DIAG_ERROR寄存器(地址0x27)顯示哪個(gè)或哪些通道發(fā)生欠壓事件。
這些監(jiān)控標(biāo)志允許用戶或控制器快速了解電路保護(hù)應(yīng)用中的模擬輸入何時(shí)超過滿量程電壓,并超過可能對電路其余部分構(gòu)成潛在風(fēng)險(xiǎn)的電壓電平,從而允許控制器采取任何措施幫助保護(hù)系統(tǒng)。
接口檢查
使用接口檢查確保數(shù)據(jù)從AD7606B正確傳輸?shù)綌?shù)字控制器。通過DIGITAL_DIAG_ENABLE寄存器(地址7x0)上的第21位進(jìn)行接口檢查,無論是定期還是在發(fā)生可能導(dǎo)致數(shù)據(jù)傳輸錯(cuò)誤的事件時(shí),使AD7606B時(shí)鐘輸出固定數(shù)據(jù)值而不是轉(zhuǎn)換結(jié)果。這樣,如果接收的數(shù)據(jù)與AD7606B發(fā)送的固定數(shù)據(jù)匹配,則驗(yàn)證通信是否執(zhí)行時(shí)沒有數(shù)據(jù)損壞。
圖 15.AD7606B(目標(biāo))和主機(jī)控制器之間的數(shù)據(jù)傳輸線
有關(guān)數(shù)字接口檢查的更多信息,請參見AD7606B數(shù)據(jù)手冊。
SPI 讀/寫無效
嘗試讀回?zé)o效寄存器地址時(shí),將設(shè)置SPI_READ_ERR位(地址 0x22,位 4)??梢酝ㄟ^設(shè)置SPI_READ_ERR_EN位(地址 0x21,位 4)來啟用無效回讀地址檢測。如果觸發(fā)了 SPI 讀取錯(cuò)誤,則通過覆蓋該位或禁用檢查器來清除該錯(cuò)誤。
嘗試寫入無效寄存器地址或只讀寄存器時(shí),將設(shè)置SPI_WRITE_ERR位(地址0x22,位 3)??梢酝ㄟ^設(shè)置 SPI_WRITE_ERR_EN 位(地址 0x21,位 3)來啟用無效寫入地址檢測。如果觸發(fā)了 SPI 寫入錯(cuò)誤,則通過覆蓋該位或禁用檢查器來清除該錯(cuò)誤。
忙得不可開交
通過DIGITAL_DIAG_ENABLE寄存器(地址0x21,第5位)使能時(shí),BUSY_STUCK_HIGH_ERR_EN監(jiān)控位允許AD7606B在AD7606因任何不太可能的原因停止執(zhí)行轉(zhuǎn)換(BUSY 線路卡?。r(shí),通過置位BUSY_STUCK_HIGH_ERR位(地址0x22,第5位)向控制器發(fā)出警報(bào)。如果發(fā)生這種情況,則此位的斷言表示自動(dòng)發(fā)出部分復(fù)位以恢復(fù)正常操作。
有關(guān)BUSY 卡住高電平監(jiān)控功能的更多信息,請參見AD7606B數(shù)據(jù)手冊。
所有3個(gè)輸入通道均在PGA前面包含一個(gè)診斷多路復(fù)用器,用于監(jiān)控表7606中所述的內(nèi)部節(jié)點(diǎn),以確保AD3B正常工作。例如,表1顯示了通道<>上診斷多路復(fù)用器寄存器的位解碼。選擇內(nèi)部節(jié)點(diǎn)時(shí),輸入引腳上的輸入電壓將從PGA中取消選擇。
地址0x28 | 通道 1 上的信號 | ||
位 2 | 位 1 | 位 0 | |
0 | 0 | 0 | V1 版 |
0 | 0 | 1 | 溫度傳感器 |
0 | 1 | 0 | 4 × V裁判 |
0 | 1 | 1 | 4 × 奧爾多 |
1 | 0 | 0 | 4 × DLDO |
1 | 0 | 1 | 在駕駛 |
1 | 1 | 0 | 阿格德 |
1 | 1 | 1 | 之抄送 |
溫度傳感器
溫度傳感器可通過診斷多路復(fù)用器進(jìn)行選擇,并通過ADC進(jìn)行轉(zhuǎn)換,如AD7606B數(shù)據(jù)手冊所示。溫度傳感器電壓是測量的,與芯片溫度成正比,如下式所示。
通常,溫度傳感器的采樣電壓在室溫下約為0.69 V。
基準(zhǔn)電壓源、模擬低壓差 (ALDO)、數(shù)字低壓差 (DLDO)、V駕駛邏輯電源電壓、AGND和AV抄送模擬電源電壓可以以相同的方式進(jìn)行自我檢測。
使用以下代碼讀取溫度傳感器。
ssize_t get_chn_temperature(void *device,
char *buf,
size_t len,
const struct iio_ch_info *channel)
{
int32_t adc_chn_data = 0;
float temperature;
float voltage;
/* Configure the channel multiplexer to select temperature read */
if (ad7606_spi_write_mask(device,
AD7606_REG_DIAGNOSTIC_MUX_CH(channel->ch_num - 1),
AD7606_DIAGN_MUX_CH_MSK(channel->ch_num - 1),
AD7606_DIAGN_MUX_CH_VAL((channel->ch_num - 1),
TEMPERATURE_MUX)) == SUCCESS) {
/* Allow to settle Mux channel */
udelay(100);
/* Sample the channel and read conversion result */
adc_chn_data = single_data_read(device, channel->ch_num - 1,
attr_polarity_val[channel->ch_num - 1]);
/* Convert ADC data into equivalent voltage */
voltage = convert_adc_raw_to_voltage(adc_chn_data,
attr_scale_val[channel->ch_num - 1]);
/* Obtain the temperature using equation specified in device datasheet */
temperature = ((voltage - 0.69068) / 0.019328) + 25.0;
return (ssize_t)sprintf(buf, "%f", temperature);
}
return -EINVAL;
}
圖 16.忙 卡在高處
審核編輯:郭婷
-
電源
+關(guān)注
關(guān)注
184文章
17718瀏覽量
250167 -
溫度傳感器
+關(guān)注
關(guān)注
48文章
2940瀏覽量
156073 -
DAS
+關(guān)注
關(guān)注
0文章
107瀏覽量
31080
發(fā)布評論請先 登錄
相關(guān)推薦
評論