2017年9月18日 星期一

關於ADXL345兩三事

  之前想找顆G-Sensor玩, 不知怎麼地就找到ADXL345,也許看到網路上很多人在玩ADXL345吧!不過,這顆的封裝對手藝不好的人來說,要自己焊接腳位出來有點困難!還是去找找breakout, 沒錯吧!果然很多廠商都有在賣做好的breakout, 省了我們很多時間!

  接下來是現實考量,價錢如何?以這個網站來說,買一顆晶片要價台幣80塊錢。我想那breakout不就更貴了嗎?其實不然,只看單純只有分接ADXL345晶片的板子,最便宜的只要台幣65塊,再貴一點的,也只要台幣85塊。當然,貴的也有,那些國外名廠DFROBOT 500塊,Adafruit 750塊,SparkFun 799元。那到底要選那個呢?


  我沒什麼錢,所以選了便宜的,可是又怕有問題,就買了65塊和85塊的各一個。果然,一分錢一分貨!那個65元的,我怎麼試,到現在還是不能用!至於,85塊的,還不錯用哦!



  看圖,可以正常的讀取加速度值。ADXL345可以使用I2C或者SPI界面來與MCU溝通,我先用STM32F401這張意法半導體做的ARM Cortex M4的板子來連接,在MBED的平台上,已經有一個很完整的ADXL345_HelloWorld範例程式(使用SPI界面),可以直接由online compiler滙入,或者到此網址:
  ADXL345-Accelerometer/

但是這張板子剛開始接上時,也不會動,這很奇特,沒辦法,便宜的板子,說明文件就是比較差了一些! 如果買那些貴的板子,特別是SparkFun的,可以看到他們的網站有很詳細的文件,如何接線,如何寫程式,全都清清楚楚。不過,這樣好像也少了一些樂趣!
  還好這板子也附上了電路圖:
85元便宜ADXL345板子電路圖
唉,仔細看了一下,SDO(pin 12)居然已經接地了,難怪訊號都不對了,還好只要把下拉電阻R4移除就可以解決了。心一橫,拿起焊槍,給他燙下去,再試一下,果然就ok了!
這個時候,在網路上找資料時,看到有人提到說: 這種便宜的板子只能接I2C,不像SparkFun的板子可以接SPI又可以接I2C。我有點被困惑了?明明我現在就在用SPI和這張板子連呀,怎麼會說不行呢?

  最近得空,想想人家也許是用Arduino的板子,而不是用ARM Cortex系列的板子,因為Arduino Uno系列的板子是5V, 而ADXL345是3V的,也許有一些差異吧!先去SparkFun查了一下,他們的文件裡把I2C和SPI兩個界面的接法都示範了,也就是說,ADXL345和Arduino Uno板子要用I2C或SPI來接都是可以的。當然了,他們是用SparkFun自己出的breakout。

Sparkfun's ADXL345 breakout
這張Sparkfun的breakout和85元的又有何不同呢?
The NT$ 85 cheap breakout
光看圖片,就知道SparkFun的元件比較少,便宜板子的元件反而比較多!看看SparkFun板子的電路圖吧!
SparkFun ADXL345板子的電路圖
是吧!除了ADXL345晶片外,就只有三顆電容,沒什麼特別的!為什麼它就可以接SPI界面,85元的就不行呢?來做個實驗試試看吧!

先用I2C界面接法試試:
我把程式和接線圖放在: https://github.com/poushen/adxl345_i2c
好的,I2C沒問題!

I2C界面接法
wiring via I2C


接下來用SPI接法試試:
1. 直接Arduino的MISO, MOSI, CLK, CS和85元ADXL345板子的SDO, SDA, SCL, CS對接,果然無法正常讀到資料。看了一下SparkFun網站的文件,發現他們使用了voltage level translator.
2. 加入TI TXB0104(voltage level translator)試試,讀出來的資料不正常,用邏輯分析儀看訊號,發現Clock, SDO部份訊號有時不正常。查了TXB0104的文件,發現它對上拉電阻很敏感,看一下電路圖,便宜板子預先在SDA, SCL, CS三個腳位都有10K的上拉電阻!
3. 手上正好有bidirectional logic level converter (BD-LLC), 就先試試,因為看到的文件中有提到這系列的好像比較不怕上拉電阻。果然,這一換上去,就可以正常讀到資料了。
我把程式和接線圖放在:https://github.com/poushen/adxl345_spi
BD-LLC文件可參考:https://learn.sparkfun.com/tutorials/bi-directional-logic-level-converter-hookup-guide

SPI界面接法
wiring via SPI

結論:沒有所謂便宜的板子不能接SPI這回事!.

  便宜板子只是設想我們會用I2C來接,所以貼心的先備好上拉和下拉電阻。 但是如果你想用SPI來接也是可以的,只要移除R4下拉電阻,再用BD-LLC就可以了。想用TI TXB0104, 我想也是沒問題的,只是要多移除幾個上拉電阻吧!可見:https://learn.sparkfun.com/tutorials/txb0104-level-shifter-hookup-guide

  這樣,再回頭來看,那個Adafruit 新台幣750元的breakout就又更貼心了一些,
Adafruit的板子
除了和85元便宜板子一樣有的整流器, 上拉下拉電阻外,還加上了voltage level shifter,讓你可以更輕易的使用I2C和SPI。
那你會選那一個呢?

不管選那個,記得Sparkfun, Adafruit都已經幫你寫好程式了,有需要不用客氣,都可以免費取得的。當然,要自己寫來玩也不錯,可以參考我放在GitHub的程式。
還有ADXL345原廠的網站也有不少資料可參考:http://www.analog.com/en/products/mems/accelerometers/adxl345.html



張貼留言