![]() |
Sample Program
' '********************************************************* ' ' 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 |