色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>讓Arduino控制的汽車直行

讓Arduino控制的汽車直行

2023-02-06 | zip | 0.29 MB | 次下載 | 免費(fèi)

資料介紹

描述

互聯(lián)網(wǎng)上有大量關(guān)于 Arduino 控制的汽車項(xiàng)目的描述。套件包括電機(jī)和底盤。其中一些套件是兩輪驅(qū)動(dòng),第三輪作為浮動(dòng)腳輪。

這種三輪配置本質(zhì)上是不穩(wěn)定的,即使在驅(qū)動(dòng)程序中將兩個(gè)電機(jī)設(shè)置為相同的速度,也不會(huì)直線行駛。車輪直徑、滾動(dòng)摩擦和電機(jī)特性的變化會(huì)導(dǎo)致偏差。克服這個(gè)問(wèn)題的唯一方法是增加反饋并定期對(duì)電機(jī)速度進(jìn)行修正。該項(xiàng)目將解釋如何實(shí)施以實(shí)現(xiàn)直線行駛。

Arduino 控制的汽車

這是一個(gè)由 Arduino 控制的汽車示例,由兩輪驅(qū)動(dòng)套件構(gòu)建。主要組成部分是:

兩輪驅(qū)動(dòng)套件,包括電機(jī)、底盤、各種螺絲和螺母、車輪和車輪編碼器

  • 阿杜諾UNO
  • L298N電機(jī)驅(qū)動(dòng)橋板
  • 2 x HC-020K 編碼器模塊
  • 4 x ICR16340 鋰離子電池和電池座
  • 切換開/關(guān)開關(guān)
  • 連接線

本文不包括如何制造汽車的描述;互聯(lián)網(wǎng)上有很多資源可以解釋所需的步驟。

成品車如下:

?

img_3640_z855wTTegG.JPG?auto=compress%2Cformat&w=740&h=555&fit=max
?

整車電路圖如下:

?

schematicdiagram_Gw0R9NIhYI.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

只是配置上需要注意的幾點(diǎn):

  • 該車采用并聯(lián)/串聯(lián)配置的四節(jié) ICR16340 700 mAh 鋰離子電池。其中兩個(gè)串聯(lián)的電池在充滿電后可提供約 8 V 的電壓,足以驅(qū)動(dòng)電機(jī)和 Arduino 板。并聯(lián)電池可能存在問(wèn)題(可能會(huì)產(chǎn)生循環(huán)電流),作為替代方案,ICR16340 電池有 2800 mAh 版本——其中兩個(gè)串聯(lián)應(yīng)該足以為汽車供電
  • 電機(jī)控制由 L298N 橋驅(qū)動(dòng)器模塊執(zhí)行。同樣,有大量資源可以解釋它們的運(yùn)行方式以及如何連接電機(jī)和控件。
  • 該電路使用數(shù)字引腳 5 和 6 將 PWM 輸出到 L298N 板以控制電機(jī)速度。這些引腳的 PWM 頻率由 ATmega328P 的定時(shí)器 0 控制。數(shù)字引腳 9 和 10 的 PWM 頻率由定時(shí)器 1 控制。稍后在該項(xiàng)目中,定時(shí)器 1 用于觸發(fā)距離控制回路,因此與引腳 9 和 10 的 PWM 沖突。不要在該項(xiàng)目中使用這些引腳。
  • 根據(jù)您的具體接線方式,可能需要調(diào)換電機(jī)引線以獲得一致的方向。此外,HC-020K 編碼器模塊必須在軟件中與正確的電機(jī)配對(duì)。這可能需要交換中斷 2 和 3 或調(diào)整軟件。

脈搏過(guò)多之謎

HC-020K 編碼器模塊依靠 LM393 比較器來(lái)生成方波脈沖。編碼器輪上的每個(gè)孔都會(huì)在方波中產(chǎn)生上升沿和下降沿,其頻率與輪速成正比。對(duì)這些方波脈沖進(jìn)行計(jì)數(shù)也會(huì)得出與行進(jìn)距離成正比的總數(shù)。使用 Arduino 對(duì)這些脈沖進(jìn)行計(jì)數(shù)的標(biāo)準(zhǔn)方法是將它們連接到中斷并讓中斷服務(wù)例程 (ISR) 遞增計(jì)數(shù)器(稍后提供示例代碼)。

幾項(xiàng)試圖將脈沖計(jì)數(shù)與 rpm 和行進(jìn)距離相協(xié)調(diào)的實(shí)驗(yàn)表明,脈沖計(jì)數(shù)不正確的因素約為十倍 - 十倍于許多脈沖。這使得編碼器幾乎毫無(wú)用處。此異常需要進(jìn)一步調(diào)查

以下是 HC-020K 編碼器的一些示波器軌跡:

?

screenshot1_3513k27dnJ.bmp?auto=compress%2Cformat&w=740&h=555&fit=max
?

在 5 毫秒的時(shí)間尺度上,方波的上升沿和下降沿看起來(lái)很干凈。然而,如果放大到 2 微秒的時(shí)間尺度,方波的下降沿會(huì)在 5V 到 0V 的轉(zhuǎn)換期間顯示多個(gè)向上向下的尖峰。

?

screenshot2_4dDOvhtNGO.bmp?auto=compress%2Cformat&w=740&h=555&fit=max
?

這些尖峰中的每一個(gè)都可能觸發(fā)中斷并導(dǎo)致脈沖計(jì)數(shù)過(guò)多。它們是由 HC-020K 編碼器模塊上的比較器電路的性質(zhì)引起的——它在開環(huán)模式下運(yùn)行。

解決這個(gè)問(wèn)題的正確方法是通過(guò)在輸出和提供參考電壓的分壓器之間添加一個(gè)反饋電阻,在比較器電路中引入遲滯。有幾篇文章解釋了這個(gè)電路——這里是德州儀器的一個(gè)例子。

https://www.ti.com/lit/ug/tidu020a/tidu020a.pdf

要針對(duì)遲滯修改 HC-020K 編碼器模塊,需要從輸出端到 LM393 的引腳 2 連接一個(gè) 50KOhm 電阻。由于使用了表面貼裝 IC,實(shí)際上很難執(zhí)行此 mod。如果你能做到——祝你好運(yùn)!

一些額外的研究顯示了一種替代方法。這需要在輸出和地之間有一個(gè) 100nF 的電容器。這是一個(gè)更容易實(shí)現(xiàn)的模組,如下所示。

?

img_3638_uZYt2trHXQ.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
?

?

img_3637_CboVYDCv8i.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
?

電容器有效濾除高頻尖峰并提供平滑過(guò)渡。產(chǎn)生的波不是方波,因?yàn)樗浑娙萜髟谇把睾拖陆笛厣系某潆姾头烹娝薷摹?/font>示波器軌跡如下:

?

screenshot3_XqGSjsEfkt.bmp?auto=compress%2Cformat&w=740&h=555&fit=max
?

放大到5微秒的時(shí)間尺度,方波的下降沿顯示單次跳變

?

screenshot4_XrcJzrHELA.bmp?auto=compress%2Cformat&w=740&h=555&fit=max
?

進(jìn)行此修改后,脈沖計(jì)數(shù)與觀察到的轉(zhuǎn)速很好地對(duì)齊。

反饋控制

既然解開了太多脈沖的謎團(tuán),是時(shí)候?qū)④囕喚幋a器的反饋控制應(yīng)用于電機(jī)速度了。基本思想是根據(jù)測(cè)得的脈沖數(shù)調(diào)整單個(gè)電機(jī)速度,使輪子覆蓋相同的距離并沿直線驅(qū)動(dòng) Arduino。

反饋控制回路分為許多類別,但最常見的稱為 PID(比例、積分和微分)回路。關(guān)于這個(gè)主題的信息很多,他們的研究是一門完整的學(xué)科。簡(jiǎn)單系統(tǒng)如下圖:

?

controlloop_aMe0oCtBLi.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

將設(shè)定點(diǎn)(期望輸出)與反饋(實(shí)際輸出)進(jìn)行比較,誤差用于生成對(duì)受控系統(tǒng)的輸入。該輸入將系統(tǒng)驅(qū)動(dòng)到所需的輸出,以便最終反饋等于設(shè)定點(diǎn)。

對(duì)于 Arduino 汽車,需要控制的輸出是兩個(gè)車輪的脈沖計(jì)數(shù)之差。如果此差異為零,則車輪將行駛相同的距離(假設(shè)車輪直徑相等)。

幾個(gè)定義:

  • 來(lái)自車輪 A(電機(jī) A)的脈沖計(jì)數(shù) = pulseA
  • 來(lái)自輪 B(電機(jī) B)的脈沖計(jì)數(shù) = pulseB
  • 脈沖計(jì)數(shù)之間的差異 = 反饋 = pError = pulseA – pulseB
  • 設(shè)定點(diǎn) = 0

下面是Arduino小車基本控制策略的流程圖:

?

flowchart_FatbK3YVja.png?auto=compress%2Cformat&w=740&h=555&fit=max
?

關(guān)于中斷的部分

Arduino 上的控制程序使用中斷有兩個(gè)目的:

  • 對(duì)來(lái)自編碼器的脈沖進(jìn)行計(jì)數(shù)。每次編碼器輸出進(jìn)行 1 到 0 轉(zhuǎn)換時(shí),都會(huì)在 Arduino 上觸發(fā)中斷。
  • 強(qiáng)制控制回路比較計(jì)數(shù)的脈沖并根據(jù)控制算法調(diào)整電機(jī)速度。

第一個(gè)中斷的相關(guān)代碼片段是

const int encoder1 = 2;
const int encoder2 = 3;
volatile int pulse1;
volatile int pulse2;

void setup(){
  pulse1 = 0;
  pulse2 = 0;

  attachInterrupt(digitalPinToInterrupt(encoder1), count1, FALLING);
  attachInterrupt(digitalPinToInterrupt(encoder2), count2, FALLING);
}

void count1(){
  // counting the number of pulses for encoder 1
  pulse1++;
}

void count2(){
  // counting the number of pulses for encoder 2
  pulse2++;

引腳 2 和 3 用于編碼器的中斷輸入。pulse1 和 pulse2 是用于保存計(jì)數(shù)的變量。Count1 和 count2 是中斷服務(wù)程序,只是增加計(jì)數(shù)器。中斷在從編碼器接收到的方波的下降沿觸發(fā)。

第二個(gè)中斷使用 ATMega328 內(nèi)置的 Timer1。定時(shí)器以預(yù)定的時(shí)間間隔觸發(fā)中斷。然后,這會(huì)運(yùn)行一個(gè)控制回路,使汽車保持直線行駛。相關(guān)代碼片段如下:

void setup(){

cli();//stop interrupts

  //set timer1 interrupt at 4Hz
  TCCR1A = 0;// set entire TCCR1A register to 0
  TCCR1B = 0;// same for TCCR1B
  TCNT1  = 0;//initialize counter value to 0
  // set compare match register for 4hz increments
  OCR1A = 3905;// = (16*10^6) / (4*1024) - 1 (must be <65536)
  // turn on CTC mode
  TCCR1B |= (1 << WGM12);
  // Set CS12 and CS10 bits for 1024 prescaler
  TCCR1B |= (1 << CS12) | (1 << CS10);  
  // enable timer compare interrupt
  TIMSK1 |= (1 << OCIE1A);
  
  sei();//allow interrupts

}

ISR(TIMER1_COMPA_vect){

//Control loop here

}

預(yù)分頻器 (0CR1A) 的值決定了中斷的頻率。

控制汽車(第 1 部分)

第一種直接駕駛汽車的方法使用基于流程圖的簡(jiǎn)單算法。代碼如下:

 int pError = 0;
pError = pulse1 - pulse2;

 // pError is positive speed up motor A and slow down motor B
 if(pError > 0){
  analogWrite(enA, (motorSpeed + 7));
  analogWrite(enB, (motorSpeed - 7));
 }

 // pError is negative speed up motor B and slow down motor A
 else if(pError < 0){
  analogWrite(enA, (motorSpeed - 7));
  analogWrite(enB, (motorSpeed + 7));
 }

 else {
  analogWrite(enA, motorSpeed);
  analogWrite(enB, motorSpeed);
 }

 digitalWrite(led, toggle);
 toggle = !toggle;

控制汽車(第 2 部分)

一種更復(fù)雜的方法是使用 PID 控制器。Arduino 庫(kù)包括一個(gè)名為 FastPID 的庫(kù),它實(shí)現(xiàn)了 PID 控制器。添加到與 IDE 關(guān)聯(lián)的庫(kù)。

有關(guān)如何在以下鏈接中使用此庫(kù)的文檔

https://github.com/mike-matera/FastPID

這是代碼片段

float Kp=0.6, Ki=0.4, Kd=0, Hz=4;
int output_bits = 8;
bool output_signed = false;

FastPID driveStraight(Kp, Ki, Kd, Hz, output_bits, output_signed);
ISR(TIMER1_COMPA_vect){
  static int pError;
  pError = 0;
  pError = pulse1 - pulse2;
  uint8_t output = driveStraight.step(setpoint, pError);

  analogWrite(enA, (motorSpeed - output));
  analogWrite(enB, (motorSpeed + output));

  digitalWrite(led,toggle);
  toggle = !toggle;
}

可以通過(guò)為 Kp、Kd 和 Ki 分配不同的值來(lái)調(diào)整回路的靈敏度

最后的話

希望這有助于直接駕駛!


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)
主站蜘蛛池模板: 快穿做妓女好爽H| 99精品电影| 99re6久久热在线视频| 超碰在线视频公开| 精品无码久久久久久久动漫| 日本电影免费久久精品| 又黄又湿免费高清视频| 国产高清免费观看| 蜜桃无码AV视频在线观看| 亚洲1区2区3区精华液| CHINESE熟女老女人HD视频| 久久re6热在线视频精品66| 谁有成人网站地址| 99精品国产福利在线观看| 好想被狂躁A片免费久99| 肉肉的各种姿势高H细文| 69式国产真人免费视频| 国产亚洲欧美在线观看三区 | 三级黄色在线看| 4399日本电影完整版在线观看免费 | 伊人亚洲综合青草青草久热| 国产精品久久久久久久伊一| a久久99精品久久久久久蜜芽| 东莞桑拿美女| 国产成人无码免费精品果冻传媒| 男人到天堂a在538线| 伊人久久中文字幕久久cm| 国产免费久久精品国产传媒| 神马午夜不卡片| qvod电影网| 免费观看国产视频| 在线亚洲黄色| 久久国产露脸老熟女熟69| 亚洲精品无码不卡| 国产伦精品一区二区三区免费| 日本女人bbb| www精品一区二区三区四区| 内射老妇BBX| 99精彩免费观看| 免费久久狼人香蕉网| 2021精品高清卡1卡2卡3麻豆|