07 TMRW04.c
13.1.7 サーボモータを 8 個動かす (IC で割り振り )
前回は、割込み関数を用いて
8
本の独立したPWM
を出力しました。これによって、サーボモータを
8
個制御できることを確認しました。しかし、8個のロボット用モータを制御するために、8本の端子が必要でした。20個のモータを制御し ようとしたら
20
本の端子が必要になります。また、ソフト的に割り振りをしていたのでは処理スピードが問題になることもあります。後ほど紹介す る「モーション作成ソフト」を用いた場合には、ソフト的に割り振っていたのでは処理が間に合わないこ ともあるのです。
一般に、ソフトウェアで処理するよりもハードウェア的に処理するほうが早いようです。また、回路に よってはマイコンの出力端子を少なくすることも可能です。
ここでは、TC4051Bを用いて、1本の
PWM
を8
本に振り分けるということをしてみましょう。タイマ
W
のPWM
モードを用いてFTIOB
端子にPWM
を出力します。これを2.5ms
ごとに8
本に振 り分けるわけです。図示すると、以下のようになります。
図
13.7 1
本のPWM
を8
本に振り分ける図
13.7
で、 最初のパルスは2.5mS
の周期でON
時間を変更しながらパルスを作っています。もととなるパルス
(FTIOB
端子に出力)を2.5mS
ごとに出力先を切り替えることで、ロボット用モー タを8
本出力することが可能になるわけです。このとき、 切り替え時間に必要なのは、 最悪で
0.2mS
になります。なお、出力の切り替えを、出力が
0
の時に行っていることに注意してください。TC4051B
上で説明した、パルスの振り分けをおこなうのが
TC4051B
というIC
です。TC4051B
のピン接続図と真理値表を載せておきます。図
13.8 TC4051B
のピン接続図表
13.8 TC4051B
の真理値表 コントロールチャンネル 出力チャンネルINH A B C TC4051B
0 0 0 0 0
0 1 0 0 1
0 0 1 0 2
0 0 0 0 3
0 0 0 0 4
0 0 0 0 5
0 0 0 0 6
0 0 0 0 7
1 * * * None
上の説明に対応させるならば、
COM
にもととなるパルスを入力し、A,B,C
の値を変えることによっ て、 出力先を0
から7
までに切り替えることができるわけです。表
13.8
から分かるように、A=0,B=0,C=0
の時にはCOM
から入力されたパルスは端子0
から出力されます。
A=1,B=0,C=0
の時にはパルスは端子1
から、A=0,B=1,C=0
の時にはパルスは端子2
からというふ うになります。COM
にたとえばFTIOB
端子をつなぎ、0から7
までの端子にサーボモータをつなぐことで、8個の サーボモータを制御できます。このとき、マイコンにつなぐ端子は
COM
とA、B、C
の4
本ですみます。FTIOC
端子、FTIOD端子にもTC4051BTF
をつなげば、最大24
本のPWM
を6
本の端子で制御で きることになります(A、B、C
はFTIOB
端子、FTIOC端子、FTIOD端子で共通にできます)。回路図
今回のサンプルプログラムのための回路を図
13.9
に示します。8
個のモータの信号線は、TC4051BPの8
本の出力ピンにつないでください。図
13.9
モータ回路図今回のサンプルプログラムは、8個のサーボモータを