Robofun 機器人論壇

標題: 如何隨著電阻大小改變直流馬達速度 [打印本頁]

作者: asd456    時間: 2012-3-7 17:54
標題: 如何隨著電阻大小改變直流馬達速度
請問一下如何隨著推動搖桿的角度增加行走速度
我是給車子固定值
不曉得如何隨著電阻大小改變而改變速度
void loop () {
  x_direction = 0;
  y_direction = 0;
  x_position = analogRead(PIN_ANALOG_X);
  y_position = analogRead(PIN_ANALOG_Y);

  if (x_position > X_THRESHOLD_HIGH) {
    x_direction = 1;
   
  } else if (x_position < X_THRESHOLD_LOW) {
    x_direction = -1;
   
  }
  if (y_position > Y_THRESHOLD_HIGH) {
    y_direction = 1;
    digitalWrite(dir_a, HIGH);  
        
  } else if (y_position < Y_THRESHOLD_LOW) {
    y_direction = -1;
   
  }
   
  if (x_direction == -1) {
      if (y_direction == -1) {
        //Serial.println("left-down");
        digitalWrite(dir_a, LOW);  
        digitalWrite(dir_b, LOW);  
        delay(100);
        analogWrite(pwm_a, 50);  
        analogWrite(pwm_b, 255);
        delay(100);
      } else if (y_direction == 0) {
        //Serial.println("left");
        digitalWrite(dir_a, HIGH);  
        digitalWrite(dir_b, HIGH);  
        delay(100);
        analogWrite(pwm_a, 0);  
        analogWrite(pwm_b, 255);
        delay(100);
      } else {
        // y_direction == 1
        //Serial.println("left-up");
        digitalWrite(dir_a, HIGH);  
        digitalWrite(dir_b, HIGH);  
        delay(100);
        analogWrite(pwm_a, 50);  
        analogWrite(pwm_b, 255);
        delay(100);     
      }  
  } else if (x_direction == 0) {
      if (y_direction == -1) {
        //Serial.println("down");
        digitalWrite(dir_a, LOW);  
        digitalWrite(dir_b, LOW);  
        delay(100);
        analogWrite(pwm_a, 255);  
        analogWrite(pwm_b, 255);
        delay(100);
      } else if (y_direction == 0) {
        //Serial.println("centered");
        digitalWrite(dir_a, HIGH);  
        digitalWrite(dir_b, HIGH);  
        delay(100);
        analogWrite(pwm_a, 0);  
        analogWrite(pwm_b, 0);
        delay(100);
      } else {
        // y_direction == 1
        //Serial.println("up");
        digitalWrite(dir_a, HIGH);  
        digitalWrite(dir_b, HIGH);  
        delay(100);
        analogWrite(pwm_a, 255);  
        analogWrite(pwm_b, 255);
        delay(100);      
      }
  } else {
      // x_direction == 1
      if (y_direction == -1) {
        //Serial.println("right-down");
        digitalWrite(dir_a, LOW);  
        digitalWrite(dir_b, LOW);  
        delay(100);
        analogWrite(pwm_a, 255);  
        analogWrite(pwm_b, 50);
        delay(100);
      } else if (y_direction == 0) {
        //Serial.println("right");
        digitalWrite(dir_a, HIGH);  
        digitalWrite(dir_b, HIGH);  
        delay(100);
        analogWrite(pwm_a, 255);  
        analogWrite(pwm_b, 0);
        delay(100);
      } else {
        // y_direction == 1
        //Serial.println("right-up");
        digitalWrite(dir_a, HIGH);  
        digitalWrite(dir_b, HIGH);  
        delay(100);
        analogWrite(pwm_a, 255);  
        analogWrite(pwm_b, 50);
        delay(100);      
      }
  }
作者: vegewell    時間: 2012-3-8 12:09
回復 1# asd456


    改變pwm,也不能改變直流馬達速度,
至少不明顯,
只能改變給直流馬達的電壓,去改變速度,
作者: mjm2246    時間: 2012-3-9 14:26
請問該如何改比較好 有點卡關
作者: s890916    時間: 2012-3-12 02:17
回復 2# vegewell


    可PWM不就是利用改變平均電壓來控制馬達轉速的嗎?
作者: vegewell    時間: 2012-3-12 20:01
回復 4# s890916


    PWM只是脈衝的變化,沒有改變電壓.
作者: vegewell    時間: 2012-3-12 20:24
回復 3# mjm2246


   有人稍為改一下 就好了.
作者: AlexT    時間: 2012-3-20 12:48
回復  s890916


    PWM只是脈衝的變化,沒有改變電壓.
vegewell 發表於 2012-3-12 20:01


以長一點的時間來看,duty cycle 變小,平均電壓就會變低,馬達速度就會變慢,很多馬達控速都是用PWM方式的,要真的改變電壓太麻煩了。
Arduino的 analogwrite不也是用PWM方式模擬的嗎?
作者: nichal    時間: 2012-3-20 16:17
你的搖桿是類似可變電阻的嗎?
一般常見的搖桿是接點信號

如果要用角度去改變速度
可以把AD的滿刻度跟PWM的滿刻度做匹配
直接把AD值餵給PWM當duty
這樣就可以改變速度了

不過
PWM的頻率要稍微修正一下
找一個最適合你的馬達的頻率
頻率太高切換損會很大(馬達比較沒力)
頻率太低輸出會振盪(馬達會跟著震動)
試一下看看吧
作者: AlexT    時間: 2012-3-20 16:45
你的搖桿是類似可變電阻的嗎?
PWM的頻率要稍微修正一下
nichal 發表於 2012-3-20 16:17


Arduino的PWM似乎不能改頻率....
剛接觸沒多久而已,有誤請多包涵指正
作者: anthonymo2008    時間: 2012-3-21 15:50
用PWM的方法怎麼不能改變啊, 應該是PWM沒有足夠大吧,
你可以嘗試一下PWM占空比比較大的時候與比較小的時候的
卻別就知道了。
大家有時間看看http://gdrobots.taobao.com
QQ:285093027





歡迎光臨 Robofun 機器人論壇 (https://www.robofun.net/forum/) Powered by Discuz! X3.2