
問題描述:
由單片機的VCC引腳供電,使用L298N控制兩個電機,發現左右兩個輪子的轉速老是不一樣,更多的情況是左輪轉速高(左輪電機接OUT1和OUT2),右輪轉速低(右輪電機接OUT3和OUT4)甚至不轉(需要用手戳一下才轉)。
在這種情況下,如果讓下車前行,它很有可能走的不是直線,甚至會以右輪為圓心原地打轉。為了解決這個問題,我做了以下幾種猜想並加以驗證:
猜想1:右電機卡殼或其他原因造成其電阻過大。
實驗:交換左右輪
結果:情況與問題描述沒有區別。這說明不是電機的問題。
猜想2:這個L298N的OUT3和OUT4輸出有問題。
實驗:更換一個L298N
結果:為了完成這個猜想,我在淘寶上買了另一家的L298N模塊。按照之前的正確的接線方法,發現結果仍然沒有改善,這說明不是L298N的問題。
猜想3:我的單片機擴展了RFID模塊,4路紅外尋跡模塊,他們都需要供電,這導致單片機對L298N的輸入電壓過低
實驗:在左右輪轉動的過程中,插上RFID模塊、4路紅外尋跡模塊的電源,觀測輪子的轉速是否發生變化。
結果:發現雖然有影響,但是似乎不大。但是在這個過程中我發現當紅外尋跡模塊的四個接受器都能收到反射的紅外信號時,右輪會明顯得卡住不動,由此我認為其他模塊的確會對L298N的輸入電壓產生影響。
猜想4:L298N對左右兩個電機的輸出的電壓不同
實驗:利用萬用表測量輸出電壓。
結果:由於我這里沒有買萬用表,所以沒有具體結果。不過我百度發現也有人遇到這個問題並且也說明了是兩個輸出電壓不同的原因;我查閱了電機的說明書,發現電機的轉速的確和輸入電壓有正相關關系。
這一切都表明電機的轉速不同是由於電壓不同引起的。

總結猜想3與猜想4,得出的結論是:L298N的輸入電流過低,兩側的輸出電壓不同,導致兩個電機轉速不同。
解決方案:在網上我查到可以給L298N添加PWM調速模塊,但是我覺得不僅會增添我在硬件上的麻煩,也會增加我在編程上的工作量,並且我也了解到PWM調速系統的價格並不比一個額外的L298N便宜,所以我做起了
一個L298N帶動一個電機的想法,這兩個L298N以並聯的方法接一個獨立電源(給單片機供電的也有一個電源)。
接線方法:具體如下圖所示。其實接線方法很簡單,只是有一點需要注意,就是左右兩個L298N的GND口要與單片機的GND共線,並且最后連接到獨立電源的負極上。其中由P14、P15引腳控制左輪的正反轉,P16、P17控制右輪的正反轉。

至於這樣接對獨立電源或單片機是否會造成損害,目前我不得而知,希望讀者大佬能不理賜教,在評論區留下您的評價~
使用代碼調速:
按照我的經驗,如果你的獨立電源電壓比較大,則兩個電機的轉速會比較快。有時為了調試程序,我們需要車速放慢一些以方便我們觀察小車的情況。這里仍然不用調速系統這個硬件,我已經用純代碼的方式做到了調速這一點,下面給大家分享:
假設你已經實現了:前進run()函數 和 停車stop()函數,這里我們只需要額外一個延遲函數delay_ms()即可。
while(1) { run(); delay_ms(M); stop();delay_ms(N); }
- 在上面的代碼中,若M=N,則車速就會降為全速的一半。為了使車看上去不是很卡頓的樣子,一般這里的M和N比較小,例如M=N=2.
- 延遲函數delay_ms()的具體代碼可以參考這里:http://www.cnblogs.com/stxs/p/8878088.html