2014年12月9日 星期二

AFE4400 with Arduino

 總之這次來做個biosensor,
這是利用AFE4400做成的一個測血氧以及心跳的模組,利用一個波長的LED可以看出來心跳的波形,如果再用另一個波長的LED就可以透過比值計算血氧量,AFE4400的工作就是高速切換不同波長的LED以及讀取PN二極體的電流量經由內部類比迴路的處裡之後的電壓.

可以看到一個是發射兩種波長的LED,另一個是接收用的PN二極體

電路還算是有點多東西,而且是QFN....這是我第一次焊接測試成功這種封裝的IC,比起CC3000來說難的多,因為CC3000可以透過ㄉㄨㄞˉㄉㄨㄞˉ的感覺知道說已經焊在一起了,但是AFE體積不大,錫量也很少,基本上只能壓下去然後希望成功這樣QQ
幸好這IC有些輸出可以讓我知道他焊接正常,第一個是VCM以及BG會有電源輸出,附帶一提,VCM是作為接收器的遮蔽用,BG是Bandgap輸出
另外還有4Mhz的clock輸出,
至於LED以及PN有沒有接好,可以利用DIAG讀取狀態,他會檢測有沒有地方短路或是空接
確定完之後就可以開始讀資料了
我之前找到一個Library可以給Arduino用的,結果他竟然寫說這個Code不能用
所以改阿改的,拿LA出來看資料長怎麼樣真的好用,一下就看到問題點,總之改好的東西我放在這https://github.com/will127534/AFE4400


上面是raw,下面是平均10個資料後的輸出

基本上SPI介面長這樣
這是讀取六個ADC data的狀況,可以看到ADC_RDY觸發Interrupt,然後Arrduino先寫說我要讀資料,在讀取完六個後再寫說我不用讀資料惹,以上請參閱Datasheet.

接線的話SPI接SPI,CS接10,RDY接2,RST+PWN接3,4,其他就接電源

接下來就是要分析心跳和血氧量了

這東西搞了我一整個周末...先是改Library的各種bug,之後是改各種參數....從Led current到I-V轉換的參數,到放大器等等
Analog果然很難搞

10 則留言:

  1. I'm at a university in Texas working on a very similar project. I have been having problems getting my LEDs to turn on. I have used many different codes and I was wondering if you could offer any help or advice on how you got yours to work.
    Thanks!

    回覆刪除
    回覆
    1. Hi,I'll suggest using a logic analyser to debug any software problem, also check that AFE4400 is powered on
      (the method is at https://e2e.ti.com/support/applications/medical/f/30/t/369445
      part 7.1)

      刪除
  2. Hi, the AFE is powered on and is functioning properly, but the LEDS only blink during the diagnostics and then stops. Any suggestion on how to keep the LEDs to continue blinking?

    回覆刪除
    回覆
    1. I'll suggest to look at the init code and check if the led setting is correct.

      刪除
  3. 你好
    最近我在測試這顆AFE4400 但在我接上電源後 除了TX_REF的電壓跟TX_CTRL_SUP幾乎一樣 BG和CLKOUT完全沒東西 我在擔心是不是我燒壞了或是沒焊好
    Thanks in advance for your help

    回覆刪除
    回覆
    1. 沒焊接好的機率比較大一點,我映像中沒有焊接到燒掉的
      如果沒短路的話,應該是不至於燒掉
      把QFN拿下來看看底下有沒有錫大概就知道焊接狀況了
      或是打X光啦,如果有的話

      刪除
  4. 你好 請問PCB版哪裡有在賣

    回覆刪除
  5. 可否請教你
    各個腳位要接什麼
    你在文中提到
    "SPI接SPI,CS接10,RDY接2,RST+PWN接3,4,其他就接電源"
    請問電源是用幾V? 我用3.3V 但結果怪怪的
    另外
    "RDY接2" 這個腳位是發interrupt 訊號,可是原始碼(.ino)中
    attachInterrupt(0,readadc,RISING);
    應該是把interrupt和Pin 0連接,是不是表示應該要把RDY連接到Pin 0
    以上問題想跟你請教 謝謝你分享的文章

    回覆刪除
    回覆
    1. 3.3V沒錯,attachInterrupt這個Function的number
      在AVR上對應到的是Interrupt No,並不是Arduino Pin number
      所以需要接在pin 2(Int 0)
      如果你不是用AVR系列或者不是Uno的話,可能要查一下Reference看到底數字要多少(這function有點混亂)

      刪除