目次
前
次
移動メカ制御(1)
移動メカを用意して、動かしてみます。
使う移動メカは、以下。
この移動メカには、サーボモータとDCモータが
各1個ずつ実装されています。
IchigoJamのBASICで使われているPWM命令を
タイマー0、1に適用してみます。
PWM命令は、3パラメータを持っています。
ワードで接続先を固定すれば、ポート番号は
不要と判断できます。
サーボモータを利用するときは、100kHzをカウンタの
クロックとして最大カウント値を2000、カウント値は
100から200にして対応。
タイマーのクロックを100kHzに設定して、コンペア
マッチで扱う1周期を2000にします。
これで、サーボモータは100から200のいずれかの
整数値を指定するだけになります。
PWM波形をどこから出力するのかを考えて
ピンアサインで、OUT_2、OUT_3に相当する
ポートを使うことに。
OUT_2、OUT_3は、PIO1_1、PIO1_2を使います。
タイマーは、CT32B1で32ビットカウンタ利用に。
コンペアマッチを使うので、プリスケーラと
カウンタの設定値を考えていきます。
システムクロックをデフォルトの12MHzで動作させると
すれば、プリスケーラは120分周で100kHzをカウンタに
与えることができます。プリスケーラには、119を設定。
CT32B1を利用するので、IOCONFIGレジスタでPIO1_1、PIO1_2は
コンペアマッチ出力に設定しなければなりません。
また、SYSAHBCLKCTRLレジスタのパラメータ設定で、CT32B1に
クロック供給すると指定。
サーボモータ、DCモータともに、コンペアマッチで値が一致
したときから、’L'を出力するようにします。正論理で利用
する仕様で対応。
ドライブ回路は、以下。
サーボモータは、電圧レベルが問題なので、LPC1114のピンから
出力される電圧をサーボモータの電源電圧レベル近くまで引き
あげておきます。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
;
サーボモータに与えるパラメータを
-90から+90にして、わかりやくする
ワードを定義。
: svm
5 * 9 / 150 + CT32B1MR0 !
;
定義域の-90から+90を、カウント値の100から200と
するために、次の計算式を使います。
動作試験には、次のワードを定義して対応。
: xdelay 1000000 0 do i loop ;
: tst_svm 91 -90 do i dup . svm xdelay loop ;
「i dup .」とするのは、サーボモータの制御
パラメータを与えるのと同時に角度を表示して
わかりやすくするため。
DCモータに与えるパラメータをDUTY比として
処理するワードを定義。
: dcm
20 * CT32B1MR1 !
;
動作試験には、次のワードを定義して対応。
: tst_dcm 100 0 do i dup . dcm xdelay loop ;
「i dup .」とするのは、DCモータのDuty比を
パラメータで与えるのと同時に値表示により
わかりやすくするため。
モータを動かすときには、次のように
ワードを入力します。
\ initialize
init_motor{enter}
\ test servo motor
tst_svm{enter}
\ neutral
150 svm{enter}
\ test DC motor
tst_dcm{enter}
\ stop DC motor
0 dcm{enter}
目次
前
次