Sample Program

R/C Servo Motor Operating Program for PPF-01i Ver.0.9


'
'**************************************************
'
' R/C Servo Motor Operating Program for PPF-01i
'
'**************************************************
'
Symbol ONtime1=W0
Symbol ONtime2=W1
Symbol T1=W2
Symbol T2=W3
Symbol T3=W4
Symbol T4=W5
Symbol Freq=W6
Symbol LL=W7
Symbol RR=W8
Symbol SpeedRep=W9
Symbol SpeedStep=W10
Symbol i=B24
Symbol ii=B25
Symbol z=B26
Symbol k=B27
Symbol Ptime=20 'パルス周期(20ms)
Symbol ONtime_min=188 'ONの時間の最小値(188/250=0.75ms)
Symbol Ontime_cent=375 'ニュートラル時のONの時間(375/250=1.50ms)
Symbol ONtime_max=562 'ONの時間の最大値(562/250=2.25ms)
Symbol Clk=10 'クロック(10MHz)
z=0 'モード番号(初期値)
k=1 'スピードの倍率
'
input 0: input 1: input 2: input 3
input 4: input 5: output 6: output 7
'
Loop:
Branch z,(Mode0, Mode1, Mode2, Mode3, Mode4, Mode4, z_reset) 'モード設定
Mode_end:
z=z+1
'
For ii=1 to 3
  if Pin0=0 then LowSpeed
  if Pin1=0 then HighSpeed
  Speed_end:
  SpeedStep=SpeedStep+k
  '
  For ONtime1=T1 to T2 step SpeedStep 'ONの時間(/2.5usec)
    T4=T3/4+T1 '90degの位置
    If ONtime1=T4 then NextONtime2 '90deg〜180deg
    NextONtime1: '0〜90deg
      T4=T3/4 '1/4周期
      ONtime2=T4+T1-ONtime1+T1 '逆向きに動く
      Goto NextONtime3
    NextONtime2: '90deg〜180deg
      T4=T3/4 '1/4周期
      ONtime2=ONtime1-T4 '1/4周期引く
    NextONtime3:
    For i=1 to SpeedRep
      Pulsout 6, ONtime1
      Pulsout 7, ONtime2
      Pause 47 'OFFtime 'OFFの時間(47/2.5=18.8msec)
    Next i
  Next ONtime1
  T2=T2-1: T1=T1+1
  For ONtime1=T2 to T1 step -SpeedStep 'ONの時間(/2.5usec)
    T4=T3/4+T1 '270degの位置
    If ONtime1=T4 then NextONtime5
    NextONtime4: '180〜270deg
      T4=T3/4 '1/4周期
      ONtime2=ONtime1+T4 '1/4周期加える
      Goto NextONtime6
    NextONtime5: '270deg〜360deg
      T4=T3/4 '3/4周期
      ONtime2=T4+T2-ONtime1+T1
    NextONtime6:
    For i=1 to SpeedRep
      Pulsout 6, ONtime1
      Pulsout 7, ONtime2
      Pause 47 'OFFtime 'OFFの時間(47/2.5=18.8msec)
    Next i
  Next ONtime1
  T2=T2+1: T1=T1-1
Next ii
Goto Loop
End
'
'************************************************** サブルーチン
'
LowSpeed:
  If k=1 then Speed_end
  k=k-1
  Goto Speed_end
HighSpeed:
  k=k+1
  Goto Speed_end
'
' モード0
'
Mode0:
LL=80 '左偏り(%)
RR=80 '右偏り(%)
Freq=100 '周波数(/100Hz)
Gosub Mode_set
Goto Mode_end
'
' モード1
'
Mode1:
LL=70 '左偏り(%)
RR=10 '右偏り(%)
Freq=100 '周波数(/100Hz)
Gosub Mode_set
Goto Mode_end
'
' モード2
'
Mode2:
LL=10 '左偏り(%)
RR=70 '右偏り(%)
Freq=100 '周波数(/100Hz)
Gosub Mode_set
Goto Mode_end
'
' モード3
'
Mode3:
LL=60 '左偏り(%)
RR=60 '右偏り(%)
Freq=150 '周波数(/100Hz)
Gosub Mode_set
Goto Mode_end
'
' モード4
'
Mode4:
LL=40 '左偏り(%)
RR=40 '右偏り(%)
Freq=200 '周波数(/100Hz)
Gosub Mode_set
Goto Mode_end
'
' 変数zを0に戻すサブルーチン
'
z_reset:
z=0
Goto Loop
'
' モードセットサブルーチン
'
Mode_set:
T1=ONtime_cent-Ontime_min
T1=T1*LL/100
T1=ONtime_cent-T1
T2=ONtime_max-Ontime_cent
T2=T2*RR/100
T2=ONtime_cent+T2
T3=T2-T1
T3=2*T3 '1周期のデータ数(4の倍数)
'SpeedStep=10000/Ptime/T3*10 'ダミー(ステップ1,リピート1の場合の周波数)
'If Freq>SpeedStep Then Set_SpeedStep
'  SpeedStep=1 '最も遅く設定
'  SpeedRep=10000/Freq/Ptime*10 '設定した周波数に対応するデータ数
'  SpeedRep=SpeedRep/T3 '繰り返し数(リピート)
'Return
'Set_SpeedStep:
  SpeedRep=1 '最速に設定
  SpeedStep=10000/Freq/Ptime*10 '設定した周波数に対応するデータ数
  SpeedStep=T3/SpeedStep '刻み幅(ステップ)
Return

[ Microcomputer ] [ Hirata HOME ] [ Power and Energy Engineering Division ] [ NMRI HOME ]
Contact khirata@nmri.go.jp