如何讓小車運動

2021-09-23 01:49:17 字數 3114 閱讀 2614

圓夢小車 stepbystep之三 class="txt">圓夢小車step by step之三

—— 教小車「走路」

前一篇講述了如何使小車「抬腿」,本篇該教小車「走路」了!

人學走路的第一步是「站立」,而圓夢小車有三條「腿」,這個問題就不存在了,但是要想走好還是需要「學習」的。

我們都知道,如果將人的眼睛矇起來,他很難走直線,因為人的兩條腿不盡相同,略有長短和粗細,導致步幅不同,要靠眼睛來糾正這個偏差,這也是人們常在雪地和森林中迷路的原因,雪地和森林無法提供給眼睛可靠的參照系。

小車的兩條「腿」也有同樣的問題,即使是優質直流電機(步進電機可以)也難以做到驅動特性相同,更何況我們所用的是最便宜的玩具電機!

那圓夢小車的「眼睛」是什麼呢?

一、小車的「眼睛」

能起此作用的「眼睛」最常見的是陀螺儀、電子羅盤,還有影象識別,可這些裝置一是較貴,二是對於初學者而言較難使用,且如果目的是學習而非競賽的話,就有些不值了。

為了能起到「眼睛」的這個功能,小車設計了乙個簡易的碼盤,用它來監測「腿」的行走,在一定程度上也能滿足要求,當然,要受到諸多因素制約,如地面不平整、車輪直徑差異。車輪的不統一還可加以彌補,因為不可能在短時間內把輪子磨小了。地面不平就有些麻煩了,所以這裡所討論的只是針對在較平整的地面上走直線。

本篇就是**這個「眼睛」如何幫助小車走好直線,至於那些高檔的「眼睛」,也許在後面文章中會有所涉及。

第 1 頁共 6 頁

圓夢小車 stepbystep之三 首先分析一下這個「眼睛」的組成。

它是由輪轂上的50齒碼盤、遮斷式光電取樣器、取樣電路組成,取樣電路將光電訊號轉換為脈衝後輸入到mcu,mcu通過中斷方式獲取。

碼盤、光電取樣器的作用較直觀,這裡不作討論,只分析一下取樣電路:

上圖為一路取樣電路,其作用是構成乙個「施密特觸發器」,用較大的回差消除慢速變化的光電訊號在過門檻電壓時產生的誤訊號(此部分原理請參閱運放教材中的「滯回比較器」部分)。

從圖中可以看出:

訊號從低到高的比較電平為: ((r5//r7)/(r6 + r5//r7) ) * 5v

訊號從高到低的比較電平為: ((r5/(r5 + r6//r7)) * 5v

(r5//r7 表示兩個電阻併聯)

讀者可以分析一下是否如此,並計算出實際的比較電平。

為何需要這個取樣電路?原因如下:

第一、這樣可以改善輸入到mcu的訊號沿,使中斷可靠。

第二,車輪在停止時,光電取樣器有可能處於齒的邊沿,使得光電訊號正好處於門檻電平上,如果沒有上述回差處理,將會不斷地發出錯誤訊號,使得程式控制失效。

圓夢小車 stepbystep之三 至此,碼盤取樣的物理訊號處理已完成,下面討論其邏輯部分。

將上述脈衝訊號引入mcu的外部中斷口是最常見的選擇,可是51微控制器的外部中斷只能監測乙個方向的跳變,也就是脈衝的下降沿。但為了提高碼盤的解析度,此處希望能夠實現上公升、下降沿都能採到,從而使碼盤的解析度提公升為100脈衝/圈。

模組支援脈衝的正、負沿捕獲功能:

正好stc12le5412ad的pca array

利用這個功能,即可實現脈衝輸入上公升、下降沿均產生中斷,所以將pca的通道0、1用於碼盤取樣,將它們設定為正、負沿捕獲模式,允許中斷,忽略其捕獲的時間值,只需要其產生的中斷訊號。

根據對中斷訊號的計數即可知道車輪的轉動情況,即掌握了小車的「步幅」,從而可以據此控制小車走直線。

二、如何實現走「直線」

控制的基本邏輯是根據小車左、右輪碼盤計數的差值來調整相應電機的pwm值,以達到使兩個碼盤的計數值相同的目的。

最初級的方式是:啟動時將左、右碼盤計數值清「0」,兩個電機提供同樣的pwm控制值(pwm基值),當出現兩者計數不同時,將快的那一側電機置為惰行。恢復相同後,再置揮pwm基值。

這種模式形象的描述就像人的兩條腿走路,左、右不斷交替前進,只是轉換速度很快,步幅很小,所以看上去像是連續直行。

按這個邏輯設計的小車程式見附件。

為了避免除錯時小車掉下桌子或撞牆,增加了行走距離控制,即設定行走脈衝定值,因為現在做的是直線行走,所以只需控制乙個輪子 —— 選擇左輪,當左輪碼盤計數達到定值時使小車停止。

三、pc機側程式的相應改進

為配合直線行走除錯,pc機的程式增加了直線行走控制,擴充了乙個命令:

小車直線行走命令

命令字—— 0x04

資料域—— 行走距離(2位元組)pwm 基準值(2位元組,先低後高)

其中行走距離為左側車輪的脈衝計數值,按目前的幾何尺寸,最大值65535 應該可以走 655圈,約合86 m。為「0" 時連續行走。

返回資料幀:

幀頭髮送方位址自己的位址幀長命令校驗和

同時,為了便於檢測小車中程式執行的狀況,將讀記憶體的部分作了改進。

首先,將資料位址改為 hex(16進製制)輸入,因為在m51 檔案中所得到的變數位址均為16進製制值,要通過手工轉換為10進製,太麻煩。(注意:讀不同區域的位址參見第二篇的定義,位址最多輸入 4位)

其次,增加了讀資料的型別選擇,開始做pc機讀記憶體程式時為了簡化,只做了讀一位元組的功能,但是正常使用時,要讀乙個整形就極其不便了,為此,新增了資料型別選擇,在讀時可根據資料型別確定讀1、2或4個位元組,顯示時也根據資料型別確定是否顯示符號。這樣我想讀者可以體會一下,是否方便?(小車程式中的碼盤計數器就是無符號整形,除錯時需要檢查此變數,所以才做此修改。

讀者可以利用這個功能檢查碼盤是否可靠取樣,通過手工轉動車輪,讀取對應的碼盤計數變數,看是否符合你所期望的?)

修改後的pc機介面如下:

隨著你的需求增加,會不斷促使你學習vc的功能,逐步使你掌握vc程式設計,無疑會對你的工作、學習帶來極大的好處,pc機也將物盡其用。

圓夢小車 stepbystep之三

四、結語

本篇的主要目的是介紹如何使用碼盤取樣訊號,以控制小車走直線為載體,所以只採用了最簡單的控制邏輯,有諸多不完善之處。

如何改進控制效能留待日後作為演算法部分的討論主題,用這種簡單的控制是無法滿足複雜要求的,如讓小車走半徑一定的圓弧。讀者如有興趣,可自己先嘗試一下,可能需要速度測量及pid速度控制了。

下一篇將討論小車的另乙隻「眼睛」—— 軌跡取樣感測器,看它如何幫助小車「走好」。

附件:1、增加了電機控制的微控制器程式

2、增加了電機控制的pc機程式

1、《電動機的微控制器控制》isbn 7 – 81077 – 175 – 2

2、stc12c5410ad資料手冊

第 6 頁共 6 頁

小車的運動

教科書說明 力的現象是學生生活中司空見慣的,但究竟什麼是力,怎樣來表達力以及力的種類等卻是學生所陌生的。推力和拉力是生活中常見的兩種形式的力,本課以學生們喜愛的玩小車遊戲為載體,按照 問題 假設 驗證 發現 交流 的科學認識程式,談就 推和拉都是力 推力和拉力都有方向和大小 以及 推力和拉力在生活中...

小車的運動

b假設 小車運動的快慢與重量大小有關 相同的條件是 拉力大小 為了實驗結果明顯,我們統一用1個鉤碼拉小車 不同的條件是 小車的重量 怎樣改變小車的重量?第一次空車,連續測三次,求平均值 第二次落車上裝載4個鉤碼,再連續測三次,求平均值 為了實驗的公平,我們選擇同樣的小車 行駛在同樣的路面 行駛同樣的...

小車的運動教學反思

篇一 蘇教版科學四年級下冊 小車的運動 教學反思 今天我講了蘇教版小學科學四年級下冊第三單元第四課 小車的運動 在經歷了 準備 上課 評課 反思 的整個過程之後,感到頗有收穫,下面 我就從上課的體會與反思入手,談談我的個人收穫。一 體會和反思。首先是選課的問題。我選擇 小車的運動 一課,原因如下 一...