ADS1198ADS1298開發(fā)設(shè)計心得與遺留問題總結(jié)
《ADS1198ADS1298開發(fā)設(shè)計心得與遺留問題總結(jié)》由會員分享,可在線閱讀,更多相關(guān)《ADS1198ADS1298開發(fā)設(shè)計心得與遺留問題總結(jié)(9頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 ADS1198/ADS1298開發(fā)設(shè)計心得與遺留問題總結(jié) 首先非常感謝TI公司的支持,自己手里面的6片ADS1198全部是從TI公司申請到的,并且遇到問題后能TI的技術(shù)支持工程師能及時給出解答,所以寫這篇文章,一是對自己這幾個月工作的總結(jié),二是也算是對TI公司的感謝,也希望能幫助到以后使用ADS1198/1298的朋友。 本人使用MSP430F5418與ADS1198設(shè)計12導(dǎo)心電監(jiān)測儀,其實就是個低檔的HOLTER,在HOLTER的基礎(chǔ)上加了幾個操作按鍵和LCD顯示屏。歷時3個多月,前幾天算是能比較滿意的用ADS1198
2、采集到ECG信號了!現(xiàn)在簡單說下開發(fā)過程以及遇到的一些問題。 先說下MSP430單片機,本人01年開始使用(那是還是大四),先后使用過1100,135,149,2418等型號,這次選用了5418,因為信價比高,等開始實際調(diào)試使用時,才發(fā)現(xiàn)5418與之前的型號有很多升級。增加了幾個功能模塊同時也整合了一些功能模塊。比如SYS模塊,PMM模塊,UCS模塊等(還有一些功能由于沒用上也沒研究),這幾個模塊我看了很長時間英文資料(英文水平不咋地)后,發(fā)現(xiàn)SYS和PMM模塊對我根本就沒有用,并且把PMM模塊關(guān)掉了,增加了這些模塊視乎能提高430的安全性,但我覺得430這種單片機由于設(shè)計宗旨是低功耗3V供
3、電。所以一般都是采用電池供電的,加上這2個模塊似乎意義不大。反而與之前的型號兼容性不好了! 本人在做這款12導(dǎo)心電監(jiān)測儀之前搞過1年多心電,只用運放做過9導(dǎo)心電監(jiān)測儀,所以在ECG方面的經(jīng)驗還是很少的,發(fā)現(xiàn)這款A(yù)DS1198芯片還是在電源網(wǎng)上看到的,申請到樣片后,手冊和開發(fā)指南看了不下七八遍才基本理解明白,現(xiàn)在說說自己曾經(jīng)迷糊而后來解決以及仍沒解決的問題列出來: 1. ADS1198有16位AD,可是PGA增益最大只有12,沒有二級放大,對于ECG信號最大幅值在5mV左右,經(jīng)過12倍放大為60MV, 60/2400*65536=1638,即只要用12位就能標示出ECG信號了,也就是說浪費掉
4、了4位AD,如果用ADS1298也會同樣出現(xiàn)這種情況,只是會比1198精確些而已,如果用ADS1198/1298測量EEG信號,EEG信號是uV級的,真不能能不能用啊! 2. 請看手冊第12頁,這里的這幅圖下面的NOTE寫著SPI CPOL=0,CPHA=1,但是實際在調(diào)試程序時我發(fā)現(xiàn)這里應(yīng)該設(shè)置為CKPH=0,CKPL=0. 3. 手冊20頁的公共點參考電壓的公式似乎也由點問題,這里是AVDD-0.2V我覺得不對,應(yīng)該是VREF+,因為如果按以上公式計算出的公共參考電壓,有可能最大幅值超過VREF+,也就是AD不能正確的采集出實際數(shù)值。 4. 手冊第19頁中設(shè)置CHNSET[2:
5、0]=011時,1,2,5,6,7,8是用來測量AVDD/2,而3,4是用來測量DVDD/2,我設(shè)計的電路板是AVDD與DVDD電壓相同,通過磁珠連接,結(jié)果測試出來的數(shù)據(jù)1,2,5,6,7,8 比我計算的理論數(shù)據(jù)差了10000多,而3.4比理論數(shù)據(jù)差了1000多,這兩組之間也差了10000多,這個問題我現(xiàn)在也沒搞明白,請TI的工程師和使用過的朋友解答一下吧。 5. 當我用心電模擬儀輸入信號時,(我的設(shè)計中1,2,3,4,5,6,7,8分別對應(yīng)II,III,V1,V2,V3,V4,V5,V6),發(fā)現(xiàn)但我設(shè)置8個通道檢測導(dǎo)聯(lián)脫落時(即設(shè)置LOFF_SENSP=0XFF, LOFF_SENSN=0
6、XFF),II,III的基線與V1,V2,V3,V4,V5,V6相差10000多,如果設(shè)置LOFF_SENSP=0X00, LOFF_SENSN=0X00時,即不檢測導(dǎo)聯(lián)脫落時,II,III,V1,-V6就在同一基線上了。這個也沒搞明白。有待朋友們解答。 6. 當心電模擬儀測試信號好用后,我實測人體信號,發(fā)現(xiàn)各路信號基線都不一致,我調(diào)試了半個月也沒調(diào)出來,(我的設(shè)計基本上是抄TI的設(shè)計指南里的原理圖的,我也明白為什么TI設(shè)計指南里為什么沒有給出實測人體信號!,估計它的板子也一樣有這個問題),后來請教TI的技術(shù)支持工程師JHL老師,他說要加高通濾波器,后來我在輸入進ADS1198前加了各種高通
7、濾波器,發(fā)現(xiàn)最實用的竟然是用0.1UF加10M電阻,這樣這8路信號基本上在一條直線上了,(V1偏差大一點與其他的基線差100左右),但加了電阻電容濾波后,用心電模擬儀再測量時,原本一致的基線現(xiàn)在反而有偏差了,我是搞糊涂了!另外今天剛看到JHL老師的回復(fù),說他說的加高通濾波實際上是軟件濾波,如果是這樣的話,看來我用430就不行了,應(yīng)該改DSP做FFT變換吧! 總結(jié)一下,ADS1198/1298的確集成了很多ECG電路,比如8路儀表放大,威爾遜網(wǎng)絡(luò),內(nèi)部測試信號,導(dǎo)聯(lián)脫落檢測(我用著不好使,呵呵)等等,而且也降低了功耗,節(jié)省了成本。是做便攜式設(shè)備很好的選擇,但問題也很大,內(nèi)部只有前級放大,沒
8、有加二級放大,同時由于集成度太高,儀表放大后直接進AD,不能加高通,低通,以及抗肌電干擾等電路。這些工作恐怕全部要留給上位機用軟件來解決,至于能解決到什么程度,我就不知道了! 以上就是個人使用ADS1198/1298的一些心得,能解決的問題以及遺留的問題,由于本人能力有限,估計會有很多錯誤和誤解。以上所寫,僅供大家參考,謝謝! 作者:liangzuolin 一下附上我用430開發(fā)
9、的程序,已經(jīng)調(diào)試通過,僅供參考! #define ADS1198_CS0 P3OUT &= ~BIT0 #define ADS1198_CS1 P3OUT |= BIT0 #define ADS1198_START0 P2OUT &= ~BIT5 #define ADS1198_START1 P2OUT |= BIT5 #define ADS1198_RST0 P2OUT &= ~BIT6 #define ADS1198_RST1 P2OU
10、T |= BIT6 #define ADS1198_PWDN0 P2OUT &= ~BIT4 #define ADS1198_PWDN1 P2OUT |= BIT4 #define ADS1198_READY (P2IN&0x40) #define RDATAC 0x10 #define SDATAC 0x11 #define FALSE 0 #define TRUE
11、 1 #define Addr_ID 0x00 #define Addr_CONFIG1 0x01 #define Addr_CONFIG2 0x02 #define Addr_CONFIG3 0x03 #define Addr_LOFF 0x04 #define Addr_CH1SET 0x05 #define Addr_CH2SET 0x06 #define Addr_CH3SET
12、 0x07 #define Addr_CH4SET 0x08 #define Addr_CH5SET 0x09 #define Addr_CH6SET 0x0A #define Addr_CH7SET 0x0B #define Addr_CH8SET 0x0C #define Addr_RLD_SENSP 0x0D #define Addr_RLD_SENSN 0x0E #define
13、Addr_LOFF_SENSP 0x0F #define Addr_LOFF_SENSN 0x10 #define Addr_LOFF_FLIP 0x11 #define Addr_LOFF_STATP 0x12 #define Addr_LOFF_STATN 0x13 #define Addr_GPIO 0x14 #define Addr_PACE 0x15 #define Addr_CONFIG4 0x1
14、7 #define Addr_WCT1 0x18 #define Addr_WCT2 0x19 //------------------------------------------------------------------------- // ADS1198 spi 接口初始化 //------------------------------------------------------------------------- void ADS1198_Spi_Init(void)
15、 { P3SEL |= 0x0E; // P3.1,P3.2,P3.3復(fù)用功能 UCB0CTL1 |= UCSWRST; // Put state machine in reset UCB0CTL0 |= UCMST+UCSYNC+UCMSB; // 3-pin, 8-bit SPI Master,MSB first,Mode 0(ucckpl=0,ucckph=1)
16、 UCB0CTL1 |= UCSSEL_2; // SMCLK UCB0BR0 = 0x04; // /4 UCB0BR1 = 0; // UCB0CTL1 &= ~UCSWRST; // 開啟SPI } //---------------------------
17、---------------------------------------------- // 發(fā)送ADS1198單字節(jié)命令 //------------------------------------------------------------------------- void ADS1198_Send_CMD_One(uchar cmd) { while (!(UCB0IFG&UCTXIFG)); // USCI_B0 TX buffer ready? UCB0TXBU
18、F = cmd; // Transmit data } //------------------------------------------------------------------------- // 傳輸ADS1198多字節(jié)命令 //------------------------------------------------------------------------- void ADS1198_Send_CMD_Muti(uchar cmd,uchar le
19、n,uchar dat[])
{
uchar i;
ADS1198_Send_CMD_One(cmd); // 發(fā)送第一字節(jié)命令+地址
ADS1198_Send_CMD_One(len-1); // 發(fā)送第二字節(jié)命令,發(fā)送數(shù)據(jù)長度
for(i=0;i 20、}
//-------------------------------------------------------------------------
// 接收ADS1198多字節(jié)命令
//-------------------------------------------------------------------------
uchar ADS1198_Recive_Data(uchar cmd,uchar len,uchar dat[])
{
uchar i;
ADS1198_Send_CMD_One(cmd) 21、; // 發(fā)送接收命令第一字節(jié)+地址
ADS1198_Send_CMD_One(len-1); // 發(fā)送接收第二字節(jié)命令,接收數(shù)據(jù)長度
for(i=0;i 22、 延時
SomeNOP();SomeNOP();SomeNOP();SomeNOP();
if(UCB0IFG&UCRXIFG) // 判斷接收標志
{
dat[i] = UCB0RXBUF; // 接收數(shù)據(jù)字節(jié)
}
else
{
return FALSE;
}
}
23、 return TRUE;
}
//-------------------------------------------------------------------------
// 連續(xù)采集模式下接收數(shù)據(jù)
//-------------------------------------------------------------------------
uchar ADS1198_ReadData_Continue(uchar dat[],uchar len)
{
uchar i;
for(i=0;i 24、
{
ADS1198_Send_CMD_One(0); // 發(fā)送SPI時鐘,DOUT=0
SomeNOP();SomeNOP();SomeNOP();SomeNOP(); // 延時
SomeNOP();SomeNOP();SomeNOP();SomeNOP();
if(UCB0IFG&UCRXIFG) // 判斷接收標志
{
25、dat[i] = UCB0RXBUF; // 接收數(shù)據(jù)字節(jié)
}
else
{
return FALSE;
}
}
return TRUE;
}
//-------------------------------------------------------------------------
void ADS1198_Init(void)
{
uchar d[8];
P2 26、DIR |= 0x60; // ads1198 RST,READY管腳輸出
P3DIR |= 0x01; // ADS1198 CS 管腳輸出
ADS1198_CS0; // 選中ADS1198
ADS1198_PWDN1; // 禁止進入低功耗 27、模式
ADS1198_START0; // 禁止采集
ADS1198_RST1; // 復(fù)位置高
delayMS(1000); // 延時1S
ADS1198_RST0; // 復(fù)位1198
delayMS(100); 28、 // 延時100MS
ADS1198_RST1; // 復(fù)位清除
delayMS(1);
ADS1198_Send_CMD_One(SDATAC); // 發(fā)送停止命令
ADS1198_Recive_Data(0x20+Addr_ID,1,d); // 讀ADS1198 ID號
if(d[0]==0 29、xB6) // 判斷是否為ADS1198 ID
{
d[0] = 0xCC; // 內(nèi)部參考+2.4V+RLDREF(AVDD-AVSS)/2+RLD buffer允許+RLD檢測允許
ADS1198_Send_CMD_Muti(0x40+Addr_CONFIG3,1,d); // 配置寄存器
d[0] = 0x45; 30、 // Multiple readback+250SPS
ADS1198_Send_CMD_Muti(0x40+Addr_CONFIG1,1,d); // 配置寄存器
d[0] = 0x34; // INT_TEST內(nèi)部測試信號+(-2X測試信號)+Fclk/2.048M
ADS1198_Send_CMD_Muti(0x40+Addr_CONFIG2,1,d); // 配置寄存器
d[0] = 0x3 31、3; // (7.5%/92.5%)+Pull-up/pull-down mode+DC lead-off detection turned on
ADS1198_Send_CMD_Muti(0x40+Addr_LOFF,1,d);
d[0]=0x60;d[1]=0x60;d[2]=0x60;d[3]=0x60;d[4]=0x60;d[5]=0x60;d[6]=0x60;d[7]=0x60;// 12倍增益+正常導(dǎo)聯(lián)輸入
//d[0]=0x65;d[1]=0x6 32、5;d[2]=0x65;d[3]=0x65;d[4]=0x65;d[5]=0x65;d[6]=0x65;d[7]=0x65;// 12倍增益+測試信號輸入
ADS1198_Send_CMD_Muti(0x40+Addr_CH1SET,8,d);
d[0] = 0x01;d[1] = 0x03; // RLD1P,RLD1N,RLD2N對應(yīng)R,L,F,為右腿驅(qū)動源
ADS1198_Send_CMD_Muti(0x40+Addr_RLD_SENSP,2,d); // 配置寄存器
33、 d[0] = 0x00;d[1] = 0x00; // 8個通道不檢測測導(dǎo)聯(lián)脫落
ADS1198_Send_CMD_Muti(0x40+Addr_LOFF_SENSP,2,d); // 配置寄存器
d[0] = 0x01; // 通道1,通道2作為起搏檢測通道,開啟起搏檢測緩沖器
ADS1198_Send_CMD_Muti(0x40+Addr_PACE,1,d); // 配置寄存器
34、
d[0] = 0x02; // 持續(xù)轉(zhuǎn)換模式+Lead-off comparators enabled
ADS1198_Send_CMD_Muti(0x40+Addr_CONFIG4,1,d);
d[0] = 0x08;d[1] = 0xCB; // power on WCTA+WCTB+WCTC,RLD1P,RLD1N,RLD2N為威爾遜中心信號源
ADS1198_Send_CMD_Muti(0x40+Addr_WCT1,2,d);
ADS1198_Send_CMD_One(RDATAC); // 連續(xù)讀命令
ADS1198_START1; // 開始數(shù)據(jù)采集
}
}
//--------------------------------------------------------------------------
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 領(lǐng)導(dǎo)班子2024年度民主生活會對照檢查材料范文(三篇)
- 金融工作主題黨課講稿范文(匯編)
- 鍋爐必備學(xué)習(xí)材料
- 鍋爐設(shè)備的檢修
- 主題黨課講稿:走中國特色金融發(fā)展之路加快建設(shè)金融強國(范文)
- 鍋爐基礎(chǔ)知識:啟爐注意事項技術(shù)問答題
- 領(lǐng)導(dǎo)班子2024年度民主生活會“四個帶頭”對照檢查材料范文(三篇)
- 正常運行時影響鍋爐汽溫的因素和調(diào)整方法
- 3.鍋爐檢修模擬考試復(fù)習(xí)題含答案
- 司爐作業(yè)人員模擬考試試卷含答案-2
- 3.鍋爐閥門模擬考試復(fù)習(xí)題含答案
- 某公司鍋爐安全檢查表
- 3.工業(yè)鍋爐司爐模擬考試題庫試卷含答案
- 4.司爐工考試題含答案解析
- 發(fā)電廠鍋爐的運行監(jiān)視和調(diào)整