目次
前
次
移動メカ制御(2)
Forthのワードで、移動メカを制御するには
PWM(Pulse Width Modulation)波形の出力が
必要になります。
LPC1114のタイマーカウンタでPWM波形を出力
するための手順をまとめておきます。
大まかに3手順になりますが、次のシーケンスで
パラメータを設定していきます。
- 機能兼用ピンをコンペアマッチで利用する指定
- 該当タイマーに、クロック供給
- コンペアマッチに関係するレジスタにパラメータ設定
- コンペアマッチで論理値を出力するピンを接続
- コンペアマッチ発生時に、ピンに出力する論理値指定
- PWM制御モジュールの利用と未使用を選択
- PWM波形出力を簡易指定できるワード定義
コンペアマッチ発生時のピン出力論理値の指定は
External Match レジスタを利用。
次のように、CT16B0、CT16B1、CT32B0、CT32B1の
タイマーに共通したビット配置でパラメータ設定
できるようになっています。
(以下は、32ビットの例。16ビットでも同じ。)
コンペアマッチは4ピン分用意されているので
LSBからの4ビットと各ピンの状態設定とに分割
しての設定ができるようになっています。
コンペアマッチが発生したときに、ドライブ回路
にあわせて、0、1、トグルの出力が可能と理解
できます。
PWM関係モジュールを利用したいときには、次の
レジスタにパラメータを設定。
(以下は、32ビットの例。16ビットでも同じ。)
レジスタのビットの論理値設定で、EMRの設定を
優先するかPWMモジュールの設定が使われるかを
選択できる仕様です。
機能が多いときには、ブロック図を利用して理解
しておけばよいのですが、データシートの図面は
多少わかりにくいので、次のブロック図を描いて
おけばよいでしょう。
サーボモータ、DCモータをPWM波形で動かすことに
したので、ワードを定義しながら実験していきます。
サーボモータは角度で指定するので、-90から+90で
100から200のカウント値に変換する、ワードを定義
して実験します。
ワードは、次のようにしました。
最下位のワードができたなら、そのワードをテストする
ワードを用意して実験します。次のように定義。
: tst 91 -90 do i dup . svmx cr loop ;
このワードで実験すると、以下。
サーボモータにPWM命令を用意して、それをDCモータでも
使うための変換ワードを定義して、使うワードを減らす
とします。
DCモータは、DUTY比で設定すればよいので、0から100を
与えたとき、0から2000になるようにワードを定義。
: dcmx 20 * . ;
このワードでよいかをテスト。
サーボモータ、DCモータを使いやすくするワードが
できたので、タイマーを利用するワードを定義する
と進めていきます。この内容は、すでに考えてある
ので、確認します。
\ SFR
$4004407C constant PIO1_1
$40044080 constant PIO1_2
$40048080 constant CLKCTRL
$40018000 constant CT32B1IR
$40018004 constant CT32B1TCR
$40018008 constant CT32B1TC
$4001800C constant CT32B1PR
$40018010 constant CT32B1PC
$40018014 constant CT32B1MCR
$40018018 constant CT32B1MR0
$4001801C constant CT32B1MR1
$40018020 constant CT32B1MR2
$40018024 constant CT32B1MR3
$4001803C constant CT32B1EMR
$40018074 constant CT32B1PWMC
: init_motor ( -- )
\ set P1.1 compare match output with CT32B1_MAT0
3 PIO1_1 !
\ set P1.2 compare match output with CT32B1_MAT1
3 PIO1_2 !
\ enable CT32B1
1 10 lshift CLKCTRL bis!
2 CT32B1TCR ! \ disable Time Control Register
1 7 lshift CT32B1MCR bis! \ MR2 -> Reset TC
119 CT32B1PR ! \ Set Prescale Register
150 CT32B1MR0 ! \ 150 -> MR0
0 CT32B1MR1 ! \ 0 -> MR1
1999 CT32B1MR2 ! \ 1999 -> MR2
3 CT32B1EMR bis! \ refrects MR0 and MR1 to MAT_0 and MAT_1
5 4 lshift CT32B1EMR bis! \ if compare matched , clear output
0 CT32B1PWMC ! \ disable PWM controller
1 CT32B1TCR ! \ enable Time Control Register
;
変換用のワードは定義してあるので、追加定義。
: svmx 5 * 9 / 150 + ;
: svm svmx CT32B1MR0 ! ;
: dcmx 20 * ;
: dcm dcmx * CT32B1MR1 ! ;
Forth基板に接続するテスト用のモータは、以下。
DCモータは、扇風機利用
サーボモータは、2個を接続したものを利用
目次
前
次