今天小編分享的科技經驗:如何入門硬體開發?一個軟體開發者的邊學邊做手記,歡迎閱讀。
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 回答問題。
興趣歸興趣、炫技歸炫技,作為一個產品,滿足真實需求,才是最重要的。
和純軟體開發相比,硬體有不一樣的樂趣。入門并沒那麼難,值得你來嘗試,歡迎入坑。