1.5V 500mA から 12V 5A 程度のモータの制御を行います。 制御は5V の On, Off で停止、正転の切り替えと、 3bit の入力で PWM のコ ントロールします。
GP5 がモータの ON-OFF で、 GP0-2 が PWM のduty 比です。 GP4 が FET 2SK2232 のスイッチング回路に接続されます。
モータ制御は入力により次のような動作をする。
入力 | 出力 |
---|---|
GR5=ON | GP4 duty比=100% |
GR5=OFF, GR0-2=0 | duty比=0% |
GR5=OFF, GR0-2=1 | duty比=1.5625% |
GR5=OFF, GR0-2=2 | duty比=3.125% |
GR5=OFF, GR0-2=3 | duty比=6.25% |
GR5=OFF, GR0-2=4 | duty比=12.5% |
GR5=OFF, GR0-2=5 | duty比=25% |
GR5=OFF, GR0-2=6 | duty比=50% |
GR5=OFF, GR0-2=7 | duty比=100% |
無限ループ
GP0-2 | 比較用の値 |
---|---|
0 | 0 |
1 | 1 |
2 | 2 |
3 | 4 |
4 | 8 |
5 | 16 |
6 | 32 |
7 | 64 |
プログラムを以下に示す。
#include "sakamoto629.inc"
org 0x0000
goto start
org 0x0004
goto timer0
org 0x0008
start
calibrate
movlw 0x07
movwf CMCON
banksel TRISIO
movlw b'00101111'
movwf TRISIO
timer0_init b'11010000' ; 内部クロック、 PS=1:2
duty_init
movlw d'64'
movwf duty_period
main
movf GPIO,0
andlw b'00000111'
call getduty
movwf duty_ratio
goto main
getduty
addwf PCL,1
startduty
retlw d'0'
retlw d'1'
retlw d'2'
retlw d'4'
retlw d'8'
retlw d'16'
retlw d'32'
retlw d'64'
endduty
timer0_prg control
control
btfss GPIO,5
goto duty
goto gp4on
duty_prg gp4off,gp4on
gp4off
bcf GPIO,4
return
gp4on
bsf GPIO,4
return
end