文章

[模組] 德州儀器 ADC 24-bit 類比訊號擷取模組 (資料擷取)

圖片
前言         這次接到一個任務,內容是類比訊號的資料擷取,CNC 加工機上面有不少感測器,其中震動感測和電流感測是我這次所要擷取的資料。原本連接在加工機上已有兩個 ADC 資料擷取裝置:研華 USB-4716 和國家儀器 NI-9234,這兩個設備將收集到的資料透過 USB 傳到 PC 端。這次,我必須想辦法將其取代掉,再以 PLC 控制器取代 PC。         首先,這兩個設備的主要功能是類比訊號擷取器,用來收集加工機上面的震動訊號和電流訊號。加工機上面安裝了一個震動感測器 (Dytran 3055B3),將震動訊號轉成電壓,再由 NI-9234 將電壓轉成數位資料。另外,加工機上面也安裝一個電流感測器 (Topstek TU12P10A),將電流轉成電壓訊號,再由研華 USB-4716 將電壓轉成數位資料。首先,我先查詢了 NI-9234 和 USB-4716 資料解析度,分別是 24-bit 和 16-bit,於是從淘寶網站上找到一個 ADC 16-bit 的模組,而且具有八個通道,正好能滿足需求,所以買來研究看看,如圖一所示。這模組上的 ADC 晶片是由德州儀器 TI ADS1256 所構成的核心。另外,我發現這塊模組被用於 Arduino 平台上,官網有提供其 library。 圖一:德州儀器 TI ADS1256 類比訊號模組         之前,曾設計開發過一個控制器 (Windshear),系統底 板的插槽可以提供 5V 電源和 SPI 通訊介面。於是, 我將這塊類比訊號模組加工改造後,接到控制器的底板上,如圖二所示。大功告成後,修修改改一下控制器的 STM32F207 韌體程式,啟用 SPI 介面和 GPIO 中斷,便能開始測試模組了。 圖二:Windshear 控制器加上 ADS1256 模組 元件規格         ADS1256 晶片是一顆具有 24-bit 解析度和八個通道的類比數位轉換器 ADC,根據 datasheet 來看,其內容提到取樣頻率可達 30k SPS (每秒 30k 個取樣點),每個取樣點具有 24-...

[模組] 三軸陀螺儀與加速規 Gyro & Accelerometer

圖片
#  ADXL335 三軸加速計的 USB 體感搖桿 #  三軸重力加速計 Accelerometer (GY-61 ADXL335) 前言         前一篇 " 三軸重力加速計 " 介紹 ADXL335 晶片的重力加速計 (也稱加速規),主要能偵測出三軸的重力變化,便能得知物體轉動方向方位。有一個特殊情況可解釋陀螺儀的作用,當加速規放置水平時,此時轉動轉動 Z 軸,我們會發現 X/Y 軸的重力值變化量其實並不大,請參考底下的實驗影片。這樣的變化量可能被誤以為是雜訊,不容易判斷物體是否方向方位在改變。如果能再多計算每一軸轉動的速度,由轉動的角速度輔助,便能計算物體位移量。於是,陀螺儀正是用來計算角速度的,配合重力計一起使用。因此,若加速規再輔以陀螺儀的功能,這樣能更精準算出物體的移動與轉動方向 (我覺得這是很複雜的數學)。 設計流程         Arduino 官方網站 中提供好多種重力加速計與陀螺儀的模組,我便找了一顆 MPU6050 晶片來測試。這顆晶片不只具有三軸重力加速計,還有陀螺儀的功能,對外的通訊介面為 I2C 方式。首先,實驗過程我採用恩智浦的 LPC1114 控制器來比較一下 MPU6050 與 ADXL335 的重力數值,如圖一所示。圖一的 LCM 第一行顯示的是 MPU6050 X, Y, Z 軸的重力值,第二行顯示的是 ADXL335 的三軸重力值,我已經把兩塊模組的 X/Y 軸方向調整為一致了 (兩塊模組的三軸定義方向其實不太一樣,用軟體方式調整),如圖右下角所示。圖中,X 軸的重力值約為 -0.023g 和 -0.018g,Y 軸的重力值約為 -0.016g 和 0.018g,Z 軸的重力值約為 0.964g 和 1.112g。兩者數值的誤差,我的解釋是實驗過程並沒有做校正的動作,因此兩者模組存在一些誤差。撇開誤差,如果我們的實驗對精準度沒有要求太高的話,倒是很快取得三軸重力數值並計算出大概方位。 圖一:MPU6050 與 ADXL335的加速規數值 (單位 mg) 規格分析         下圖二是 MPU6050 晶片的陀螺儀規格,這顆可提供四種精度,...

[模組] 三軸重力加速計 Accelerometer (GY-61 ADXL335)

圖片
#  ADXL335 三軸加速計的 USB 體感搖桿 #  三軸陀螺儀與加速規 Gyro & Accelerometer 模組介紹         三軸重力加速計是一種重力感測器,也稱為加速規或加速計。三軸指的是 X, Y, Z 軸,重力加速度就是我們高中理化曾學過的地心引力 (g)。由於這個重力加速度是地球的天然資源 (就像磁力線的指南針),所以當我們身體傾斜或翻轉時,透過地心引力的影響讓身體內部機構可感受到其傾斜或翻轉。於是,將此概念應用到科技工業上,像電玩的 體感遊戲 (Wii, Kinect...) 、 飛行器 、 懸臂旋轉 、 震動感測 ...等都使用到相關元件,本文針對三軸重力加速計的晶片做測試研究,希望能獲得更多的應用靈感。首先,找一顆晶片試試吧!Arduino 開發套件常見的三軸加速計,使用的是 ADI ADXL335/345 晶片,因此我買了一個來測試玩玩看,並用 NXP LPC1114 晶片來設計系統。         三軸重力加速計晶片是 MEMS 設計工藝,能將這種感測技術設計到小晶片裡面,不得不佩服這群工程人員。由於地表的重力加速度有方向性,晶片又根據該重力為基準來測量三軸的變化,所以晶片與三軸的方向座標必須先定義好,如下面圖一所示,晶片面朝上為 Z軸。以圖一為例,晶片放置水平,量測到的重力數值為 X 軸 0g, Y 軸 0g, Z軸 1g。然後,該晶片內部再將這三軸的物理量轉換成電壓值輸出。實驗中,我手上拿到的是 ADXL335,它是輸出三軸的電壓值,所以設計系統時需要選用具有 ADC 功能的 MCU ,才能將這三個電壓值轉換回重力值。此外,ADI 還開發另一顆 ADXL345 晶片,與 ADXL335 晶片有些不一樣的地方,前者內部已有包含 ADC 功能,能將重力值直接轉換成數位值,並使用 I2C / SPI 介面和外部通訊,提供使用者不同的選擇。 圖一:晶片的三軸方向座標 規格分析         三軸重力加速計晶片在使用前先要找到 0g 的電壓值,這也是校正歸零的步驟。雖然每顆晶片出廠前都經過測試,但是每顆晶片之間的物理特性還是存在一點點差距,這種差距...

[模組] 德州儀器 CC2540 藍芽開發 + ADC

圖片
       德儀的 CC2540 / 2541 藍芽晶片已經推出市場幾年了,隨著模組廠商的努力開發,將藍芽模組設計成 SMD 貼合元件,對於小型設計廠商的我們真是大大的便利。目前的藍芽模組不僅體積越做越小,價格也越來越親民,如果自己有些 idea 想要設計電路板來驗證藍芽相關的應用的話,直接拿藍芽模組來實現是不錯的方法之一。此外,CC2540 本身就是一顆 8051 為核心的晶片,所以具備一些 MCU 的基本功能,若將其 MCU 與藍芽的功能都發揮出來,這樣不僅系統成本降低且耗電量也會減少。本文的目的就是希望直接拿現有的藍芽模組來開發 CC2540,不希望再多用一顆 MCU 來控制這個模組。         一般市面上的藍芽模組都已經把藍芽的基本功能開發好了,藍芽的參數配置只要透過模組提供的 UART 介面(最常見的基本介面)來設定。這種作法除了需要藍芽模組之外,還需要另一顆 MCU 來控制這片藍芽模組,所以使用者通常會選擇自己熟悉的 MCU 來開發藍芽通訊。之前文章,我們已經採用 Arduino 晶片控制藍芽模組的方式完成藍芽通訊,底下將說明如何用市面上的模組來開發 CC2540。         我們拿市面上容易買到 HC-05 / HC-08 的藍芽模組來實驗,這塊模組原本是透過 UART 介面與外部的 MCU 溝通,讓使用者不需要為了藍芽的技術知識而傷腦筋。模組本身已經內建設計好藍芽的基本功能,使用者只需藉由 UART 介面設定參數便可動作。不過,我們卻想要把這塊模組改造,將本身的 MCU 與藍芽的功能發揮出來。首先,要準備德儀的 CC-Debugger 除錯器和安裝 IAR Embedded 軟體。接下來,將模組上面的五根接腳接出來,分別為 Vcc, 、 GND 、 RST 、 DC 和 DD,再連接到除錯器的相對應接腳,這樣就可以準備開發 CC2540 的韌體了。底下圖一所示就是將 CC-Debugger 連接到自製的藍芽開發板。 圖一:CC-Debugger 連接自製 CC2540 開發板         將 CC-Debugger 接上自製的開發板,到德儀的網站下...

[應用] 超音波與溫濕度系統 (以 NXP LPC11x 控制器實現)

圖片
前言        這是一個超音波測距和溫濕度系統,MCU 當作系統的核心,整合超音波模組 、溫濕度模組 、和 LCM 顯示模組。系統的電源為 5V,耗電量約 26mA,使用三顆四號電池供電。可應用的範圍,如:自走車 、掃地機器人 、停車場車位偵測...等。我們先在麵包板上把各個模組的電路功能設計出來,並驗證韌體程式可以正常運作,接下來再製作成 PCB 電路板。 元件介紹        超音波模組  HC-SR04 :如下圖所示,一般常使用在  Arduino  系統上,做為自走車的距離感測器,利用發射超音波與接收其反射波的時間差計算出前方物體的距離,再根據距離遠近做出適當的動作。        溫濕度零件  DHT11 :這是溫度與濕度整合的零組件, 其工作電壓在  3~5.5V ,具有  8-bit  的解析度,溫度範圍  0~50 度 C ,濕度範圍  20~90% ,可應用的領域像是家電 、空調、數據紀錄器、自動控制 … 等等。     NXP LPC11xx 系列的 MCU :這是ARM  Cortex-M0 為核心的控制器,運算速度約  50MHz ,用來控制超音波模組和溫濕度模組,包含控制一個 2x16 LCM 顯示模組,如下圖所示。除了讀取溫濕度數據之外,同時  MCU  計算超音波傳輸的時間,再將數值轉換成反射物的距離,並將所有資訊顯示在 LCM 上。 圖一:超音波與溫濕度系統 圖二:超音波測距模組 原理說明        LPC1114 MCU  對超音波模組的 Trig 腳發出一個  pulse ,突波的時間需超過 10 us 以上,如下圖所示。超音波的反射信號會回應在模組的  Echo  腳上,當低電位升到高電位的時間是音波發射的時間點,而當高電位降到低電位是接收反射波的時間點。       ...

[筆記] 整合NXP LPC11x 與 KEIL C 開發環境

圖片
        三~四年前,當開發恩智浦的 LPC11xx (ARM Cortex-M0) 韌體時,設計者必須在名為 LPCXpresso 的套裝軟體下執行,它提供各系列晶片的周邊驅動程式與原始碼,方便使用者 compile & link。如果要除錯程式的話,這套軟體必須再搭配使用名為 LPC-Link 的除錯器,我們用它來除錯也可燒錄代碼。幾年前,LPC 並不支援在 KEIL C 的環境開發 (當時很多 ARM 晶片都用 KEIL 環境開發),所以只能安裝 LPCXpresso,後來 LPC 已經成功整合到 IAR / KEIL 等環境了。有關的開發軟體與除錯器可以連結到 LPCware 的網站上。         最近我的 LPC-Link 好像壽終正寢,USB 完全偵測不到它。原本想再買一個 LPC-Link,不過因工作需要我也常常使用 ULINK2 在開發與除錯意法半導體 STM32 晶片 (ARM Cortex-M3),於是想要將 LPC 開發環境移植到 KEIL C上面,這樣就只要維護一套開發軟體和一個除錯器,也能開發設計 STM32 和 LPC11x 韌體了。圖一就是移植到 KEIL 所需的重要檔案,原本的驅動程式原始碼移過來,並替換掉下列的檔案,基本上就大功告成了。                core_cm0.c                system_LPC11xx.c                startup_LPC11xx.s   (原 cr_startup_lpc11.c in LPCXpresso) 圖一:LPC11xx 整合到 KEIL環境         除錯的方面,因為不用 LPC-Link 後,首先要將 ULINK2 除錯器接到晶片接腳上。我的 ULINK2 一端連著一條 20-pin JTAG 排線,而...

[筆記] Android APP BLE範例程式 -- BluetoothLeGatt

圖片
前言         在 Android 裡面的藍芽和低功耗藍芽 (Bluetooth Low Energy) 控制方式不一樣,這裡有一篇文章[ 連結 ]說明傳統藍芽與 BLE 有哪些部份不同。此外在 API 方面,很多低功耗藍芽的函式必須在 API level 18 以上才能使用,也就是 Android 4.3平台以上。上一篇介紹的 BluetoothChat 程式是採用傳統的藍芽控制方式,為了讓開發者認識 BLE 如何控制,Android 官方網站提供一個 BLE Gatt 的範例程式,圖一所示是這個範例程式的專案檔,主要的程式檔為 DeviceScanActivity 、 DeviceControlActivity 和 BluetoothLeService。 圖一:BLE範例程式專案檔         圖二所示是這個範例的系統方塊圖,從 AndroidManifest.xml 設定檔可得知操作畫面先呼叫 DeviceScanActivity 類別,它衍生自 ListActivity 類別。這 Activity 畫面的 onCreate( ) 函式裡面依舊執行傳統藍芽的檢查: 檢查本身有無藍芽裝置 (參考前一篇 BluetoothChat 的做法) 檢查有無 BLE service 打開藍芽功能 搜尋 BLE 設備        當 DeviceScanActivity 創建出來後,畫面右上方會出現選單,這對應到類別的 option 操作。這裡有兩種選擇:start scan 或 stop scan,如下圖的左邊所示。當搜尋後的結果會列在畫面上,操作者可以從中選一 BLE 設備進行連線,如下圖的右邊所示。透過 Intent 方式開啟 DeviceControlActivity 類別,生成這類別過程會開啟 BluetoothLeService 這個藍芽服務。這裡使用了一個技巧,就是 bind service 的方法,我們把這個 service 類別想像成提供在背景持續工作的服務,而且能提供訊息給 UI 畫面。 圖二:BLE範例的系統方塊圖 搜尋 BLE 設備 ...