目次

移動メカ制御(2)

 Forthのワードで、移動メカを制御するには
 PWM(Pulse Width Modulation)波形の出力が
 必要になります。

 LPC1114のタイマーカウンタでPWM波形を出力
 するための手順をまとめておきます。

 大まかに3手順になりますが、次のシーケンスで
 パラメータを設定していきます。
  1. 機能兼用ピンをコンペアマッチで利用する指定
  2. 該当タイマーに、クロック供給
  3. コンペアマッチに関係するレジスタにパラメータ設定
  4. コンペアマッチで論理値を出力するピンを接続
  5. コンペアマッチ発生時に、ピンに出力する論理値指定
  6. PWM制御モジュールの利用と未使用を選択
  7. 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個を接続したものを利用

目次

inserted by FC2 system