\(\cdot\)電控簡介
\(\cdot\)認識微控制器
什麼是微控制器
時鐘-微控制器的脈搏
\(\cdot\)外設及應用
GPIO
PWM
定時器
UART
\(\cdot\)中斷
內部中斷
外部中斷
\(\cdot\)總結
一個機器人的製作可以簡要的分成4個部分,機械結構,硬體電路設計,電控(嵌入式設計),機器視覺。
電控需要做的就是進行嵌入式程式的編寫並且完成對機器人的偵錯工作,對C語言基礎有一定的要求,可以熟練掌握資料型別,迴圈、選擇、分支結構,函數,陣列,指標,結構體等C語言常用語法。然後,我們就可以用C語言編寫嵌入式程式,燒錄到微控制器中,讓微控制器根據程式碼,通過外設實現功能。
微控制器又稱單片微控制器,它不是完成某一個邏輯功能的晶片,而是把一個計算機系統整合到一個晶片上。相當於一個微型的計算機,和計算機相比,微控制器只缺少了I/O裝置。概括的講:一塊晶片就成了一臺計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。同時,學習使用微控制器是瞭解計算機原理與結構的最佳選擇。
我們可以用更加淺顯的方式理解微控制器,微控制器就是一塊有著很多引腳的晶片,將每個引腳通過pcb走線引出來,就是我們使用的開發板。因此同一塊晶片,根據需要的不同,可以做出不同的開發板。如下圖所示,就是STM32F103系列的一塊開發板,是初學者常用的開發板之一。
簡言之,微控制器可以分為CPU,記憶體和IO這樣三個模組
簡單的說,時鐘是微控制器的脈搏,是微控制器的驅動源,使用任何一個外設都必須開啟相應的時鐘。這樣的好處是,如果不使用一個外設的時候,就把它的時鐘關掉,從而可以降低系統的功耗,達到節能,實現低功耗的效果。每個時鐘tick,系統都會處理一步資料,這樣才能讓工作不出現紊亂。
在學習微控制器的外設之前,我們需要先了解時鐘。我們可以把微控制器的時鐘形象的比喻成微控制器的脈搏,而時鐘電路就是一個振盪器,給微控制器提供一個節拍,微控制器執行各種操作必須在這個節拍的控制下才能進行。因此微控制器沒有時鐘電路是不會正常工作的。時鐘電路本身是不會控制什麼東西,而是你通過程式讓微控制器根據時鐘來做相應的工作。
GPIO=General Purpose Input Output,通用輸入輸出。
顧名思義,input輸入就是讀取引腳的高低電平,output輸出就是設定引腳的高低電平。
GPIO是微控制器最基本的功能,簡單的說,微控制器的電平高低,微控制器的0和1的實現就靠它。微控制器對外設的所有操作都通過GPIO進行的。
GPIO 可以設定成八種模式:輸入浮空,輸入上拉,輸入下拉,模擬輸入,開漏輸出,推輓輸出,推輓式複用功能,開漏複用功能。
在微控制器的外設中,GPIO口一是個比較重要的概念,使用者可以通過GPIO口和硬體進行資料互動(如UART),控制硬體工作(如LED、蜂鳴器等),讀取硬體的工作狀態訊號(如中斷訊號)等。GPIO口的使用非常廣泛。
從最基礎的點亮一個led,到控制氣閥使工程機器人的機械臂運動,再到連線感測器感知溫度溼度,電壓電流,甚至到遠距離通訊和搭建網路伺服器,都離不開GPIO的應用。
\(\circ\)PWM即為脈衝寬度調變Pulse width modulation,是利用微處理器的數位輸出來對類比電路進行控制的一種非常有效的技術,廣泛應用在從測量、通訊到功率控制與變換的許多領域中。
\(\circ\)控制方式就是對逆變電路開關器件的通斷進行控制,使輸出端得到一系列幅值相等的脈衝,用這些脈衝來代替正弦波或所需要的波形。
頻率和佔空比是PWM中非常重要的兩個概念。
\(\circ\)pwm的頻率是指1秒鐘內訊號從高電平到低電平再回到高電平的次數(一個週期);也就是說一秒鐘PWM有多少個週期。
單位: Hz pwm的週期:週期=1/頻率
\(\circ\)PWM 輸出的頻率也會影響最終的 PWM輸出效果,PWM 輸出的頻率越高,最終輸出的「連續性」越好,越接近模擬訊號的效果,頻率低則會增強離散性,最終的輸出效果會有比較強的「突變」感。
\(\circ\)佔空比是一個脈衝週期內,高電平的時間與整個週期時間的比例。
週期: 一個脈衝訊號的時間 脈寬時間:高電平時間
脈寬時間佔總週期時間的比例,就是佔空比
單位: % (0%-100%) 表示方式:20%
√ 比方說週期的時間是5ms,脈寬時間是4ms 那麼低電平時間就是1ms 總的佔空比 4/(4+1)= 80%
舵機的控制就是通過一個固定的頻率,給其不同的佔空比的,來控制舵機不同的轉角。舵機的頻率一般為頻率為50HZ,也就是一個20ms左右的時基脈衝,而脈衝的高電平部分一般為0.5ms-2.5ms範圍。來控制舵機不同的轉角。
500-2500us的PWM高電平部分對應控制180度舵機的0-180度。
以180度角度伺服為例,那麼對應的控制關係是這樣的:
高電平脈衝時間 | 舵機角度 |
---|---|
0.5ms | 0度 |
1.0ms | 45度 |
1.5ms | 90度 |
2.0ms | 135度 |
2.5ms | 180度 |
微控制器的IO口輸出的是數位訊號,IO口只能輸出高電平和低電平。假設高電平為5V 低電平則為0V 那麼我們要輸出不同的模擬電壓,就要用到PWM,通過改變IO口輸出的方波的佔空比從而獲得使用數位訊號模擬成的模擬電壓訊號。理論上來講,通過對連線和斷開時間的控制,可以輸出0~5V之間任意大小的模擬電壓。
比方說 佔空比為50%,那就是高電平和低電平時間各佔一半,也就是50%的佔空比,在一定的頻率下,就可以得到模擬的2.5V輸出電壓,那麼75%的佔空比 得到的電壓就是3.75V。
定時器實際上是微控制器中的一個內部外設。常常與計數器共同出現,計數器也是一個內部外設。
計數器,顧名思義是用來計數的,就和我們的秒錶一樣,計數器每經過一段時間都要計一個數,且計數週期固定。因此到了一定時間只要用計數值×計數時間週期,就能得到一個時間段,這個時間段就是我們定的時間(這就是定時器了)。
定時器/計數器作為微控制器的外設,主要用來實現定時執行程式碼的功能。定時器相對於微控制器來說,就好像鬧鐘相對於人來說意義一樣。單核的CPU是單執行緒的,只能幹一件事情,幹完這件事情完去幹另一件事情需要定時器來提醒。在微控制器執行主程式的同時,通過定時器的計時功能,定時器會在計時結束的時候產生一箇中斷訊號提醒CPU,CPU去處理中斷並去執行預先設定好的事件.
√ (對,這也就是我們後面要提及的定時器中斷,是微控制器外部中斷的一種)
UART,即通用非同步收發傳輸器(Universal Asynchronous Receiver/Transmitter),是一種通用序列資料匯流排,用於非同步通訊。該匯流排雙向通訊,可以實現全雙工傳輸和接收。在UART上追加同步方式的序列訊號變換電路的產品,被稱為USART(Universal Synchronous Asynchronous Receiver Transmitter)。
序列通訊就是串列埠將資料逐位按順序在一條傳輸線上傳送,它通訊方式分為單工方式、半雙工方式和全雙工方式。此外還有一種並行通訊,它是將資料的各位用多條傳輸線同時進行傳送。
UART的資料結構分為起始位、資料位、奇偶校驗位、停止位、空閒位,此外還有一個重要的引數——波特率。
\(\cdot\)起始位:位於整個資料的做前端,發出的一個邏輯」0」的訊號,表示傳輸字元的開始。
\(\cdot\)資料位:緊接著起始位之後。資料位的個數可以是4、5、6、7、8等,構成一個字元。通常採用ASCII碼。從最低位開始傳送,靠時鐘定位。
\(\cdot\)奇偶校驗位:資料位加上這一位後,使得資料中「1」的位數應為偶數(偶校驗)或奇數(奇校驗),以此來校驗資料傳送的正確性。該位資料也可以不新增。
\(\cdot\)停止位:它是一個字元資料的結束標誌,位於資料的末尾。可以是1位、1.5位、2位的高電平。
\(\cdot\)空閒位:位於傳送的資料之外,為處於邏輯「1」狀態,表示當前線路上沒有資料傳送。
\(\cdot\)波特率:是衡量資料傳送速率的指標。表示每秒鐘傳送的符號數(symbol)。一個符號代表的資訊量(位元數)與符號的階數有關。使用UART連線通訊的兩個裝置的以上因素必須完全一致才能實現裝置之間的資料通訊。
以下是UART工作時傳送方與接收方的狀態。
\(\cdot\)傳送方:傳送時先輸出起始位「0」作為聯絡訊號,接著為資料位、奇偶校驗位和停止位。字元之間允許有不定長度的空閒位。
\(\cdot\)接收方:接收方是依靠字元幀格式來判斷傳送方是何時開始傳送,何時結束傳送的。傳送開始後,不斷檢測傳輸線的電平狀態,當收到一系列的「1」(空閒位或停止位)之後,檢測到一個「0」,說明起始位出現,就開始接收所規定的資料位和奇偶校驗位以及停止位。
當已經讀了一幀資料後並且高電平持續時間 >(傳送時一個高低電平的持續時間 * 停止位) :認為傳輸停止。
如果這時UART 的中斷處於使能狀態,則會進入中斷函數。
√ (對,這也就是我們後面要提及的UART中斷,也是微控制器外部中斷的一種)
從原理和串列埠通訊協定的角度去理解UART未免過於晦澀,所以我們先用我們身邊隨處可見的無線通訊來認識一下UART。
藍芽是一種流行的無線通訊標準。在我們身邊隨處可見藍芽的身影,我們的無線耳機、滑鼠、鍵盤、手機、電腦都支援藍芽。藍芽支援無線的對等連線,通過藍芽模組進行無線的發射與接收。目前,最流行的HCI(主機控制器介面)是通用非同步接收器與發射器(UART)和通訊序列匯流排(USB)連線的。
如下圖的藍芽模組,我們可以看到有四個引腳,VCC,GND,RXD,TXD。
TXD:傳送資料端,要接微控制器的RXD
RXD:接收資料端,要接微控制器的TXD
這樣藍芽模組就可以進行上位機(可以直接傳送操作指令的計算機或微控制器,比如手機或者面板)和微控制器之間的資料傳輸。
通過藍芽+UART,我們可以在手機的app上做出簡易的搖桿,控制小車的運動。除此之外,我們在進行機器人偵錯的時候,很多時候有線的偵錯方式不方便,我們就可以在手機上通過藍芽進行無線的實時偵錯,並對相關的引數和偏置資料進行修改。
TX:傳送資料端,要接對面裝置的RX
RX:接收資料端,要接對面裝置的TX
GND:保證兩裝置共地,有統一的參考平面
中斷是指計算機執行過程中,出現某些意外情況需主機干預時,機器能自動停止正在執行的程式並轉入處理新情況的程式,處理完畢後又返回原被暫停的程式繼續執行。
內部中斷:是指因硬體出錯(如突然掉電、奇偶校驗錯等)或運算出錯(除數為零、運算溢位、單步中斷等)所引起的中斷。內部中斷是不可遮蔽的中斷。
外部中斷:一般是指由計算機外設發出的中斷請求,如:鍵盤中斷、印表機中斷、定時器中斷等。外部中斷是可以遮蔽的中斷,也就是說,利用中斷控制器可以遮蔽這些外部裝置 的中斷請求。
在前面我們提到的TIM中斷(定時器中斷),UART中斷都是外部中斷,是由微控制器的外設發出的中斷,除此之外,外部中斷還有按鍵中斷和can中斷等等。
我們用「燒開水」的例子比喻中斷:
燒開水例子 | 微控制器中斷 |
---|---|
1.發生突發事件(水燒開了) | 中斷事件發生 |
2.產生一個突發的訊號(提醒裝置響起) | 產生中斷訊號 |
3.接收到中斷訊號並暫停當前手中的事,去處理突發事件(不看電視了,去倒開水) | 微控制器接收到中斷訊號,停止執行當前函數,跳轉至中斷處理常式 |
總的來說,中斷就是停止執行當前函數,轉而去執行其他函數,執行完之後再回來執行原函數。
本次科學營電控部分淺要的介紹了微控制器和與機器人相關的外設及應用,因為時間關係,沒有在程式碼層面去實現這些功能,如果對電控感興趣可以參考北京理工大學機器人隊的薪火培訓資料進行深入的學習。
https://www.cnblogs.com/bit-dreamchaser/
在微控制器之外,製作一個機器人還需要對控制類演演算法有一定的掌握,並且瞭解一些硬體的知識;在技術之外,更需要的是對於機器人的熱愛和耐心,相信在未來我們都可以成為出色的工程師,永遠擁有閃閃發光的夢想。
2022-07-19 20:04:24 星期二