Sample Program

R/C Servo Motor Operating Program for PPF-07i Ver.0.5


'
'*********************************************************
'
' R/C Servo Motor Operating Program for PPF-07i Ver.0.5
'
'                 ppf07_04.bas  2000/7/21 by K. Hirata
'
'*********************************************************
'
' PIC16F84 20MHz用
'
'***********************
' 初期設定
'***********************
'
Symbol ONtime=W0
Symbol T1=W1
Symbol T2=W2
Symbol T3=W3
Symbol Freq=W4
Symbol LL=W5
Symbol RR=W6
Symbol SpeedStep=W7
Symbol ModeNum=W8
Symbol Amplitude=W9
Symbol ModeSW=W10
Symbol FlagLeft=W11
Symbol FlagRight=W12
Symbol Ptime=20 'パルス周期(20ms)
'Symbol ONtime_min=375 'ONの時間の最小値(375/(20/4)/100=0.75ms)
Symbol ONtime_min=500 'ONの時間の最小値(500/(20/4)/100=1.00ms)
Symbol ONtime_max=1125 'ONの時間の最大値(562/(20/4)/100=2.25ms)
'
input 0: input 1: input 2: input 3
input 4: input 5: output 6: output 7
'
'***********************
' メインルーチン
'***********************
'
Loop:
'
' 振幅,周波数の設定
'
ModeSW=0
If pin5=1 then Mode_pin5
ModeSW=1
Mode_pin5:
If pin4=1 then Mode_pin4
ModeSW=ModeSW+2
Mode_pin4:
If pin3=1 then Mode_pin3:
ModeSW=ModeSW+4
Mode_pin3:
'If pin2=1 then Mode_pin2:
'ModeSW=ModeSW+8
'Mode_pin2:
Branch ModeSW,(Mode0,Mode1,Mode2,Mode3,Mode4,Mode5,Mode6,Mode7)
Goto Mode0
Mode_end:
'
' 周波数の設定
'
If pin2=1 then LowSpeed
If pin2=0 then HighSpeed
Speed:
'
' 傾きの設定
'
If pin0=0 then LeftL
If FlagLeft>1 then LeftL
If pin1=0 then RightR
If FlagRight>1 then RightR
Goto Center
Leaning:
'
' 尾ひれの往復運動
'
For ONtime=T1 to T2 step SpeedStep 'ONの時間(/2.5usec)
  Pulsout 7, ONtime
  Pause 94 'OFFtime 'OFFの時間(94/5=18.8msec)
Next ONtime
T2=T2-1: T1=T1+1
For ONtime=T2 to T1 step -SpeedStep 'ONの時間(/2.5usec)
  Pulsout 7, ONtime
  Pause 94 'OFFtime 'OFFの時間(94/5=18.8msec)
Next ONtime
T2=T2+1: T1=T1-1
Goto Loop
End
'
'******************************
' 振幅設定・サブルーチン
'******************************
'
' モード0
'
Mode0:
Amplitude=20 '振幅(0-100)
Freq=100 '周波数(/100Hz)
Goto Mode_end
'
' モード1
'
Mode1:
Amplitude=30 '振幅(0-100)
Goto Mode_end
'
' モード2
'
Mode2:
Amplitude=40 '振幅(0-100)
Goto Mode_end
'
' モード3
'
Mode3:
Amplitude=50 '振幅(0-100)
Goto Mode_end
'
' モード4
'
Mode4:
Amplitude=60 '振幅(0-100)
Goto Mode_end
'
' モード5
'
Mode5:
Amplitude=70 '振幅(0-100)
Goto Mode_end
'
' モード6
'
Mode6:
Amplitude=80 '振幅(0-100)
Goto Mode_end
'
' モード7
'
Mode7:
Amplitude=90 '振幅(0-100)
Goto Mode_end
'
'******************************
' 周波数設定・サブルーチン
'******************************
'
LowSpeed:
Freq=200 '周波数(/100Hz)
Goto Speed
'
HighSpeed:
Freq=300 '周波数(/100Hz)
Goto Speed
'
'******************************
' 傾き設定・サブルーチン
'******************************
'
LeftL:
FlagLeft=FlagLeft+1
If FlagLeft>20 then Center
RR=Amplitude
LL=0
Gosub Mode_set
Goto Leaning
'
RightR:
FlagRight=FlagRight+1
If FlagRight>20 then Center
RR=100
LL=100-Amplitude
Gosub Mode_set
Goto Leaning
'
Center:
FlagLeft=0
FlagRight=0
RR=Amplitude/2
RR=50+RR
LL=Amplitude/2
LL=50-LL
Gosub Mode_set
Goto Leaning
'
'******************************
' モードセット・サブルーチン
'******************************
'
Mode_set:
T1=ONtime_max-Ontime_min
T1=T1/100
T1=T1*LL
T1=ONtime_min+T1
'
T2=ONtime_max-Ontime_min
T2=T2/100
T2=T2*RR
T2=ONtime_min+T2
'
T3=T2-T1 '1/2周期のデータ数
T3=2*T3 '1周期のデータ数(4の倍数)
SpeedStep=10000/Freq/Ptime*10 '設定した周波数に対応するデータ数
SpeedStep=T3/SpeedStep '刻み幅(ステップ)
Return

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