2023 年,作爲軟件開發出身的我,做了兩款智能硬件産品,注冊了兩個專利,「硬」氣了一把。
硬件開發的基本流程
首先聲明,這裏所說的硬件,更偏向于 ARM 單片機及嵌入式開發。我不是硬件工程師出身,屬于邊學邊幹;可正是如此,我的視角可能更貼近真實、更容易幫你上手。如果哪個環節有更好的做法,歡迎行業内的朋友指正。
▍明确需求
硬件領域很大,又很繁雜,從何說起呢?這是個問題。
首先,還是從需求出發。明确産品要實現哪些功能、有哪些約束條件,有了這些硬性标準,問題的邊界就被大大縮小了。
這裏,以「它适智能跑輪」爲例,從頭到尾,走一遍硬件研發的曆程。
先說一點,産品的研發不是一條直線,而是不斷叠代、甚至重頭再來的過程。爲了描述方便,這裏假設一切是一帆風順的,隻按最終的方案來描述。不過,考慮到商業性,一些地方不會說太細。
▍芯片選型
它适智能跑輪,核心的需求,是記錄數據,然後通過藍牙傳遞出來;主要的約束,是低功耗、長待機。那麽這顆芯片:
性能不能太差,要能支撐起藍牙連接和數據傳輸;
性能也不用太強,不然會增加功耗;
最好能以不同的功耗工作;不工作時休眠,并且可以被藍牙連接喚醒;
要能存儲足夠多的數據。當然,也可以用外圍存儲芯片,但那樣既會增加成本,也會增加 PCB 的面積和複雜性,所以最好能集成進來。
然後,就是其他核心元件,包括藍牙芯片、霍爾傳感器等。
之後,就是确定産品的交互方式,比如顯示、按鍵、聲音等。
再之後,就是确定電源方案。電源對于整個電路設計,是非常重要的。事實上,對最終的電路來說,有一小半的元件,都是電源相關的。具體到這個産品,要支持锂電池供電、Type C 充電、LDO 降壓穩壓、測量锂電池電壓等等。
到這裏,主要的芯片及方案就基本确定了。接下來,就是搭建具體的電路、設計 PCB。
▍設計電路圖
這時,就要面臨 EDA 的選擇。所謂 EDA,類似于軟件開發中的 IDE,就是電路設計所需要用到的軟件。這裏我選擇的是 立創 EDA,它是國産的、免費的,簡單易用。這對于個人或小團隊開發來說,非常重要。商業 EDA 是非常昂貴的;當然,我知道有所謂特别版。但作爲軟件開發出身的我,對正版、免費有天然的親切感。
确定好工具後,可以開始設計電路圖了。
設計電路圖,主要靠兩樣:電路基礎知識、芯片數據手冊。基礎知識自不必說,比如電阻、電容、三極管、MOS 管等基礎元件的使用。對于複雜的芯片,主要是參考其數據手冊的典型電路,針對自己具體的場景進行調整。
這一步還挺好玩的,把一堆元件擺出來,然後用線連啊連,像正極連正極、負極連接地,連着連着就好了。當然,步驟是這麽個步驟,實際不會這麽容易。
一般的電路圖,大概長這樣:
▍設計 PCB
電路圖設計好之後,就是設計 PCB,也就是印刷電路闆。這一步同樣考驗功力,也更加耗時。事實上,不考慮芯片選型的話,PCB 布闆所花費的時間,比電路圖長很多。
這一步,說簡單也簡單。就是确定後電路闆的外尺寸後,把所有元件排排好;并參照電路圖,把各元件通過走線連接起來。
最直接的難點是布線。不考慮多層闆的話,電路闆相當于一個平面,而平面上的線是不能交叉的。這使得必須很恰當地擺放元件,才能避免交叉。有時,還得反向修改電路圖。當然,多層闆可以改善這一點,但成本高,且設計難度加大。如非必要,常見的還是用雙層闆,也就是有正反兩個面可以走線。
當然,PCB 闆還有很多其他難點和要注意的地方,比如要适配外尺寸及開孔、天線及電磁屏蔽、散熱、避免回路、差分信号線等等,這裏就不展開了。
一般的 PCB 闆,大概長這樣:
▍打闆
電路闆設計好之後,就可以制作 PCB,俗稱打闆。這裏依然推薦嘉立創,每月有兩次免費打闆的機會,付費也隻是 20 元起;而且很快,最快隔天就可以收到。
打闆之後,就要焊接元件。這裏又面臨一個選擇,要麽是讓嘉立創這樣的工廠替你完成 SMT 貼片,要麽自己焊接。二者的優缺點很明顯:自己焊,省錢、靈活、不用等,但花時間,且一些很小、引腳很多的元件,不好焊;第三方 SMT 則剛好相反。
一般來講,前期、以及簡單的電路闆,可以自己焊;後期還是傾向于 SMT 服務。
焊接好元件後,就類似這樣:
▍刷固件
電路闆制作好後,就要刷固件。當然,有些簡單的電路,是不需要刷固件的。刷固件,就相當于給硬件裝個操作系統。這裏暫時略去固件的開發。
具體的,電路闆上留刷機接口,配合專用的刷機工具、上位機,就可以将固件寫入芯片的 Flash 存儲。
▍電路測試
刷好固件後,就要開始測試。簡單的,就是先測試下正負極電阻,看有沒有短路。沒問題可以上電,看電路有沒有按預期工作。如果有預留測試點,就測量測試點的電壓等。也可以借助示波器等工具進行測量。
如果遇到問題,不要慌,這太正常了。一般來講,就是先縮小問題的範圍。可以用拆焊等方式,去掉不必要電路的影響,隻看出問題的那部分,方便排查。
對于固件的測試,可以像黑盒一樣觀察硬件是否按預期工作,也可以像白盒一樣進行調試。隻是硬件的調試,遠沒有軟件随便加斷點那麽輕松。
定位問題,找出解決方案,就可以進行下一次制闆。當然,也可以根據實際使用中的不便或問題,對電路進行改進。
▍制作原型
經過幾輪叠代,電路闆基本穩定,可以組裝成原型機,開始使用場景的測試。
這時,通常要制作産品的外殼。最好自己有一定建模能力,這樣可以設計産品的外殼、3D 打印,方便很多。
如果隻是簡單的外殼,可以用嘉立創的工具,可以比較簡單地生成 3D 模型。如果有團隊,可以和同事一起配合進行設計。如果已經有外觀設計,就可以進行結構設計。比如,如何固定電路闆、如何暴露交互接口等。
▍量産電路闆
假設經過一段時間測試,原型通過了,産品也到了規模化生産階段,就要開始批量生産電路闆了。
通常,不是重新上傳設計文件下單,而是返單上一次被驗證過的電路闆。這樣更可靠,避免手抖出錯,導緻批量生産的電路闆報廢。
電路闆批量生産完後,還面臨一個繁瑣的流程:刷固件。之所以說繁瑣,主要還是量。
試想一下,如果刷一個電路闆需要 1 分鍾,聽起來不多吧?可要刷 1000 片呢,那就是 16 小時。不吃不喝,從早上 6 點,刷到晚上 10 點,吓人不。當然,實際沒這麽慢,但基本是這個數量級,快不了太多。
▍生産、包裝、發貨
然後,就可以交付給工廠,進行包裝生産了。繼而轉發至倉庫,用戶在電商平台下單後,就可以快遞出去了。
等用戶收到後開始使用,這時能做的,就是雙手合十,祈禱不要出問題。因爲一旦出問題,大概率不像軟件一樣,升級個版本就能解決,很可能要召回。
說到這裏,就要提一個話題:OTA,就是用戶可以遠程升級固件,來解決問題、或增加功能。這個其實很重要,尤其是在前期、尚未經過大規模用戶實測時。OTA 可以在不召回的情況下,解決一部分問題,減少損失。
▍十全十美
如果一切順利,用戶用起來很開心,滿足了實際需求,帶來正面評價時,就是 産品人最開心的時刻。
至此,就是硬件産品的基本流程。
硬件開發的一些故事
上面隻是走馬觀花地介紹硬件的基本流程,挂一漏萬。下面補充一些細節,解釋下「爲什麽硬件工程師通常發量不多」。
▍如何上手硬件開發
玩芯片的第一步,都是點亮一顆燈;這個操作,相當于軟件領域中打印出 Hello World。當然,做得多了,總有「點亮」芯片的時候,哈哈。
最好邊學邊練,做些小東西練手。
比如,我第一個做給自己用的硬件工具,是 IoT Power 電源轉接頭。
比如,制作批量刷機工具,提高生産效率。
比如,制作小的 PCB,記錄電池放電過程。
總之,制作自己用得上的小工具,是不錯的開始。
從軟件和生态上來講,可以從 Arduino 入手。相對複雜的,就是樹莓派以及各種衍生派。
▍再說芯片選型
芯片選型非常重要,最考慮經驗、能力。而且一旦定了,之後基本不太可能會改;如果改,意味着要兼容兩套方案、非常恰當地處理芯片及産品庫存,總之很麻煩。
芯片的生态很重要。如果一家公司的芯片被廣泛使用,通常意味着它更成熟,隐藏的問題更少。如果選一家小廠的芯片,可能看起來更便宜,但配套的開發軟件不好用,市場上不容易找到使用該芯片的開源方案,等等。更關鍵的,可能有隐藏的問題。而這個問題,一旦量産後才發現,将是非常痛苦的:召回的話,血虧;不召回的話,會有持續不斷的用戶問題。像 STM32、兆易創新 GD32 這些系列,都是比較成熟的選擇。
還有一個問題,就是開發效率與運行效率的平衡。對于電腦或手機上的軟件開發,通常不需要擔心性能問題,CPU、内存、電量管夠。而單片機開發,則沒這麽幸運了。通常,嵌入式使用 C 語言開發。可惜,實在不想這把年紀了,再去啃 C 語言。
最後選擇了合宙 Air101 這顆主芯片。很大的原因,是它支持 LuatOS 開發。簡單地說,就是在芯片上運行了一個 Lua 虛拟機,或者說運行環境。接下來,使用 Lua 這門腳本語言,就可以調用庫函數,快速完成生産代碼的開發。關鍵的,它還支持 OTA 升級。主流嵌入式操作系統 RTOS,包括 μ Clinux、FreeRTOS 等。
有時感覺,硬件産品不是做出來的,是攢出來的;從巨大的元件庫中選型,各種排列組合,最後出産品。
▍配件采購
芯片的采購也比較關鍵。尤其到後期,産品已經上市,準備批量返單時,如果發現一個關鍵的元件缺貨了、漲價了,就很頭痛。如果換芯片,又要有比較長周期的測試。
延伸來說,在硬件衆多配件中,哪怕缺少一個螺絲,也會決定最終産品能否量産。過多屯貨,又會壓資金;之後如果換方案,很可能屯的芯片就無用了。因此,供應鏈管理很關鍵。比如,對于汽車這種有 N 多配件的産品來說,供應鏈管理的難度極大。
▍說說焊接
做硬件,手工焊接是基本功。雖然嘉立創這類平台,打樣已經比較便宜了。但在開發階段,頻繁測試,花費還是不小。更關鍵,來來回回比較花時間、影響效率。很多時候,還是得撸起袖子自己焊。
焊接中,植錫、放元件,是很枯燥的。風槍一吹,爬錫過程很解壓。小元件、多引腳的連錫,是最頭痛的。
當然,還有焊台最佳伴侶:燙傷膏,别問我是怎麽知道的……
▍硬件佬工具多
硬件佬有很多配件、工具,比如各種型号的電容電阻等元件,萬用表、示波器、功率計、焊台等。
電壓電流這些,肉眼是看不見的,需要工具來測量。
比如,同樣是 5V 的電源,有的紋波大、有的小;
比如,标稱是 12V 2A 的電源,真到了 2A 的大負載,是不是會掉電壓;
比如,測量上電時序。
▍原型到産品
對于一款硬件産品,電路闆隻是其中一個環節,作爲一款完整的産品,要考慮的東西還有很多。比如,包裝、說明書、宣傳文案配圖視頻、生産備貨、等等。
産品原型做出來,離規模化上市,還差很遠。什麽東西一上量,性質就變了。
工廠生産,有很多不可控的因素,有很多妥協。事實上,初期設計 100 分的産品,最終批量上市時,能妥協到 70 分以上,已經很不錯了。
第一次批量生産固件,還是很慌的。可能電路設計有問題,也可能生産過程中有缺陷,擔心投入的真金白銀,變成無用的電子垃圾。
做了硬件,真的相信,第一代産品通常是有問題的。硬件比較複雜,使用環境和方式多種多樣;很多問題,隻有在用戶使用過程中才能發現。而發現了問題,很多時候無法通過固件升級來解決,隻能寄希望下一代硬件改進。
當然,如果大家都不支持第一代産品,也就不會有第二代。這世界總需要有人第一個吃螃蟹,也時常獎勵吃螃蟹的人,看大家怎麽選擇了。
▍硬件抄襲
抄襲哪都有,硬件也一樣,術語叫 抄闆。怎麽應對呢?很難。
打磨絲印,算是比較基礎的操作。更有效的,是開發有固件的硬件,也就是硬件裏是有代碼、有固件的,這種就不好直接抄。
▍物理開關
硬件很難避免物理開關。本來想,硬件做得優雅,就不需要物理開關。現在看,意外情況總是有,還是要考慮售後的問題。認慫,給智能模塊加個物理 Reset 開關。其實,很多硬件設備上都有此類開關,比如路由器就比較常見。
▍數字量與模拟量
軟件與硬件的視角不同。
在軟件人眼裏,0 就是 0,1 就是 1,這不是再清楚明白不過的(當然,這裏考慮的是整形數、不是浮點數)。進而,這也是一般人的理解。
在硬件人眼裏,還真不是。像浮點數,1 可能是 0.998,也可能是 1.02,也可能是 > 0.5。或者說,所有的值都有波動、有誤差、有範圍的。
▍嵌入式硬件的局促
比如,在存儲空間很小的芯片中寫代碼,會遇到這樣的問題:需要考慮 2100 年後的事嗎?
如果需要,則需要存儲完整的年份,比如 2023;如果不需要,則可以省點存儲,比如隻存 23。
▍說說藍牙通訊
BLE 藍牙傳輸比較慢。實測有一次通過藍牙傳輸 552KB 的文件,用時 7 分鍾(436 s)。并且,藍牙不穩定、傳輸的可靠性不高;傳輸過程中,很容易出現丢數據、傳錯的情況。
硬件中詭異的問題
由于看不見摸不着,而電路又以光速運行,很容易産生詭異的問題。
比如,有一次電路接線完全正确,死活不幹活。最後通過萬用表測量才發現,其中一根面包線是壞的、不通電的,我去。
比如,钰泰 ETA6093,連接電池,什麽也不做,就會有很多尖峰電流,分鍾平均有 120uA,使得待機時間明顯縮短。後來,問了原廠的技術支持,才知道本來就是這樣的。如果要低功耗,隻能選擇其他型号。倒,之前屯的芯片都用不上,又要開始選芯片了。
比如,測量電路中,如果負載有大電流、大負載,會産生比較大的壓差,會明顯影響測量結果。有時,電源線的長短,都會明顯影響測量結果。
這些問題,很多是自己經驗不足(當然,沒有誰天生經驗就足,都一個一個坑踩過來的),有的是芯片本身有問題,有的數據手冊壓根沒介紹,等等。
▍ LED 不爲人知的細節
不同顔色 LED 的功耗差異非常大。單從電流上看,R/G/B 三者的電流大概是:1.5mA/1mA/0.8mA。但事實上,在此電流下,三者亮度大概是 G >>> B > R。相同亮度下,綠色 LED 是最省電的。
▍多一個能力,就多了一扇窗
和已有能力組合,可以增加很多可能性。
比如,家裏燃氣熱水器壞了,我可以更換其中的風壓開關;
比如,電動車沒有電子報警,我可以裝一個;
比如,鼠标的按鍵太吵,可以換個靜音開關;
比如,做一款智能音箱,連接 ChatGPT 回答問題。
興趣歸興趣、炫技歸炫技,作爲一個産品,滿足真實需求,才是最重要的。
和純軟件開發相比,硬件有不一樣的樂趣。入門并沒那麽難,值得你來嘗試,歡迎入坑。