開源作品《進化傳說——上古蜥蜴》「第二屆立創商城電子制作節30強作品」
2017-11-07 10:18:17閱讀量:15817來源:立創商城
本作品為第二屆立創商城電子制作節30強入圍作品,作者立創社區ID:風過琴弦;轉載請注明出處,未經允許不得用作商業用途。作品原鏈接:http://club.szlcsc.com/article/details_7053_1.html。
第一章 楔子
不知你是否和我一樣,在生命的某個階段,如此強烈地希望自己的生活中會有一段插曲是變形金剛,或者是終結者。當我們終于能夠吃飽穿暖、事業穩定,你會不會也像我一樣,有時會無意中記起,小時候曾經在舊物攤上尋覓鐘表的齒輪,希望能拼成一個玩具小車。
蜥蜴項目的初始目標就是延續小時候的夢想,不同的是,現在我們有了更強的能力。憑借專業領域的長久學習和實踐經驗,將能夠實現一個更強大、更靈活的大玩具。更誘人的是,憑借我們的學習能力,蜥蜴將會不斷地改進,越來越強大,如同進化的傳說。
蜥蜴項目將作為一個開源項目長期存在,原型版完成之后將針對各環節進行優化以及增加新功能。電路圖、PCB、sldprt、stl文檔、單片機和樹莓派的源代碼都會保持公開和更新。
可以先看一下視頻:
前進的命令由PC機通過WiFi連接樹莓派發出,樹莓派的程序隨后通過SPI通訊給STM32單片機發出命令,STM32采用PID算法驅動履帶電機。目前小車重心在后面,后輪遇到障礙時,動力不足以越過,PID算法自動調整驅動功率,越過障礙。
第二章 原始生物的運動器官
蜥蜴算是比較大型的項目,從最開始就計劃按不同部分分帖討論。第一帖在這里: http://club.szlcsc.com/article/details_7855_1.html
其中有詳細的設計思考過程,因為計劃是個長期項目,設計文件也是隨進度更新,都在帖子里。
部分外購零部件:
DNA片段 -- 機械結構部分設計圖:
蜥蜴的腳趾? -- 零部件組裝:
這應該算是完整的四肢了吧 -- 底盤及電機負重圖 :
到這一部分為止的演示視頻,用外接12V直接接電機:
這個視頻直觀演示底盤懸掛結構的負重、緩沖、動態分擔負載的性能,比起網上動輒上千元還不帶緩沖結構的底盤,也算不枉我花費大量時間從頭學習研究設計一直到把它做出來。
第三章 從末梢神經到脊髓 -- 電機測速、調速、PWM驅動、PID驅動
想想蜥蜴的神經系統還挺專業,因為它分神經組織和神經信號兩部分。其實電路的硬件就相當于生物的神經組織,而神經信號當然就是相應的軟件和電路信號了。
在蜥蜴項目的最初規劃階段曾經明確過一個原則:盡量避免重新造輪子。按這一原則,在使用單片機的時候我毫不猶豫地選擇了開發板--壓在箱子底、放在閣樓上、落滿灰塵,但是仍然好用的野火STM32開發板。
電路硬件其實很簡單,單片機本身能用到的幾乎就是個最小系統,電機測速的霍爾傳感器可以用3.3V電源,這樣信號也是3.3V,可以直接接單片機。電機驅動電路L9110也可以使用3.3V輸入而給電機供應12V的電壓。這樣簡單的數字信號,直接用杜邦線連接就可以了。
電機需要12V電源,采用TPS60188升壓。電源電路對抗干擾要求高,況且60188的封裝也沒法手工焊,在立創做了樣板。
蜥蜴作為一個“動物”,肯定要用個移動電源,TP5602是不錯的選擇,3A充放電,各種保護。購買鏈接:http://www.qdjpair.com/product/details_81512.html
但是在調試過程中,電池電量耗費很快,充電則太耽誤時間,所以調試還是用AC-DC的電源模塊供電,誰讓咱就是做這個的呢,從桌子底下翻出來兩個就好了。
程序沒有太多可說的,大部分是相應外設的初始化及控制、讀取
把所有函數折疊一下,便于看個總貌:
直接對電機作用的是PWM信號。PID控制算法也需要將PWM占空比作為直接的被控對象,因此PWM是電機驅動的基礎,首先完成的是PWM的軟硬件調試:
需要改變某個通道的占空比時,只需要修改一個寄存器TIM2->CCRx就可以了。(代碼詳見原帖)
PID控制
PWM是最簡單的開環調速,仔細想想還不如自然界的蜥蜴,蜥蜴的行為畢竟還是閉環反饋的。一般來說,閉環控制總是必不可少的。閉環控制中,PID屬于用得比較多也比較簡單的了,當然性能也就是差強人意。不過好在蜥蜴項目的重點不是放在這方面,說得過去就行了。
在我的第二貼里,http://club.szlcsc.com/article/details_7856_1_8.html#floor_8這里對PID算法做了簡要的解說,
自我感覺還是很容易懂的,不熟悉的朋友可以去看看。應該加個醒目的標題什么的,最近兩天時間太緊了,當時好長的文本,寫完就忽略了標題的問題,要改的時候已經晚了不能改了。看起來好像是一大堆廢話一樣。。。
PID的核心算法其實很簡單,就這么一點代碼。在上面提到那個帖子里,有其他輔助的內容,包括結構的定義、具體參數值、定時計算的機制等。(代碼詳見原帖)
PID運行演示視頻:
視頻中,PID的參數采用樓上圖片中的參數,可以看到明顯的PID調整的特點。兩次手握住履帶后,電機受到阻力立刻減速,然后由于PID算法的作用,PWM占空比增加,履帶又頑強地開始加速到目標速度,此時占空比很大,履帶底盤在泡沫的架子上咔噠咔噠亂動,尤其第二次更明顯。
由于占空比很大,突然松手履帶就會轉得很快,此時PID調節再次起作用,速度迅速降低,然而存在超調現象,也就是速度降低到預設速度之后并沒有停止下降,而是繼續減慢。然后又在算法調整下慢慢逼近設定值,這就是超調現象。超調的成因,固然是PID參數(也就是Kp、Ki、Kd)需要精細調整,但是,PID算法很難在大范圍內保持良好的性能,例如在負載變化很大的情況下兼顧調節速度與超調量。如果需要更好的性能,需要更“高端”的控制理論
SPI通訊
樹莓派只有一個串口,分配給了藍牙。雖然也可以用作串口,但是那樣以后就注定用不成藍牙了。和單片機通訊,SPI也是可選項之一。
SPI的一個特點就是他是同步通信。這意味著需要一個時鐘信號來為雙方提供同步,而這又意味著,只有主機主動給出時鐘信號,從機才能發送數據;主機的時鐘信號一停,叢機的發送過程就中斷。盡管主機的時鐘信號一般不會突然停止,但是從機收到主機數據后需要時間來處理,很難保證立刻就開始發送應答數據。所以在SPI通訊中,從機最好是預先準備好數據,而主機發送完數據后,要繼續發送無意義的字符以便保持時鐘信號不會停止,這樣才能收到從機的應答。
對于單片機來說,SPI有不少參數要指定。通訊雙方的參數要保持一致。
下面這段程序只給出了STM32的SPI參數配置,沒有包括引腳分配、中斷設置等。
SPI參數配置詳見原帖。
第四章 原始的眼睛和大腦 -- 樹莓派
樹莓派軟硬件簡單介紹
樹莓派是國外的一款“開源”的處理模塊(帶引號是他的主控芯片是專供的,你自己沒辦法做出來),主要特性包括:主頻1.2G,內存1G,帶WiFi,四個USB口可外接鍵盤鼠標,帶HDMI口可外接顯示器,一堆引出的IO腳,可以運行Linux等圖形操作系統。
有人說樹莓派比起同樣性能的其他模塊價格貴,但是它同樣有一個壓倒性的優勢,就是廣泛流行帶來的大量的資料和社區探討。基本上,需要用到的東西在網上都很容易找到。
出于科普的目的,樹莓派的官方系統(基于Debian)中集成了很多編程工具,對Python也有編譯環境。我們采用Python作為開發語言。說實話,個人覺得Python是個大坑,到處充斥著奇技淫巧,一個數組能變化出成千上萬的操作方法,初看起來很容易看懂,但是如果要精確寫出來,尤其是要想看到別人的程序能精確知道是什么結果,好像比C語言要記的東西多多了。奈何,現在主流的各種工具都提供對Python的支持,像機器學習框架Tensorflow,就明確說有些功能在C語言的庫里沒有實現。我們也就只好跳進這個大坑了。
樹莓派的攝像頭
有一個庫是專門給樹莓派的攝像頭做的,叫做picamera(這個庫在電腦的Linux系統下是運行不了的)
使用picamera,可以輕易地控制樹莓派的攝像頭:
更強大的是,可以直接把圖像數據保存到numpy數組里(我用的是Python2.7,需要提供一個一維數組,Python3對應的庫則用三維數組)
機器學習框架 Tensorflow
Tensorflow是谷歌的開源機器學習框架。框架的含義個人理解包含兩層,一層是庫。你要什么功能,就調用相應的函數。第二層意思是,這種庫不能完全隨意調用,要符合一定順序,這個順序是它背后實現的內在機制決定的。這個機制的主要部分就是計算圖,你總要把圖畫好,然后才能開始計算。Tensorflow在背后幫你實現了這些東西,你只要對“業務邏輯”進行編程就可以了,大大提高了你的勞動效率。
大概這么簡單個小程序可以完成一個最簡單的神經網絡的構建、訓練、結果輸出。主要步驟是定義數據、定義loss、定義優化方法,然后初始化框架,最后就可以慢慢算了
樹莓派的SPI
樹莓派自帶一個SPI的Python庫,叫做spidev。
這條命令和前面的stm32的spi程序配合,向其傳送命令,讓左右履帶電機都以50%的速度運行。視頻中演示的動作就由這條命令來完成。同時將STM32返回的數據(100mS內測速脈沖讀數值)顯示出來。
臨時的第五章 臨時的milestone
本來有了前面這些東西,基本就可以實現一些最簡單的功能了,比如循跡小車,幾乎是呼之欲出了。奈何一來時間緊,要賺錢養家,截止日期前這一段時間剛好工作上又比較忙,二來,簡單的循跡小車也不是蜥蜴項目的目的。但是,花了這么多的時間精力,總歸還是有些收獲,可以總結點心得的。
從最基礎的底盤的機構可以說明,在純電子行業,借助3D打印這類快速成型技術,可以實現一些簡單、精度要求不高的機械機構。這些機械機構可以是工作上的工具,可以是家里的實用物件,也可以是小朋友的玩具。這些東西甚至不一定是很簡陋的。就蜥蜴的懸掛來說,其負重、緩沖、一對負重輪負載均衡的性能應該說遠好于模型和玩具的級別。如果做成金屬的,應該完全可以進入專業領域。
就電子和控制算法來說,PID是最常用的調速算法之一,直流電機的PWM驅動也是小功率場合低成本、常用解決方案。而樹莓派這一可以運行操作系統的模塊,以及可以通過WiFi與PC機相連,則為“大腦”的實現提供了廣闊的空間,即使拿目前的蜥蜴,去實現“走走看看,你在電腦前遠程監視”這樣的功能,也是十分簡單的(網上有現成的文章)。
臨時的milestone是為了給競賽一份答卷,未來,蜥蜴將會不斷完善,真正演繹一段進化的傳說

L7805CV-DG/線性穩壓器(LDO) | 0.5637 | |
AMS1117-3.3/線性穩壓器(LDO) | 0.1237 | |
BAT54C,215/肖特基二極管 | 0.0334 | |
LM358DR2G/運算放大器 | 0.35 | |
CJ431/電壓基準芯片 | 0.1147 | |
LM393DR2G/比較器 | 0.318 | |
ADUM4160BRWZ-RL/隔離式USB芯片 | 31.6 | |
SS8050/三極管(BJT) | 0.035 | |
8S005/錫膏/錫漿 | 17.67 | |
B0505S-1WR3/隔離電源模塊 | 2.34 |