使用 Arduino BOB 快速評估感測器與周邊裝置

作者:Clive "Max" Maxfield

資料提供者:DigiKey 北美編輯群

物聯網 (IoT) 的興起令許多創新的新創公司為之振奮,希望搭上下一波趨勢熱潮。然而,許多新創公司的設計團隊都較為精簡,在產品上市時間上面臨著較大的限制。因此,設計人員不得不橫跨多個工程領域和任務,如類比、數位、無線射頻 (RF) 和無線/有線網路等。當然,他們不斷設法加快 IC、感測器和周邊裝置的評估速度,並降低其評估成本。

一種作法是使用 IC 廠商提供的評估和開發套件來支援其解決方案。如果支援度很高,這會是一個很好的方法。但還有一種作法,那就是借助 Arduino 生態系統。這個系統早已從業餘愛好者的樂園發展成成熟的設計與支援生態系統。

本文將展示設計人員如何在設計週期的早期階段使用 Arduino 平台,利用開放原始碼硬體 (感測器及周邊裝置分接板 [BOB]) 和開放原始碼軟體 (程式庫及範例程式),來評估 IC、周邊裝置和感測器。本文會以 Maxim Integrated 的即時時脈 (RTC) 和 Adafruit Industries 的分接板為例進行說明。

物聯網的興起

物聯網的第一個真實案例可以追溯到 1980 年代初期。當時,美國卡內基梅隆大學有一部可口可樂機連上網路,程式員可在實際造訪機器前,先用網路查看裡面是否有飲料,以及飲料是否冰涼。物聯網這個概念,直到 1999 年才正式得名。

物聯網實際誕生的時間備受爭議。我們知道「當連到網路上的『東西』或『物品』比人還要多時」,或許就是對物聯網誕生時刻最好的定義。據此,物聯網誕生的時間估計是在 2008 和 2009 年之間,物/人比例從 2003 年的 0.08 成長至 2010 年的 1.84。

Arduino 的崛起

2000 年初期是物聯網的孕育期,創客運動正好也是在此時崛起。2005 年,Arduino 平台首次進行全球佈署。同年,Make 雜誌發行,緊接著一年後,首屆 Maker Faire 召開 (2006 年)。

自誕生以來,Arduino 發展出精細成熟的開放原始碼軟硬體生態系統。當時需要的是設法將受到良好支援的 Arduino 生態系統,引進到專業設計人員的領域,以簡化其工作並加速上市時間。

最終的解決方法其實是無心插柳,從 Arduino 衍生而來的龐大生態系統產生意料之外的附帶效應——專業工程師先是使用 Arduino 來評估感測器和周邊裝置,然後才將其佈署到自己的設計中。此作法如今有許多的範例,例如 RTC。

使用 RTC 評估周邊裝置的範例

現今的 32 位元微控制器幾乎都內建即時時脈 (RTC)。許多 16 位元,甚至 8 位元微控制器也是如此。雖然這能縮小板件的面積、減少物料清單 (BOM) 並降低最終產品的成本,但使用內部 RTC 還是有一些缺點。

其中一個缺點是,微控制器必須在軟體控制下啟用和停用內部 RTC,因此如果發生電源突波之類的問題而導致微控制器鎖定或程式碼迷航,RTC 可能會不慎停用。相較之下,外部 RTC 被視為更加可靠的選擇,原因在於擁有獨立的電軌和晶體,不太可能被微控制器上運作的程式碼意外關閉。此外,外部 RTC 通常是使用比微控制器更大的晶片製程節點來實作,並擁有較大的矽覆蓋區,因此不易受到位元翻轉的影響,即宇宙射線等輻射所造成的單粒子翻轉 (SEU)。

RTC IC 範例:Maxim Integrated 的 DS1307 和 DS3231

Maxim Integrated 的 DS1307DS3231 是目前相當常用的 RTC IC。這兩個元件皆會追蹤時、分、秒、年、月、日和星期資訊,自動調整未達 31 天的月份並考量閏年,同時還支援 24 或 12 小時制。此外,這兩個元件都會透過序列 I2C 匯流排與主機微控制器進行通訊,並含有一個感應電路,可偵測停電並自動切換到備用電源 (通常為電池),確保計時功能得以維持 (圖 1)。

Maxim 的 DS1307 外部 RTC 示意圖圖 1:DS1307 是典型的外部 RTC。此元件的優點是擁有自己的本機晶體和電軌,不容易受到程式碼失敗的影響。此元件可透過 I2C 介面與主機微控制器通訊。(圖片來源:Maxim Integrated)

當然,查看規格書確定這些元件的差異相當重要。例如,DS1307 需要 5 V 電源以及外部晶體。而精確度更高的 DS3231 則可在 2.3 至 5.5 V 的電源下工作,並內建溫度補償式晶體振盪器 (TCXO) 和晶體。

有時,這些元件的差異無法立刻察覺出來。例如,兩個元件都提供 SQW (方波) 輸出。若是在軟體控制下啟動,方波輸出則需要一個外部上拉電阻。然而,對於 DS1307 來說,方波輸出可編程為產生 1 Hz、4.096 kHz、8.192 kHz 或 32.768 kHz 的訊號,而對於 DS3231 來說,此輸出可編程為產生 1 Hz、1,024 kHz、4.096 kHz 或 8.192 kHz 的訊號。

DS1307 的時脈準確度取決於晶體的準確度,以及振盪器電路的電容負載與修整晶體的電容負載之間的匹配準確度。相較之下,溫度補償式 DS3231 擁有更具體的準確度數值,即 -40°C 至 +85°C 下,每年 ±2 分鐘 (圖 2)。

Maxim 的 DS3231 溫度補償式晶體振盪器示意圖圖 2:DS3231 是一款溫度補償式晶體振盪器,在 -40°C 至 +85°C 溫度範圍內具有每年 ±2 分鐘的準確度。(圖片來源:Maxim Integrated)

假設這兩個元件在規格書上,並無任何無法接受的規格,設計人員將如何在現實世界裡進行評估呢?有個解決方法是設計和打造客製化的分接板 (BOB),並從頭開發程式碼來進行驅動。另一個更快且更高成本效益的解決方法則是,使用作為 Arduino 軟硬體生態系統一部分而開發的現成分接板以及程式碼。

RTC 分接板範例:Adafruit 的 DS1307 和 ChronoDot

DS1307 和 DS3231 IC 的兩個常用分接板分別是 Adafruit 的 3296 DS1307 即時時脈分接板 (圖 3),以及 255 ChronoDot 超精準即時時脈 V2.1 分接板 (圖 4)。

Adafruit 的 DS1307 RTC 分接板圖片圖 3:Adafruit 的 DS1307 RTC 分接板。(圖片來源:Adafruit Industries)

ChronoDot 超精準即時時脈 v2.1 分接板圖片圖 4:ChronoDot 超精準即時時脈 v2.1 分接板。(圖片來源:Adafruit Industries)

只需連接適當的微控制器開發板 (例如 Arduino Uno R3),並結合可從網路下載的開放原始碼程式庫和範例程式碼,嵌入式系統和物聯網裝置的專業設計人員即可立刻著手評估。

完成評估後,設計人員可將分接板一些適當的開放原始碼硬體設計部分,直接納入自己的設計中。同樣的,設計人員還可將開放原始碼程式庫以及自己根據開放原始碼範例所開發的程式碼,納入為產品的一部分。

給軟體開發人員的硬體秘訣和訣竅

如前所述,DS1307 和 DS3231 即時時脈 (RTC) 皆透過序列 I2C 匯流排與主機微控制器通訊。有個常令軟體開發人員頭痛的「難題」是,形成此匯流排的兩個訊號 (名為 SCL 和 SDA) 都需要上拉電阻。

Adafruit 的 DS1307 或 DS3231 (ChronoDot) 分接板都沒有這些電阻,但 ChronoDot 含有帶 R1 和 R2 標註的焊盤,可供您加入這些電阻。

之所以未提供上拉電阻,是因為 I2C 匯流排可連接多個元件 (IC 或分接板)。I2C 匯流排採用 7 位元的位址,其中 27 = 128。不過,位址 0000000 是一個通用調用位址,可對匯流排上的所有元件進行定址。因此,從理論上講,此匯流排可支援 127 個離散元件。實際上能支援多少個元件,其實取決於匯流排的電容量,包括走線和負載的電容量 (總電容量限制在 400 pF)。

硬體設計人員可使用一個公式來計算多個並聯電阻的等值。為了方便討論,可以思考以下這個簡單的例子。如果兩個元件具有相同值的上拉電阻,產生的電阻就是這個值的一半;如果四個元件具有相同值的上拉電阻,產生的電阻就是這個值的四分之一。

如果匯流排上已有帶上拉電阻的 I2C 元件,則不需要採取任何進一步的動作。如果沒有上拉電阻,而且設計人員確定未來絕不會添加帶板載上拉電阻的分接板,則最好使用一對 4.7 kΩ 的電阻實現上拉。但是,如果未來有可能會添加帶上拉電阻的分接板,則此時應添加一對 10 kΩ 電阻,這樣無論是否在匯流排上添加其他分接板,都可實現上拉。

給硬體設計人員的軟體秘訣與訣竅

「wire 程式庫」是一種通訊程式庫,能促進和 I2C 元件之間的雙線級通訊。對於 Arduino 平台,此程式庫是整合式開發環境 (IDE) 提供的一部分,因此設計人員只需要在程式的開頭加入 #include <Wire.h> 陳述式即可。

真正的訣竅是找到合適的 RTC 程式庫。有個很好的例子就是 Adafruit 的 RTClib (可從 Github 下載)。下一步就是在程式開頭加入 #include "RTClib.h” 陳述式。

然後 (通常是在定義任何定值之後),根據使用的分接板,利用 RTC_ DS1307 RTC;RTC_DS3231 RTC; 陳述式來實例化 RTC (即建立 RTC 的實例)。

接著,在程式裡設定好一切後 (在 Arduino 草稿碼中,此為 setup() 函數的一部分),設計人員需要加入 Wire.begin(); 和 RTC.begin(); 陳述式來初始化 I2C 通訊和 RTC 子系統。

先前提到的 Github 網頁所提供的範例,就能讓設計人員快速存取和調整目前的日期和時間。比較不顯眼的是方波 (SQW) 輸出的存取方式。為了節能,此輸出預設為停用。此引腳的使用方式之一,是將引腳啟用並設定運作的頻率 (例如 1 Hz),然後使用此訊號來觸發主機微控制器上的中斷。

軟體開發人員可以輕鬆地在程式庫程式碼中找到這些資訊,但硬體設計工程師可能就要非常費勁了,因此以下提供簡略的摘要:

對於 DS1307,只需要加入一個或多個 RTC.Ds1307SqwPinMode(<選項>); 陳述式,其中支援的選項值為 ONOFFSquareWave1HZSquareWave4kHzSquareWave8kHzSquareWave32kHz

同樣地,對於 DS3231,只需加入一個或多個 RTC.Ds3231SqwPinMode(<選項>); 陳述式,其中支援的選項值為 ONOFFDS3231_SquareWave1HzDS3231_SquareWave1kHzDS3231_SquareWave4kHzDS3231_SquareWave8kHz

結論

由於新創公司的團隊規模較小,再加上產品上市時間越來越緊迫,設計人員必須面對多個工程領域和任務,也要不斷設法加快 IC、感測器和周邊裝置的評估速度,並降低其評估成本。如本文所述,其中一個方法便是使用 Arduino 和開放原始碼硬體 (感測器及周邊裝置分接板),以及開放原始碼軟體 (程式庫及範例程式)。

DigiKey logo

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。

關於作者

Image of Max Maxfield

Clive "Max" Maxfield

Clive "Max" Maxfield 在 1980 年從英國雪菲爾哈倫大學取得控制工程學士學位,自此開始擔任大型主機電腦中央處理單元 (CPU) 的設計人員。多年來,Max 已設計眾多元件,從矽晶片到電路板,以及腦電波放大器到蒸汽龐克風格的預知引擎 (別問) 等應有盡有。他更是電子設計自動化 (EDA) 領域的先驅,經驗超過 30 年。

Max 是許多書籍的作者和/或共同作者,包括《Designus Maximus Unleashed》(在阿拉巴馬州列為禁書)、《Bebop to the Boolean Boogie》(電子學的另類指南)、《EDA: Where Electronics Begins》、《FPGAs: Instant Access, and How Computers Do Math》。請瀏覽其 Max's Cool Bean 部落格。

關於出版者

DigiKey 北美編輯群