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