日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【小项目关键技术二】UGV电机编码测速

發(fā)布時間:2025/4/5 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【小项目关键技术二】UGV电机编码测速 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

測試程序

#define PinA 2 //外部中斷0 #define PinZ 3 //外部中斷1 #define PinB 9 //編碼器的OUT_B信號連接到數(shù)字端口8 #define T 200 //定義采集時間周期單位ms unsigned long time1 = 0; // 時間標(biāo)記 volatile long PulSum_CW = 0; //定義長整型不可修改脈沖數(shù) volatile long PulSum_CCW = 0; long PulSum_CW_t0 = 0; //定義記錄順時針方向 t0 時刻脈沖數(shù)變量 long PulSum_CW_t0_T = 0; //定義記錄順時針方向 t0+T 時刻脈沖數(shù)變量float Rad_CW_Speed = 0.000; //定義順時針角速度 float Rad_CCW_Speed = 0.000; //定義逆時針角速度long PulSum_CCW_t0 = 0; //定義記錄逆時針方向 t0 時刻脈沖數(shù)變量 long PulSum_CCW_t0_T = 0; //定義記錄逆時針方向 t0+T 時刻脈沖數(shù)變量// 記錄角度 int Rad = 180;void setup(){pinMode(PinA, INPUT_PULLUP);//因為編碼器信號為歐姆龍E6B2-CWZ6C,為開漏輸出,因此需要上拉電阻,此處采用arduino的內(nèi)部上拉輸入模式,置高pinMode(PinB, INPUT_PULLUP);//同上attachInterrupt(0, Encode, FALLING);//脈沖中斷函數(shù):捕捉A相信號,并判斷A、B相先后順序Serial.begin (9600); }void loop() {// 角度計算程序Rad = int((PulSum_CW - PulSum_CCW)/6.944) % 360; if (Rad>=180) {Rad = Rad - 360;}PulSum_CW_t0 = PulSum_CW; PulSum_CCW_t0 = PulSum_CCW; //采集t0時刻的脈沖數(shù)delay(T); //等待一個T時間PulSum_CW_t0_T = PulSum_CW; PulSum_CCW_t0_T = PulSum_CCW; //采集t0+T時刻的脈沖數(shù)delay(T); //等待一個T時間// 如果檢測到正向角速度,那么就打印角速度,以及累計的角度if (PulSum_CW_t0_T - PulSum_CW_t0 != 0){Rad_CW_Speed = (PulSum_CW_t0_T - PulSum_CW_t0); //// 顯示正向(CW)角速度 Rad_CW_Speed---> //打印出來速度//Serial.print("AS:"); //打印出來速度wSerial.print(Rad_CW_Speed);Serial.print(":"); //Serial.print("/A:");Serial.print(Rad);Serial.print("\n");} // 如果檢測到反向角速度,那么就打印角速度,以及累計的角度if (PulSum_CCW_t0_T - PulSum_CCW_t0 != 0){Rad_CCW_Speed = (PulSum_CCW_t0 - PulSum_CCW_t0_T);//Serial.print("AS:");Serial.print(Rad_CCW_Speed);Serial.print(":"); //Serial.print("/A:");Serial.print(Rad);Serial.print("\n");}} void Encode() {//當(dāng)編碼器碼盤的OUTA脈沖信號下跳沿每中斷一次,//if ((millis() - time1) > 5)//{if ((digitalRead(PinA) == LOW) && (digitalRead(PinB) == HIGH)){PulSum_CW ++;}else{PulSum_CCW ++;}//}//time1 == millis(); }

注意事項

  • 單片機需要用到中斷引腳,因此需要考慮中斷數(shù)量足夠的單片機UNO/Nano。

  • https://item.taobao.com/item.htm?spm=a1z09.2.0.0.7c462e8dW1JbJF&id=624810490543&_u=g1o5c92q9ce3


    How to use the L298N Motor Driver




    輪子直徑:42mm
    一圈的周長為:π?d\pi \cdot dπ?d = 3.14 * 42 mm = 131.88 mm
    觀察電機參數(shù)可知:旋轉(zhuǎn)一圈產(chǎn)生2個脈沖
    其中有個參數(shù)為基礎(chǔ)脈沖:7ppr,理解為pulses per revolution電機每轉(zhuǎn)的脈沖數(shù),即電機不轉(zhuǎn)編碼器也會產(chǎn)生7個脈沖。不過我們使用的測速方式是取一段時間的脈沖差值,所以不影響測速效果。

    測試了一些數(shù)據(jù),關(guān)于電機設(shè)置最大PWM=255時,電機在不同的時間間隔產(chǎn)生的脈沖數(shù)

    PWM時間間隔脈沖數(shù)(左電機)脈沖數(shù)(右電機)
    2551000 ms1933, 1936, 1947, 1940, 19512074, 2073, 2074, 2079, 2070
    100 ms142, 143, 142, 141, 142205, 205, 206, 204, 205
    200 ms338, 342, 343, 344, 345205, 205, 206, 204, 205
    500 ms960, 958, 958, 959, 9561037, 1037, 1036, 1038, 1040
    PWM時間間隔脈沖數(shù)(左電機)脈沖數(shù)(右電機)
    551000 ms1032, 1031, 1029, 1033, 10321139, 1151, 1153, 1139, 1156
    100 ms34, 33, 33, 32, 3161, 59, 61, 61, 60
    200 ms104, 106, 101, 105, 101173, 173, 173, 175, 175
    500 ms421, 427, 423, 426, 426551, 552, 553, 554, 555

    測量時電池電壓:7.44 V

    最高輸出255時,電機測量脈沖近似為2000個(因為只測量了下降沿,全算上應(yīng)該是4000個),即轉(zhuǎn)了2000圈。而電機的減速比為40:1,那么編碼器的2000就等價于輪子的50圈,與所標(biāo)參數(shù)一致。
    換算成實際距離,電機的全速運轉(zhuǎn)時轉(zhuǎn)速為131.88mm/s。這是理論計算出來的速度。

    實際測試,8s 運行了3塊地磚,也就是120cm,速度大概是150mm/s。

    而一圈是131.88mm,等價于1.14轉(zhuǎn)/秒。一秒產(chǎn)生了2000個脈沖。

    通過上述分析,暫時建立如下關(guān)系

    輸出功率時間圈數(shù)脈沖數(shù)距離速度
    2551s12000131.88mm13.19cm/s
    551s11000131.88mm7.19cm/s

    最小速度為 7cm/s。


    總結(jié)

    以上是生活随笔為你收集整理的【小项目关键技术二】UGV电机编码测速的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。