第十四届恩智浦智能车室外电磁比赛总结
樓主是19室外電磁小白一枚,由于學校歷屆組別使用的都是攝像頭,電磁用的很少,所以今年幾乎從零開始。在這半年的智能車調試中也走了不少彎路,有了一些收獲,現將參賽總結記錄如下:
文章目錄
- 入門基礎知識
- 關于核心板
- 關于什么是主板和驅動板
- 關于電機:
- 關于舵機
- 關于編碼器
- 關于oled顯示屏
- 關于串口
- 附錄一些學長留給我們的建議
- PCB制板注意事項:
- 提高調試效率方法:
入門基礎知識
樓主用的是越野型L車模(高大威猛的一批),整體就是控制電機的轉速(直道加速,彎道減速以防沖出賽道)、控制舵機的打角,類似于騎自行車。
關于核心板
我是用的山外的K60 UD核心板,建議大家用山外的板子,真滴好用。我們隊最開始用的是學長留下來的一塊藍宙的芯片,我透,心酸不必言說。。。換用山外芯片和dap之后,再沒糾結過燒寫的問題,車相關的其他問題還可以問山外客服,山外牛逼!
它大概長這個樣子:
關于什么是主板和驅動板
驅動板:
驅動板是比較獨立的一個部分,它的唯一作用就是把PWM放大,然后加到電機兩側,因為核心板產生的PWM對應的電壓較小,不足以驅動電機轉動。至于什么是PWM,在下文的電機部分會有所介紹。
然后,由于驅動板難焊是一個普遍存在的問題,所以在調車初期不要糾結焊驅動板的問題(我們隊就是最開始焊接技術不好,焊了一個月的驅動板都沒焊好,浪費了好多時間),大家可以直接拿往屆學長的驅動板先用著,把車最快速度跑起來才是王道!!!
主板:
主板就是車的核心,
主板的部分電路是提供不同大小電壓的,比如5V穩壓,3.3V,舵機所需的6V或者更高的電壓 等等
另一部分的作用主要是留出接口,比如我需要用核心板的某個引腳,因為核心板被插到主板上了,沒辦法直接接,所以我需要在畫板子的時候就把這個接口留出來。比如我需要用A8這個腳,我就需要在主板的pcb文件中,把A8這個引腳對應位置的通孔(通孔1)接線出來,另成一個通孔(通孔2)放到主板其他地方,如果我需要用A8這個腳,我就直接把線接到剛才留出的通孔2上面就行了,這樣就間接的連到核心板的A8這個腳了。
關于電機:
由于最初很小白,一直在糾結PWM是個什么東西,看了相關論文和視頻介紹,越看越慌。其實不用糾結,不用糾結,幾行代碼就搞定的事!!!
電機PWM(占空比)作用可以理解為我們可以通過調整占空比的大小來調整電機兩側的電壓。
比如給電機12V電壓,如果滿PWM(占空比)的話,相當于在電機兩側加了12V電壓,電機轉速達到最大;
如果占空比為50%的話,電壓會小一些,大概在6-8V左右,轉速也會相應減小(電壓與占空比是正相關,即占空比越大,電壓越大,轉速越快,兩者是否線性相關我不太清楚)。
初期不用糾結對應不同情況調PWM,只需初始給電機一個PWM,恒速跑完一圈再糾結。
初始化代碼如下:
void FTM_PWM_init(FTMn_e ftmn, FTM_CHn_e ch, uint32 freq, uint32 duty)//引腳初始化代碼函數中各參數的定義如下:
FTMn_e 是模塊號,有FTM0、 FTM1、 FTM2 這三種模塊可供選擇。
FTM_CHn_e 是通道號(CH0~CH7),
freq 是頻率(單位為Hz)
duty是占空比分子,占空比 = duty / FTMn_PRECISON,這個FTMn_PRECISON是可以在ftm.h那個文件里面自己進行調整的,比如我的代碼里面是這樣的:
那如果我是用的是FTM0, 想要一個占空比為50%的PWM波,那我就需要給函數的duty賦值為50就行了,占空比即為50/100 = 50 %, 如果我是用的是FTM1, 我如果向給一個占空比為30%的PWM波,那我就需要給函數的duty賦值為6000就行了,占空比即為6000/20000 = 30 %。
一開始看到這行init代碼可能會被嚇到,沒事,你不用管這個代碼具體怎么實現的,你只需要在你寫的東西里面調用就行了。
關于那個模塊號和通道號,你不需要管它到底是啥,你只需要知道一個模塊中的每一個通道號對應一個引腳,比如FTM0_CH6就對應著核心板上的一個引腳,如果你給核心板供電,再調用代碼讓這個引腳輸出一個PWM波,它就會乖乖輸出一個波形,有兩個這樣的PWM波分別加到電機引腳兩側,電機就會對應輸入兩個PWM占空比的差值不同而達到不同的轉速。
我們隊的代碼里面電機的初始化如下:
FTM_PWM_init(FTM0, FTM_CH2, 10000, 0); FTM_PWM_init(FTM0, FTM_CH3, 10000, 0);//初始化 電機 pwm即給核心板上的兩個引腳分別初始化,頻率為10k(電機一般都是這個頻率),占空比初始設置為0,。
關于引腳與通道號的對應關系,在K60官方手冊里面有列出,大家可以去對照著看。
舉個例子,對于上圖的PTA7, 它是指核心板上的 A7這個管腳,它對應的是FTM0_CH4 這個通道號,如果你在代碼里面讓FTM0_CH4 輸出一個占空比為50% 的pwm 波,那么A7 這個管腳上就會輸出一個波形,占空比為 50% ,你可以把它連到示波器上面觀察一下。
現在我如果想讓電機接收到占空比為50%的波而轉動,我可以這樣
FTM_PWM_Duty(FTM0, FTM_CH2,0);FTM_PWM_Duty(FTM0, FTM_CH3,50);//這里的50 是因為 FTM0 的 FTM0_PRECISON 是100 , 那么傳入50 的話 占空比即為 50 %這個 FTM_PWM_Duty 函數的作用是改變某個通道的占空比,因為不能說初始化的時候設置完占空比就不能改變了,那樣就不存在車子的加減速了,你想要多大的占空比,就調用這個函數傳入不同占空比就行了。
當你把這兩個通道對應的引腳通過驅動板升壓再接到電機兩側,你就可以看到電機轉動起來了。
關于舵機
與電機類似,舵機也是通過調整輸出的PWM占空比來進行調整打角的大小。與上文一樣,不需要糾結舵機到底是什么東西,你只需要給舵機供電,然后給舵機的信號線輸出一個PWM波,舵機就會打到對應占空比的角度,車子便可以做到不同角度的轉彎。
與電機略有不同的是,電機是轉速與占空比呈正相關關系,占空比越大,轉速越快;而舵機只有在一定的占空比范圍之內才能工作,如果超出這個范圍的話舵機有可能會燒壞(一個舵機100來塊錢,大家注意使用的時候一定要限幅哈)。
這里便要放出一個經典的圖了,如下:
是不是感覺一臉懵逼,哈哈,其實不用糾結這么多,上面這張圖片的意思就是舵機的打角與PWM占空比之間是一個線性映射的關系,上圖可用下面的表格來表示
| 2.5 % | -90度 |
| 5 % | -45度 |
| 7.5 % | 0度 |
| 10 % | 45度 |
| 12.5 % | 90度 |
在我們隊的代碼里面,關于舵機也只是調用了那兩個函數 FTM_PWM_init() 和 FTM_PWM_Duty()
具體代碼如下:
FTM_PWM_init(FTM1, FTM_CH0, 100, 1500);//初始化舵機這行代碼初始化FTM1_CH0 為頻率100HZ,初始占空比 1500 / 20000 = 7.5% 。
ps:注意1500是我們傳入的參數,真正的占空比是 1500 / FTM1_PRECISON (由于我們代碼里面FTM1_PRECISON 是 20000, 所以即初始化向舵機信號口輸出 7.5% 占空比的波,即初始讓舵機打到中值位置)
之后再控制舵機打角時,由于L車前輪如果不改裝的話大概最大能打到45度左右,所以我們將FTM_PWM_Duty 參數限制在了1000 - 2000 (即占空比5% - 10% 、 打角 -45度 到 45度之間), 因為我們乖乖限幅了,所以舵機從頭到尾只壞了一個,還是因為莫名其妙的原因壞掉的,其他隊沒太注重限幅的都換了7、 8個, 那可都是錢啊! 錢啊!!!
關于編碼器
編碼器我們最開始糾結了好久,不知道怎么用,搜了好多資料越看越迷,都是在扯A相、B相、正交解碼、上升下降沿啥的,看完之后毫無收獲,其實說白了就三行代碼 (我們是單電機,用的是lptmr計數,只使用了A相、5V 、 GND 這三根線就夠了,A相連了核心板的A19 口):
在整個核心板上,一共有兩個口可以lptmr計數,分別是 A19 和 C5
| LPT0_ALT1 | PTA19 |
| LPT0_ALT2 | PTC5 |
初始化:
lptmr_pulse_init(LPT0_ALT1,0xFFFF,LPT_Rising);//初始化編碼器 lptmr調用lptmr計數:
uint32 num = lptmr_pulse_get(); // lptmr_pulse_get 函數會返回一個值,記錄了從上次清零到本次調用該函數時編碼器 記錄的值的大小,這個值是和電機轉動的圈數正線性相關的lptmr_pulse_clean(); 清零函數,把編碼器記錄的值清零那么如果我想知道車子轉一圈編碼器的值是多少,我就只需要先調用clean函數清零,然后轉動輪子一圈,這時調用lptmr_pulse_get函數返回的值便是輪子轉這一圈對應的編碼器記錄的值的大小了。
注意:
編碼器有一個較為特殊的點,直接將編碼器的A相輸出口接到 A19上的話,你會發現編碼器get的值絕大部分時候都是0,只有在上電瞬間才會有值,哈哈,因為編碼器的A相在接到A19口的同時需要上拉一個4.7K 的電阻到 3.3V電壓上面去,這樣get到的值才是正常的。
關于oled顯示屏
oled顯示屏是超級推薦大家使用的,主要用來實時顯示各路電感的值的大小,還有一些Flag是否被觸發啊什么的,方便你找規律,還是那句話:不要糾結,山外的代碼例程都有例子,你只用接好線,調用函數,就能輸出你想要的東西啦。
關于串口
在處理大批數據時,串口就發揮著極大的作用,這里還是推薦下山外的nrf無線串口,使用方法跟傳統串口一毛一樣,關鍵是無線啊!無線啊!!! 遠程傳輸、無線調車,你值得擁有!!!!!(看在我經常有問題去麻煩山外客服的份上,就不收廣告費了)
附錄一些學長留給我們的建議
PCB制板注意事項:
- 盡量加寬電源、地線寬度,最好是地線比電源線寬,它們的關系是:地線>電源線>信號線,通常信號線寬為:0.2~0.3mm,最經細寬度可達0.05~0.07mm,電源線為1.2~2.5 mm
- 位于電路板邊緣的元件,離電路板邊緣一般小于2mm
- 當與焊盤的連接走線較細時,要將焊盤與走線之間的連接設計成淚滴狀
- 接地線應盡量加粗。若接地線用很細的線條,則接地電位隨電流的變化而變化,使抗噪能力降低。因此應將接地線加粗,使它能通過三倍于PCB上的允許電流。如有可能,接地線寬度應在2~3mm以上
- 大面積覆銅 所謂覆銅,就是將PCB上沒有布線的地方,鋪滿銅膜。PCB上的大面積覆銅有兩種作用:一為散熱;另外還可以減小地線阻抗,并且屏蔽電路板的信號交叉干擾以提高電路系統的抗干擾能力
- 注意導線的寬度是否滿足要求,尤其是電源線和地線,能加寬的地方一定要加寬,以減小阻抗。
- 焊盤的內孔一般不小于0.6mm,因為小于0.6mm的孔開模沖孔時不易加工
- 通常情況下以金屬引腳直徑值加上0.2mm作為焊盤內孔直徑
- 建議畫PCB時在電路板四周各打一個直徑為3.3-3.5mm的孔用以上螺絲固定
提高調試效率方法:
- 調試時盡量使用藍牙串口查看波形
- 同時可配合使用OLED顯示屏看數據
- 適量加入一些模塊比如蜂鳴器等來提示是否成功檢測到某個狀態
- 建議采用離線調試的方法,如增加獨立按鍵模塊、手機藍牙發送數據,紅外遙控發送數據等,不需要每次修改參數都連接下載器重新燒錄程序。
本文主要是基礎知識總結,關于調車中出現的各種情況的處理方法,大家可以看看我隊友寫的
常見問題解決方法匯總——十四屆恩智浦智能車室外電磁越野組
總結
以上是生活随笔為你收集整理的第十四届恩智浦智能车室外电磁比赛总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广数25i系统倒刀回刀m代码_史上最全数
- 下一篇: uppy JavaScript 文件上传