LoginSignup
1
0

More than 1 year has passed since last update.

Kageki (TD4互換機) でサーボ SG90 を操作してみる

Posted at

TD4の命令を実行できる自作CPU「Kageki」 でサーボ SG90 を操作してみた。

サーボ SG90

SG90 は、小型サーボであり、電気信号によって回転角度を制御することができる。
例えば秋月電子通商で売られている。(M-08761)

以下のように、20ms間隔で0.5~2.4msのパルスを与えることで制御を行う仕様である。
回転角度はパルスの幅で表現する。
SG90の制御信号

今回の仕様

サーボを制御する用の信号を、出力ポートのビット0から出力する。
入力ポートの値により、パルスの幅を変える。値が大きいほどパルスを長くする。

プログラム

位置 機械語   アセンブリ言語
--------------------------------
0    00100000 FIRST: IN  A
1    10110001        OUT 0001
2    01010001 WAIT1: ADD B, 0001
3    11100010        JNC WAIT1
4    00001111 SIG:   ADD A, 1111
5    11100111        JNC OFF
6    11111000        JMP NOOFF
7    10110000 OFF:   OUT 0000
8    01010001 NOOFF: ADD B, 0001
9    11100100        JNC SIG
A    00110000        MOV A, 0000
B    01010001 WAIT2: ADD B, 0001
C    11101011        JNC WAIT2
D    00000001        ADD A, 0001
E    11101011        JNC WAIT2
F    11110000        JMP FIRST

0番地:入力ポートの値を読む。
1番地:信号をHIGHにする。
2~3番地:固定の時間待つ。
4~9番地:入力ポートの値によって変わるタイミングで信号をLOWにする。
A~E番地:二重ループにより、長めの時間待つ。
F番地:最初に戻る。

実行結果

50kHzのクロックで実行した。

動作の様子

軸の回転により0~Fを切り替え、2進数で出力するスイッチを用いた回路を入力ポートに接続した。
これにより、入力ポートに 00001111 を入力し、それに応じてサーボが回転している。

信号の確認

オシロスコープ FNIRSI-1013D を用い、出力信号を観察した。

パルスの間隔の確認

0000 を入力したとき、パルスの間隔は 13.1ms であった。
仕様の 20ms よりかなり短いが、動いたのでヨシ…?

入力が 0000 のときのパルスの間隔

1111 を入力したときも、パルスの間隔は 13.1ms であった。
パルスの間隔は入力によらないようである。

入力が 1111 のときのパルスの間隔

パルスの幅の確認

0000 を入力したとき、パルスの幅は約 0.7ms であった。

入力が 0000 のときのパルスの幅

1111 を入力したとき、パルスの幅は約 2.2ms であった。

入力が 1111 のときのパルスの幅

いずれも、仕様 (0.5~2.4ms) 内に収まっている。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0