スタジオ ミュウ

モーターのPWM制御

LED計測制御 | LED双方向通信 | LEDグループ学習 | メロディのプログラム | RCサーボの制御 | モーターのPWM制御
MYUロボ-II | MYU-USB転送ソフト | MYU USB BASIC | USBドリトル | C アセンブラMYUUSB-1基板 | MYUUSB命令一覧


●PWM(パルス幅変調)制御
直流モーターの回転を制御する方法としてPWM((Pulse Width Modulation)があります。一定周期のパルスでモーターを駆動する方法です。パルスのデューティ比(ONの時間の比率)を変えることでモーターの電圧をコントロールします。例えば電圧が3V、ONの時間が2、OFFの時間が1とするとモーターは 3V x デューティ比(2/3) = 2Vの電圧で駆動することになります。
下のプログラムは、PWM制御を利用して左右のモーターの回転差によってロボットを緩旋回するものです。

◆円を描いて旋回する
右車輪をゆっくり回転させることで円を描くような旋回ができます。繰り返し数を変えて旋回半径を変化させてみましょう。

//右緩旋回 (転送ソフト)
繰り返す{
  繰り返す(20){ //繰返し数を大きくすると大回りになる
    前進    //両モーターがON
  }
  繰り返す(10){ //繰返し数を大きくすると小回りになる
    左前    //右モーターだけOFF
  }
}
//右緩旋回 (MYU BASIC)
Byte C
Do
  For C=0 To 20 //繰返し数を大きくすると大回りになる
    前進    //両モーターがON
  Next
  For C=0 To 10 //繰返し数を大きくすると小回りになる
    左前    //右モーターだけOFF
  Next
Loop

//右緩旋回 (構造化ドリトル)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
「!
    「!前進」20 繰り返す  //繰返し数を大きくすると大回りになる
    「!左前」10 繰り返す  //繰返し数を大きくすると小回りになる
」繰り返す
おわりロボット」。
ロボ太!転送命令。

◆新しい機能、タイマー繰り返すを使う
タイマー繰り返す(n){・・・}を使うとPWM制御に時間を設定できます。

タイマー繰り返す(n){・・・}   n x 0.1秒の間、{..}内を繰り返す 注、{..}内の命令は時間のかかるものは不可

//タイマー繰り返すを使った例
タイマー繰り返す(20){     //前進2秒
  前進
}
タイマー繰り返す(20){     //ゆっくり前進2秒
  繰り返す(10){
    前進
  }
  繰り返す(2){
    停止
  }
}
タイマー繰り返す(20){     //右大回り2秒
  繰り返す(10){
    前進
  }
  繰り返す(2){
    左前
  }
}
タイマー繰り返す(20){     //左大回り2秒
  繰り返す(10){
    前進
  }
  繰り返す(2){
    右前
  }
}

◆PWM制御(LEDの明るさを変える)
PWM制御を利用すればLEDの明るさを変えることができます。

//CDSのアナログ計測値によってLEDの明るさを変える(MYU-USB転送ソフト)
繰り返す{
  AN,10         //AN10の計測値をAレジスタにセット
  繰り返す(A > 40){  //Aレジスタの値により繰返す回数を変える
    PC,B'11111111' //LEDを8個点灯
    DECA       //Aレジスタの値を1減らす
  }         //繰返す回数が多いと明るい時間が長くなる
  AN,10         //AN10の計測値をAレジスタにセット
  繰り返す(A < 250){  //Aレジスタの値により繰返す回数を変える
    PC,B'00000000' //LEDを8個消灯
    INCA       //Aレジスタの値を1増やす
  }         //繰返す回数が多いと暗い時間が長くなる
}
//CDSのアナログ計測値をLEDの明るさを変える(MYU USB BASIC)
Byte A,B          //変数AとBの宣言
Do
  A=AN(10)      //AN10の計測値を変数Aにセット
  For B=40 To A    //繰返す回数が多いと明るい時間が長くなる
    PC=B'11111111' //LEDを8個点灯
  Next
  For B=A To 250   //繰返す回数が多いと暗い時間が長くなる
    PC=B'00000000' //LEDを8個消灯
  Next
Loop

//LEDの明るさを3段階に変える(MYU-USB転送ソフト)
繰り返す(250){     //デューティ比10%の明るさ
  繰り返す(20){
    PC,B'11111111'
  }
  繰り返す(180){
    PC,B'00000000'
  }
}
繰り返す(250){     //デューティ比50%の明るさ
  繰り返す(100){
    PC,B'11111111'
  }
  繰り返す(100){
    PC,B'00000000'
  }
}
繰り返す(250){     //デューティ比90%の明るさ
  繰り返す(180){
    PC,B'11111111'
  }
  繰り返す(20){
    PC,B'00000000'
  }
}
//LEDの明るさを3段階に変える(MYU USB BASIC)
Byte A,B         //変数AとBの宣言
For A=0 To 100     //デューティ比10%の明るさ
  For B=1 To 10
    PC=B'11111111'
  Next
  For B=1 To 90
    PC=B'00000000'
  Next
Next
For A=0 To 100     //デューティ比50%の明るさ
  For B=1 To 50
    PC=B'11111111'
  Next
  For B=1 To 50
    PC=B'00000000'
  Next
Next
For A=0 To 100     //デューティ比90%の明るさ
  For B=1 To 90
    PC=B'11111111'
  Next
  For B=1 To 10
    PC=B'00000000'
  Next
Next