サーボモータ制御

ハードウェア

仕様

サーボモータの制御を行う。

サーボモータは 20ms のパルスを受信し、その duty 比で回転角を制御します。 パルス幅としては 1ms から 2ms になる。

入力は GP0 から GP2 までの 3bit で、角度を決めます。 サーボへの出力は GP4 です。

回路図

ソフトウェア

動作の概要

割り込みは 256 μs 間隔で発生します。 従って、周期を 20 ms にするには 20/0.256 = 78.125 となります。 そこで、 duty_period(周期)を 80 にします。 この時、 1ms のパルスを作るには clock は大体 4 つ、 2ms のパルスを作る には 8 つになります。 したがって、周期 80 で、On になっている状態が 4 から 8 となるようにコ ントロールします。 プログラムはモータの PWM とほぼ同様です。

プログラムの動作

プログラム

プログラムを以下に示す。


	#include	"sakamoto629.inc"

	org	0x0000
	goto	start
	org	0x0004
	goto	timer0
	org	0x0008
start	
	calibrate

	movlw	0x07
	movwf	CMCON
	banksel	TRISIO
	movlw	b'00000111'
	movwf	TRISIO

	timer0_init	b'11010000' ; 内部クロック、 PS=1:2
	duty_init
	movlw	d'80' ; 周期
	movwf	duty_period
main
	movf	GPIO,0
	andlw	b'00000111'
	call	getduty
	movwf	duty_ratio
	goto	main

getduty
        addwf   PCL,1
startduty
	retlw	d'3'
	retlw   d'4'
	retlw   d'5'
	retlw   d'6'
	retlw   d'7'
	retlw   d'8'
	retlw   d'9'
	retlw   d'10'
endduty

	timer0_prg	duty

	duty_prg	gp4off,gp4on

gp4off
	bcf	GPIO,4
	return
gp4on
	bsf	GPIO,4
	return
	end

坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科