文章

顯示從 11月, 2015 起發佈的文章

[應用] 超音波與溫濕度系統 (以 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  腳上,當低電位升到高電位的時間是音波發射的時間點,而當高電位降到低電位是接收反射波的時間點。        為了精準計算音波傳輸的時間,我們採用  LPC MCU  的中斷來擷取  Echo  腳的電位變化,計算出兩個中斷產生的時間差,再轉換成距離。一般常溫下,聲音傳遞的速度為  340 m/s ,也就是說聲音每走 1 公分需要  29.4 us ( = 1s / 34000 ㎝ ) 。由於從超音波發射到接收需要走  2 倍的距離,所以我們必須將中斷的時間差除以  2 才是實際超音波傳遞

[筆記] 整合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 排線,而真正使用到 debug 的腳只有五根,分別是 Vcc, GND, NReset, SwClk, SwDio。因此,只要將上述的五根接腳接到 LPC111x 晶片對應的 pin 腳,大致上就完成了。               NReset <---> PIO 0_0               SwClk  <---> PIO 0_10