電腦還能這麼小?指甲蓋大小的電腦也能控制機器人!

本文來自RoboMaster微信公眾號,用簡單的方式帶你入門機器人知識。

早上,電子鬧鐘將我們喚醒,我們打開熱水壺,它開始咕嚕咕嚕地燒水,微波爐「叮」地一聲,早餐就熱好了。

這些電子設備能夠實現功能,都是因為背後有一些神秘的小傢伙,默默地操控這一切。

各種電子設備

這些黑乎乎的小傢伙就是單片機,它們可以傳輸信息,進行簡單的邏輯運算,並且實時性很高,控制機器按照設定好的要求運作,長這個樣子:

單片機

生活中,無論是工業機器人、服務機器人還是家用機器人,都有許多感測器,譬如溫度感測器、激光雷達、攝像頭等等,它們相當於機器人的感知器官(眼睛、皮膚等等),使機器人能夠自主感知周圍環境。此外,機器人還有許多動力裝置,比如電機和氣缸,它們就像肌肉,讓機器人動起來。

感測器科普回顧:《機器人也能感知?一篇文章告訴你感測器的秘密》

那麼,機器人從「感知外界」到「做出反應」,還需要一個大腦將它們關聯起來,單片機就充當了這個大腦。

感知器官與大腦

單片機與它們連接,用各種各樣的通信方式去溝通,比如串口,I2C,CAN等等,就像人類用寫信、發郵和打電話之類不同的方式溝通一樣。從而獲取感測器的數據,處理數據,最後控制動力裝置運動。

這個神奇的小東西,到底什麼來頭?

什麼是單片機?

單片機(Single Chip Microcomputer, 單片微型計算機),又稱微控制器(Micro Controller,Unit, MCU)。顧名思義,就是單塊晶元做成的微型計算機。我們需要事先將程序燒入單片機中(相當於設定好它的工作內容是什麼),然後將它搭載在電路板上工作。

電路板上的單片機

那麼,單片機裡面都有些什麼呢?

單片機的組成

單片機是單個晶元做成的「微型計算機」。單片機雖小,電腦的「五臟」:運算器、控制器、存儲器、輸入設備、輸出設備,它一應俱全。

單片機的組成

在電腦里,運算器控制器被合成 CPU,單片機里也是如此,用於做數據計算。電腦的存儲器包括硬碟和內存,在單片機里分別對應的是 ROM 和 RAM,用於儲存數據。

輸入設備和輸出設備是計算機和外界溝通的工具。電腦主機通過 USB 連接滑鼠鍵盤,通過 HDMI 或 VGA 口連接顯示屏(現在還有其他的方式,比如藍牙來完成連接)。而單片機的輸入輸出設備是四周遍布的引腳,這些引腳可以與外界交流。

單片機

除了這些之外,單片機內有還有時鐘電路、定時/計數器中斷系統,它們和控制器一起保證著整個單片機的有序運行。

在 RoboMaster 賽場上,機器人接收信號後,能夠快速處理信息,並做出相應動作,也是單片機的功勞。

機器人追逐

下面就分別介紹單片機各個部位的原理和作用。

CPU:控制器、運算器與寄存器

單片機是集成數字電路晶元,也就是靠數字電路來傳輸數據。數字電路主要處理二進位的數字信號,所有的數字、指令都是用 1 和 0 這樣的二進位碼存儲的。每一個 1 或 0 稱為一個位(bit)。

BIT是什麼

通常數字電路有閾值電壓,超過閾值電壓則被認為是高電平(數字 1),低於閾值電壓則被認為是低電平(數字 0)。在電路受到輕微干擾的時候(比如說 5V 變成 4.9V),只要還在閾值電壓之上就視為高電平,就保證了計算的穩定性。

CPU 是由很多三極體(transistor)組成的。三極體是一個電子開關,可以通過左邊那隻手來控制右邊電路的導通和截止。

三極體

三極體通過一些特定的組合方式,形成了與、或、異或、非等等的門電路(logic gates)。不同的門電路代表對數字信號進行不同的處理。

門電路

這些門電路再通過一定的組合,形成了加、減、移位之類的基本模塊(basic modules)。正是這些模塊在處理數字電路中的 0 和 1,對數據做加減法,有了加減法,就可以做乘除法,進一步就能進行各種複雜的數學運算。

加法電路

比如說機器人的運動控制中,電機的速度參數、角度參數都會以二進位編碼的高低電平信號傳入單片機中進行 PID 運算等等,而運算得到的控制量也會以二進位編碼的高低電平信號反饋給電機。

想了解PID的小夥伴可穿梭至:《什麼是機器人比賽中的PID控制?》

CPU組成

運算器和控制器中還有一個叫做寄存器的東西,用於暫時存放控制信息和數據信息。這些與非門電路除了能構成運算電路外,還能構成鎖存器電路,寄存器就是由鎖存器電路實現的。

存儲器:RAM和ROM

RAM(Random Access Memory, 隨機存取存儲器)

在運算的時候,會產生大量的臨時數據,這些數據被記錄在一個叫做 RAM 存儲器里。RAM 就像一本魔法草稿本,上面處理的數據是會快速更新的,CPU 會按程序的要求,在 RAM 的特定位置讀寫數據。

RAM 相當於讀寫數據的草稿本

但由於技術所限,目前的 RAM 都需要電來維持體內數據的存在。一旦失去電源,RAM 內的數據就會全部消失。

非失電保護

ROM(Read-Only Memory,只讀內存)

CPU 想要工作,需要我們事先寫好工作流程(指令或程序),這個工作流程就被刻在了一個叫 ROM 的存儲器里。有些數據需要長期保存,比如說機器人今天學到的新知識,也會被寫到 ROM 上。

ROM 就像一個石碑,上面記的程序是固定不變的,能夠在斷電後繼續保持體內的數據(失電保護),但它的讀寫速度較慢。

ROM 相當於刻著程序的石碑

CPU 工作的時候,控制器會把程序的位置(程序地址)記錄在寄存器中,運算器再通過這個地址找到 ROM 里的程序進行運算,這個過程也少不了連接這些部件的通信通道——內匯流排。

早先的 ROM 都是只讀的,也就是出廠的單片機的程序無法修改。後來科學家們發明了各種可以擦的 ROM,比如說可以用紫外線「魔法」將石碑恢復原貌的 EPROM,可以用電「魔法」將石碑恢復原貌的 EEPROM 等等。

輸入/輸出設備:並行 I/O 埠和串列通信埠

單片機用密密麻麻的引腳與外界聯繫,它們就像電腦上的 USB、HDMI、網口等插口。引腳往往擁有多種功能,就像奧特曼可以切換不同形態來改變功能。引腳也可以通過程序更改功能(術語叫復用功能)。

單片機上的引腳

並行 I/O 口

單片機四周的許多引腳都可以被複用為 I/O口。I/O 口可以設置為輸入(Input)模式或輸出(Output)模式,1 和 0 用高低電平表示。

輸出狀態下,I/O口可以作為開關,甚至輸出電流來驅動外部設備。我們就曾經教過大家用I/O口點聖誕樹的燈:《聖誕節撩妹指南:教你做一棵BlingBling的聖誕樹!》

如果跟外界進行簡單通信,通過多個引腳並排輸出,就可以控制一些 LCD 顯示屏。

並行 I/O 口

這種通信方式用了大量的引腳,理論上數據傳輸率高,但是由於傳輸過程需要保持時序一致,導致速度有限、易受干擾。

串列通信

在機器人比賽中,機器人往往會搭載多塊單片機和電腦,它們之間通常採用通信效率更高的串列通信。串列通信通過少量的引腳發送變化的電平來交流。

串列通信

雖然理論上引腳少了會降低傳輸效率,但因為不需要保持每個引腳的時序一致,所以反而耗時更短。

中斷

無論是個人電腦還是單片機,在工作中都少不了一個幫手——中斷。

中斷是指,正常程序運行過程中出現特殊情況需要處理,處理器就會自動停止當前運行程序,並轉入處理新情況的程序,處理完畢後又返回之前被暫停的程序繼續運行。

中斷

中斷機制提高了系統效率,在維持系統可靠工作的同時,又滿足了實時處理要求。為什麼會有特殊的情況需要處理呢? 我們舉個例子:

在 RoboMaster 賽場上,當機器人在運動時,裁判系統會同時傳來信息,告訴你機器人現在的功率、速度等等。這時單片機會停止機器人運動,並且記下當前的程序運行到哪了,然後去運行接收裁判系統數據的程序,接收完再回來繼續運行機器人運動的程序。

左下角的數據顯示

由於這個過程耗時十分之短,機器人實現了「近似的」一邊控制運動一邊接收數據的功能。

再比如,我們日常會一邊美滋滋地看電影,一邊在後台下載其他資源,我們會以為這兩件事在同步進行。其實,電腦是通過中斷功能「假裝自己同步進行」,不停地在播放電影和下載資源之間來回切換,切換速度快到我們感受不到。

PPT 瀏覽和音樂播放切換進行

切換速度再快也會有個極限,這個極限就是單位時鐘周期。

時鐘

所有的數字系統的工作都離不開一個東西——時鐘。這裡說的時鐘不是家裡掛的鐘或者手上戴的表,而是一種基準信號。就像隊列齊步走的時候,有人在喊一二一,大家會跟著喊的節奏來走路。單片機的工作節奏就是跟著時鐘走的。

節奏和頻率

無論是計算機還是單片機,在一個時鐘周期里都只完成一個最基本的操作,時鐘周期越小,處理器工作頻率越高,因此時鐘頻率是處理器性能的重要衡量標準。但根據指令的複雜程度不同,完成一個指令的所需的時鐘周期也是不同的,所以時鐘頻率也並不等同於指令執行速率或系統總體性能。

時鐘的節奏和信號頻率

單片機的入門

單片機在許多競賽中都扮演著十分重要的角色,想要入門單片機,就需要動手進行代碼編程開發。其實學習單片機開發的門檻很低,大致流程是代碼編寫、代碼編譯、下載至單片機和調試。

所以,首先要學會基本的 C 語言,然後針對自己感興趣的單片機平台去購買對應的開發板,跟著配套的教材學習單片機各個功能的實現原理與代碼編程 。

容易上手的流水燈製作

一般,想要基礎入門和深入理解單片機工作原理,我們可以使用 51 單片機。它內部結構簡單,但編程過程比較麻煩。

51 單片機學習可閱讀《新概念51單片機C語言教程:入門、提高、開發、拓展全攻略》,作者:郭天祥,電子工業出版社。

在 RoboMaster 比賽中,我們為機器人選擇的單片機多是基於 ARM 內核體系的單片機,比如意法半導體公司(文中簡稱 ST公司)開發的 STM32F1、STM32F4 系列單片機。

若想深入學習 STM32 開發,可閱讀書籍《STM32庫開發實戰指南:基於STM32F4》,作者:劉火良、楊森,機械工業出版社。

快要過年了,小夥伴們也可以跟著流水燈特輯(點擊進入),簡單學習單片機的開發,為家裡的橘子樹掛上橘色彩燈,用你的技術征服親戚朋友們!

本期作者

本文來自 RoboMaster 技術智囊團蘑菇菌×華南虎,文章部分有修改。如果你也希望加入技術智囊團,請通過 robomaster@dji.com 聯繫我們。文章部分素材來自公共網路,侵權刪除。


推薦閱讀:

精簡封裝技巧5----函數指針_鬧鐘
eM4 OS設計中的可重入性
學習單片機的過程

TAG:單片機 | RoboMaster |