モータ回転数制御
本稿掲載の
Web
ページ
http://www.mybook-pub-site.sakura.ne.jp/Motor Drive note/index.html
目次
第 4 章 8 ピンマイコンによる直流 (DC) モータ回転数制御 2 4.1 組み立て . . . . 2 4.2 プロジェクトの作成 . . . . 6 4.3 マイコン内蔵の電圧レギュレータ用外付け部品. . . . 7 4.4 タイマ 1 による割込プログラム . . . . 8 4.5 PWM 制御モジュール . . . . 18 4.6 A/D コンバータモジュール . . . . 27 4.7 DC モータの回転数制御 . . . . 34 参考文献 38第
4
章
8
ピンマイコンによる直流
(DC)
モータ回転数制御
4.1
組み立て
図 4.1: PIC12HV615 を用いた直流 (DC) モータの回転数制御回路 (全体写真) 本章では PIC12HV615 を用いた直流 (DC) モータの回転数制御回路を紹介する.PIC12HV615 は筆者が製作演習付きのパワーエレクトロニクスの講義において使用している PIC マイ コンである.電源に乾電池 4 個を直列 (6[V]) にして用いた場合にはこの高電圧タイプのマイコンが適している.PIC12HV615 の内部では電源用のピンに出力電圧 5 [V] のレギュ レータが接続されていて,ここで 6 [V] の電源電圧を 5 [V] に降圧し,マイコン内の回路 に供給している.外付け回路は抵抗とコンデンサの簡単な回路でよい.充電池 4 個を直 列 (5[V]) とした場合には PIC12F615 を用いればよい.PIC12HV615 と PIC12F615 では ピン配置は全く同じである.プログラムの変更は必要なく,同じものがそのまま使える. PIC12HV615 を用いた直流 (DC) モータの回転数制御回路の製作例を図4.1に示す.そ の拡大写真を図4.2に示す.第 1 章の PIC16F1825 を用いた回路との違いは,マイコンを PIC12HV615 に置き換えたことと,抵抗 R5,コンデンサ C6,切り替えスイッチ SW を 追加したことだけである. 図 4.2: PIC12HV615 を用いた直流 (DC) モータの回転数制御回路 (拡大写真) 立体配線図を図4.3に示す.また,その回路図を図4.4に示す.インバータ回路は第 1 章図 1.3, 1.4 のものと全く同じである.インバータ,DC モータ,回転数検出回路などの 詳細は第 1∼3 章を参照されたい. 乾電池を充電池に置き代え,電圧を 5[V] として,PIC12F615 を用いた場合の回路図を 図4.5に示す.図4.4から,電源を 5 [V] とし,マイコンを PIC12F615 に置き換え,抵抗 R5,コンデンサ C6を取り除いてある.マイコンのプログラムは PIC12HV615 用のもの を変更する必要はない. 図4.6は PIC12HV615(PIC12F615) のピン配置図である.2∼7 番ピンを汎用入出力ポー ト GP5∼GP0 として利用できる.また,3, 5∼7 番ピンは A/D コンバータの入力 AN3∼
図 4.3: PIC12HV615 を用いた直流 (DC) モータの回転数制御回路 立体配線図
AN0 として利用することもできる.PWM 出力は 2, 5 番ピンのいずれかを P1A として, 3, 7 番ピンのいずれかを P1B として利用できる.PICKit3 は 4 番ピン (MCLR),6 番ピ ン (ICSPCLK), 7 番ピン (ICSPDAT) と接続することで利用できる.8 ピンの PIC マイコ ンでフルブリッジインバータの駆動ができるものには PIC12F615 の他には PIC12F1822, PIC12F1840 がある.しかし,12HV タイプでは PIC12HV615 のみのようである (2012 年 12 月時点).
図 4.4: PIC12HV615 を用いた直流 (DC) モータの回転数制御回路図
図 4.6: PIC12HV615(PIC12F615) のピン配置
4.2
プロジェクトの作成
1
図 4.7: プロジェクトの作成
ソフトウェアの作成,マイコンへの書き込みとデバッグには Microchip 社が無償提供 している統合開発環境 MPLAB⃝ IDE (Integrated Development Environment)R を使用す
1MPLAB IDE V8.86 の画面を本稿に掲載するに当たっては,マイクロチップ社の許可を得ています.
る.MPLAB IDE のダウンロード、インストール,MPLAB IDE の立ち上げ,プロジェク トの作成,ソースファイルの作成の詳細は1.2 節を参照されたい.本節では PIC12F1825 とは異なる設定についてのみ述べる. 図4.7はプロジェクトを作成している画面のスナップショットを示す.Select a device のページにて PIC12HV615 を選択している.その他の設定は PIC12F1825 のときと同様 に行えばよい.なお,PIC12HV615(PIC12F615) ではデバッガモードを利用できない.本 章では図 1.17 以降と同様にしてプログラマメニューを選択し,マイコンにプログラムを 書き込んで実行させ,マイコンの動作を確認しながらプログラムを完成させていくこと とする.
4.3
マイコン内蔵の電圧レギュレータ用外付け部品
図4.4の抵抗 R5,コンデンサ C6は PIC12HV615 内蔵の電圧レギュレータ用外付け部品である.データシート (PIC12F615/HV615 Data Sheet) の RSER LIMITING REGISTER によると,R5の上限値 R5M AXと下限値 R5M IN は R5M AX = V U M IN − 5[V] 1.05× (4[mA]+ILOAD) (4.1) R5M IN = V U M AX− 5[V] 0.95× 50[mA] (4.2) により与えられる.V U MIN, V UM AX はそれぞれ電源電圧の最小値と最大値,また,
ILAODはマイコンの最大出力電流である.V U MIN = 5.9 [V], V U MAX = 6.3 [V], また,
ILOAD = 10[mA] (4.3) を仮定すると, R5M AX = 5.9− 5[V] 1.05× (4[mA] + 10[mA]) = 61[Ω] (4.4) R5M IN = 6.3− 5[V] 0.95× 50[mA] = 27[Ω] (4.5) となる.そこで,図4.4では R5 = 50[Ω] としている. コンデンサ C6は,アプリケーションノート AN1035 に上限値の求め方が記載されてい る.AN1035 はマイクロチップ社の Web ページからダウンロードできる.これによると
C6M AXは C6M AX = − 42[ms] R5× ln (2.1 5 ) = − 42× 10 −3 50× ln(2.15 ) = 968[µF ] (4.6) と求められる.図4.4では C6 = 1[µF ] としている.
4.4
タイマ
1
による割込プログラム
図 4.8: タイマ 1,PWM モジュール,A/D コンバータモジュール実験回路の立体配線図 回転数制御に必要な PIC マイコン内のモジュールはタイマ 1,A/D(Analog/Digital) コ ンバータモジュールと PWM 制御モジュールである.本節ではタイマ 1 モジュールとそ の利用法ついて解説する. 図4.8はブレッドボード上に製作した実験回路の立体配線図,図4.9は実験回路の回 路図である.PIC12HV615 を用いて,内蔵のタイマ 1 モジュール,A/D コンバータモ ジュールと PWM 制御モジュールの実験を行うための回路である.主な部品は PIC マイ コン (PIC12HV615),可変抵抗器 V R1,ICSP コネクタとブレッドボードである.可変抵 抗器はマイコンの A/D コンバータへの入力電圧の調整用である.ICSP コネクタはマイ コンへのプログラムの書き込み用であり,本章ではこのコネクタにPICkit3を接続して, プログラムの書き込みを行う.電源には充電池 4 本を使用して,約 6 [V] の電圧を得て いる.図 4.9: タイマ 1,PWM モジュール,A/D コンバータモジュール実験回路図
表 4.1: 部品表
表4.1に PIC マイコン (PIC12HV615, PIC12F615) の価格(平成 24 年 12 月時点) と筆 者の部品購入先を記してある.ただし,送料は含まれていない.いずれもネット通販で ある.
回路内の各部品の詳細,ICSP コネクタと PICKit3 との接続法は第 1 章の 1.3.2 項を参 照されたい.
データシート (PIC12F615/HV615 Data Sheet) のTimer0, 1, 2 Modulesの説明による と,PIC12HV615 には 8 ビットのタイマモジュール (Timer0, 2) と 16 ビットのタイマモ
ジュール (Timer1) がある.本節ではTimer1を用いて,1 [msec] の周期で割り込みを行
うプログラムを示す.図4.10∼図4.16にコンフィギュレーション設定,タイマ 1 による 割り込み処理ルーチン,メインプログラム,タイマ 1 のヘッダファイル,タイマ 1 の設定 関数を示す.マゼンタ色の図説はこのプログラムを収納してあるフォルダ名である.本 稿と同じ Web ページに圧縮ファイルをアップ2してあるので,ダウンロードして試して 2これらのファイルが本書の記述の範囲内では正常に動くことを確認してある.しかし,利用するに当 たっては,全て読者の責任で行ってください.
みられたい. 図 4.10: タイマ 1 による割り込みプログラム(コンフィグ設定)(Timer1 Interrupt) PIC マイコンのプログラムにおいて最初に行うのが,図4.10のインクルードファイルの 設定である.本章で使用しているデバイスは PIC12HV615 であるので, #include < pic12HV615.h > (4.7) によりこのデバイス用のヘッダファイルをインクルードする必要がある.このヘッダフアィ ルは HI-TECH C コンパイラをダウンロード,インストールすると,例えば C:\Program
Files (x86)\HI-TECH Software\PICC\9.83\include の中に自動的に保存される.このヘッ ダファイルにより,データシートの中のレジスタに関する用語を用いて,レジスタへの書き
込み,レジスタからの読み出しができるようになる.ただし,HI-TECH C for PIC10/12/16
User’s Guide(同じく Web ページからダウンロードできる)によると,HI-TECH C コン パイラでは htc.h (4.8) のヘッダファイルを指定することで,個別のデバイスのヘッダファイルを指定しなくて も,デバイスごとのヘッダファイルが自動的にインクルードされる. 本節で新たに導入した設定関数 (図4.16) の引き数の定義がヘッダファイル (図4.15) に 記されている.このヘッダファイルは図4.10のようにプログラムの先頭で次式によりイ ンクルードする.
#include”C :\Program Files(x86)\HI − TECH Software\PICC\9.83
\12F615 12HV615\PIC12F615 Files\pic12f615 s.h”
(4.9)
上式中の pic12f615 s.h が作成したヘッダファイルをである.HI-TECH C コンパイラをダ
9.83 のフォルダが自動生成される.9.83 のフォルダの中に 12F615 12HV615 のフォルダ を作成し,本章のプログラムは全てその中に入れてある.新しいヘッダファイルと新し
い関数は全て\12F615 12HV615\PIC12F615 Files に入れることとする.
ヘッダファイルのインクルードの後に必要な設定がコンフィギュレーションである.こ
の設定の説明はデータシートの CONFIGURATION WORD REGISTER にある.この プログラムでは
CONFIG (FOSC INTOSCIO & WDTE OFF & PWRTE OFF
& MCLRE ON & CP OFF & IOSCFS 8MHz & BOREN OFF); (4.10) により基本設定を行っている.CONFIG の前のアンダーバーは2つである.多くの設定 項目がある中で,本節では FOSC INTOSCIO:内蔵オシレータを使用する.GP4, 5(3, 2 番ピン) は入出力ピンに 設定する. MCLRE ON:MCLRピン (4 番ピン) による強制リセットを可能とする IOSCFS 8MHz:内蔵オシレータの 8MHz 出力を使用する のみ設定している.実験室レベルでは,これで十分である. 図 4.11: クロックのブロック図 図4.11は PIC12HV615 のクロック源のブロック図を示す.上記のコンフィギュレーショ ンにより内蔵オシレータの 8MHz 出力がシステムクロック FOSCとなる.
図 4.12: タイマ 1 による割り込みプログラム(タイマ 1 割り込み処理ルーチン) (Timer1 Interrupt)
図4.12はタイマ 1 による割り込み処理ルーチンである.図 1.36と異なる箇所を朱書き
で示す.timer1 isr(void) の timer1 isr はどのような名前にしてもよいが,ここでは分か りやすく timer1 isr と記している.なお,isrは Interrupt Service Routine の略である.
本項の最初にヘッダファイル pic16f1825.h をインクルードすることにより,データシー
ト (PIC16F1825 Data Sheet) の中のレジスタに関する用語を用いて,レジスタへの書き
込み,レジスタからの読み出しができるようになることを述べた.
GP5 = 1 (4.11)
は,データシートの GPIO REGISTER から分かるように,GPIO レジスタのGP5ビッ
トに 1 を書き込んでいる.これは GP5(PIC12HV615 の 2 番ピン) に 1 を出力する命令で ある.このルーチンの最後では
GP5 = 0 (4.12)
により,RC1 に 0 を出力している.これにより,タイマ 1 による割り込み周期と,この ルーチンの処理に要する時間を計測することができる.
set timer1 count down ini num(0x1EB0); (4.13) は図4.16に定義されているように,TMR1(Timer1 Register) に
の値を書き込む関数である.式 (4.13) では,分かりやすくするためにカウントダウン値 を設定し,set timer1 count down ini num 関数内にてカウントアップの初期値に換算し ている.データシートの SUMMARY OF REGISTERS ASSOCIATED WITH TIMER1 よりタイマ1レジスタは TMR1H,TMR1L の2つの 8 ビットレジスタのペアからなる. データシートの Timer1 Interrupt より,タイマ1はカウントアップされること,その値 は 0xFFFF に達すると次は 0x0000 となることが分かる.タイマ 1 の値は割り込みをかけ た瞬間には 0 となっている.再設定をしないと,タイマ 1 は 0 を初期値としてカウント アップを再開する.後述するようにメインルーチン内にてタイマ 1 のクロックを 8MHz に設定しているので, 0x1F40(16)= 8000(10) (4.15) により,カウントダウンの初期値を 0x1F40 とすればよいことが分かる.実際には 0x1F40 では、割り込み周期Tintは 1 [ms] より少し長くなるため,初期値を 0x1EB0 とし 0 まで のカウントダウンの所要時間を短くして,Tint ≈ 1 [ms] となるようにしている.0x1EB0 の値は試行しながら探した.
clear interrupt flag of timer1(); (4.16)
は,図4.16に定義されているように,PIR1 REGISTER の TMR1IF ビットに 0 を書き込
むことで,タイマ 1 の割り込みフラグを 0 にしている.TMR1IF(Timer1 Interrupt Flag)
は,これが 1 であるとき,タイマ 1 による新たな割り込みを受け付けない.そこで,こ のフラグを 0 とすることにより,タイマ 1 による次の割り込みを受付け可としている.
図 4.13: タイマ 1 による割り込みプログラム(メイン)(Timer1 Interrupt)
と異なる箇所を朱書きで示す.
TRISIO = 0x00; (4.17)
はデータシートの GPIO TRI-STATE REGISTER よりTRISIOレジスタに 0x00 を書き
込んでいる.これにより I/OPORT を出力ポートに設定している.
図 4.14: タイマ 1 のブロック図
set timer1(TMR1 clock source FOSC, T1Clock PreScale 1 1, TMR1 ON,
TMR1 Alternate Clock FOSC); (4.18)
の定義を図4.16に示す.図 1.44と異なる箇所を朱書きで示す.この関数は,以下のように
T1CON(TIMER1 CONTROL REGISTER) レジスタおよびCMCON1(COMPARATOR CONTROL REGISTER 1) レジスタへの書き込みを行い,タイマ 1 の設定を行っている. T1CONbits.TMR1CS = 0b0; (4.19) T1CONbits.T1CKPS = 0b00; (4.20) T1CONbits.TMR1ON = 0b1; (4.21) CMCON1bits.T1ACS = 0b1; (4.22) 式 (4.18) の関数内の引数の定義を図4.15のヘッダファイルに示す.これらの引数は,デー タシートの T1CON レジスタと CMCON1 レジスタの説明をもとに筆者が独自に定義し たものである.図 1.41と異なる箇所を朱書きで示す.図4.14はタイマ 1 のブロック図
Alternate Clock Select bit) に 0b1 を書き込むことで,タイマ 1 にはシステムクロック
FOSC = 8MHz が供給される.TIMER1 CONTROL REGISTER よりTMR1CS(Timer1
Clock Source Select bits) に 0b0 を書き込むことにより,タイマ 1 のクロックソースをシ
ステムクロック (FOSC = 8MHz) に設定している.なお,データシートではFOSC の用語
は CONFIGURATION WORD REGISTER の中の FOSC とシステムクロックの FOSC の両方の意味で用いられているので注意されたい.前者はシステムクロックにどのクロッ ク源を利用するかを選定するためのものである.後者はシステムクロックそのものを指 す.T1CKPS(Timer1 Input Clock Prescale Select bits) に 0b00 を書き込むことで,タイ マ 1 のクロック分周率を 1:1 に設定している.これにより,タイマ 1 はシステムクロック
を分周しないで 8MHz のまま用いる.TMR1ONはタイマ 1 を起動する.
set interrupt by timer1(); (4.23)
の定義を図4.16に示す.この関数は,以下のようにPIE1(PERIPHERAL INTERRUPT
ENABLE REGISTER 1) レジスタおよびINTCON1(INTERRUPT CONTROL
REGIS-TER) レジスタへの書き込みを行い,タイマ 1 による割り込み設定を行っている.
PIE1bits.TMR1IE = 1; (4.24)
INTCONbits.PEIE = 1; (4.25)
INTCONbits.GIE = 1; (4.26)
データシートの PERIPHERAL INTERRUPT ENABLE REGISTER 1 レジスタより
TMR1IE(Timer1 Overflow Interrupt Enable bit) は TMR1 レジスタのカウントアップに よってオーバーフロー (0xFFFF から 0x0000) となったときに割り込みをかけられるよう にする.INTERRUPT CONTROL REGISTER よりPEIE (Peripheral Interrupt Enable bit) は,タイマ,AD コンバータ,PWM 制御などの周辺モジュールからの割り込みを受け付 けられるようにする.また,GIE(Global Interrupt Enable bit) は,同じく INTERRUPT CONTROL REGISTER より,全ての割り込みを受け付けられるようにする.これら 3 つのいずれの設定が欠けても,タイマ 1 による割り込みはできない.なお,SUMMARY OF REGISTERS ASSOCIATED WITH TIMER1 より,TMR1IF ビットは電源投入時に は 0 に初期設定されているので,メインルーチン内でこのビットを 0 に設定する必要は ない.
for(; ; )
図 4.15: タイマ 1 ヘッダファイル T1CON, CMCON1(Timer1 Interrupt) は無限ループである.メインプログラムは何もしない.この間,タイマ 1 による割り込 みにより,タイマ 1 割り込みルーチンが 1 [ms] の周期で起動される. 図4.17は図4.10,4.12,4.13のタイマ 1 による割り込みを行うプログラムのブロック 図を示す.タイマ 1 はクロック源から 8 [MHz] のシステムクロックを受け取り,1 [kHz] の繰り返し周波数でタイマ 1 割り込み処理ルーチンを起動する.このルーチンは処理開 始時に 2 番ピンに1を出力し,処理終了時に 0 を出力する. 図4.18は,図4.10∼4.13のプログラムを PIC12HV615 に書き込み・実行させたときの, GP5(2 番ピン) の電圧波形の計測結果である.横軸は 5 [µs/div] なので,一目盛りが 5 [µs] である.縦軸は 2 [V/div] である.このオシロスコープは周波数カウンタの機能も持って いて,計測結果が画面右下に表示されている.繰り返し周波数は 1.0035 [kHz] であった. また,タイマ 1 割り込みルーチンの処理時間は約 14 [µs] であった.
図 4.16: タイマ 1 の設定関数(Timer1 Interrupt)
図 4.18: タイマ 1 による割り込みの実験波形
4.5
PWM
制御モジュール
第 1 章ではタイマ 1 の割り込みプログラムの次に A/D コンバータモジュールを使用する プログラムを解説した.PIC16F1825 の場合は A/D 変換結果を PICKit3 のデバッグ機能 を利用してパソコン上で読み取ることができた.しかし,PIC12HV615 のデータシートの In-Circuit Debugger の節によると,デバッグには Special debugging adapter が必要であ ると記されている.MPLAB IDE の debugger を起動すると A debug header is required の メッセージが出てくる.無視してデバッグを実行しようとするとエラーが出る.AC162083 という Debug header が要る.本稿ではデバッガの使用は諦めて先に進むことにする.そ こで,A/D コンバータモジュールより先に PWM 制御モジュールを使用するプログラム を解説する. 図4.19はPWM 制御プログラムのブロック図を示す.変数 duty cycle の値により 2, 3 番ピンに出力される PWM 波形を制御する.PWM 制御モジュールはカウンタを必要と する.このカウンタとして,タイマ 2が割り当てられている.データシート (TIMER2 MODULE) よりタイマ 2 は 8 ビットカウンタであり,システムクロックを 1/4 に分周し た FOSC/4 = 2 [MHz] により駆動されると記されている.しかし,PWM 制御モードで はタイマ 2 は 10 ビットカウンタとして機能し,システムクロック FOSC = 8 [MHz] によ り駆動されると解釈した方が,PWM 制御モジュールの動作を理解しやすい.
図 4.20 は PWM 制御モジュールのブロック図 (SIMPLIFIED PWM BLOCK
図 4.19: PWM 制御プログラムのブロック図
常に入力クロックをカウントアップする.このタイマ 2 の上位 8 ビットとPR2 (Timer2
Module Period Register)レジスタ (8 ビットレジスタ) の値が図中下側のComparator(比
較器)により比較され,両者が一致すると比較器は,タイマ 2 の値を 0 に初期化し,R-S フ
リップフロップをセット (Q = 1, Q = 0) し,また,CCPR1H (Capture/Compare/PWM Register 1 High Byte)レジスタ (10 ビットレジスタ)に,CCPR1Lレジスタ (8 ビットレ
ジスタ)の値を上位 8 ビットに,CCP1CON (CCP1 CONTROL REGISTER) レジスタ
のDC1B (2 ビット) の値を下位 2 ビットにそれぞれ転送する.そして,タイマ 2 は再び 0 からカウントアップを始める.図中上側の比較器により TMR2 レジスタの値と CCPR1H レジスタの値が比較され,両者が一致したときに比較器は R-S フリップフロップをリセッ ト (Q = 0, Q = 1) する. 以上の動作のイメージを図4.21に示す.TMR2 レジスタの値が 0 に初期化されたとき, PWM 制御出力であるP1A* = Q = 1, P1B* = Q = 0 とセットされる.TMR2 の値は FOSC によりカウントアップされるので,時間に比例して増加する. TMR2 == CCPR1L× 4 + DC1B (4.28) となったとき,P1A* = Q = 0, P1B* = Q = 1 にリセットされる. TMR2 == PR2× 4 (4.29)
図 4.20: PWM 制御モジュールのブロック図
となったとき,TMR2 = 0,P1A* = 1, P1B* = 0 とセットされる.そして,TMR2 のカウ
ントアップが再開される.以上により,P1A*, P1B*の値の平均値は CCPR1L× 4 + DC1B
の値に比例する.このように P1A*, P1B*の幅(パルス幅と呼ぶ)を制御する手法を
PWM(Pulse Width Modulation:パルス幅変調) 制御法と呼ぶ.TMR2 の三角波の繰り
返し周期 TP W M をPWM 周期と呼ぶ.この逆数をPWM 周波数fP W M = 1/TP W M と呼 ぶ.また,P1A* = 1 の期間を TON とすると δ = TON/TP W Mをデューティ比と呼ぶ FOSC = 8 [MHz] のとき,PR2 = 0x3F とすると,PWM 周期 TP W M は TP W M = 1 FOSC (PR2+1)×4 = 32[µs] (4.30) であり,PWM 周波数は 31.25 [kHz] である.また,デューティ比 δ の分解能は 1/((PR2 + 1)× 4) = 1/256 である. 図4.22は PWM 制御プログラムの割り込み処理ルーチンを示す.図 1.70と異なる箇所 を朱書きで示す.なお,ヘッダファイルのインクルードと CONFIG については図4.10と
同じである.set PWM duty cycle 関数を図4.24に示す.PWM 制御のデューティ比 δ は
duty cycle により設定している.図4.20で述べたように,CCPR1L レジスタは 8 ビット,
DC1B は 2 ビットである.A/D コンバータモジュールの節で述べるように,A/D 変換結
果は 16 ビットレジスタADRES(ADC RESULT REGISTER) レジスタに右寄せ 10 ビッ
トの値が格納される.PWM 周期を
図 4.21: PWM 制御モジュールの動作
と設定して,これが PR2 レジスタに格納され,TMR2 の上位 8 ビットと比較される.すな
わち図4.20の下側の Comparator は TMR2 の値が 0b0011111100 となったときに TMR2
を 0 にクリアし,Q を 1 にセットする.従って,A/D 変換結果は ADRES レジスタの値
をさらに 2 ビット右シフトさせて,上位 8 ビットを図4.20の上側の Comparator にて比
較させるようにすればよい.そこで set PWM duty cycle 関数では
CCP1CONbits.DCB = (a >> 2) & 0b00000011; (4.32) により,duty cycle の下から 2, 3 ビット目を DCB に格納している.これにより,A/D 変 換結果の上位 8 ビットの内の下位 2 ビットを DCB に格納できる.また, CCPR1L = duty cycle >> 4; (4.33) により,duty cycle を右に 4 ビットシフトさせることで,4∼9 ビット目の値を CCP1RL に 格納している.これにより,A/D 変換結果の上位 8 ビットの内の上位 6 ビットを CCPR1L に格納できる. 図4.23は PWM 制御のメインルーチンを示す.図 1.71の PWM 制御モジュールと異な る箇所を朱書きで示す.set PWM 関数の定義を図4.24に示す.図 1.72との違いを朱書 きで示す.また,set timer2 関数の定義を図4.25に示す.この関数は図 1.73の関数と異 なるところはない.引数の定義を図4.26に示す.
PWM 制御モジュールの設定は,CCP1CON レジスタ (CCP1 CONTROL REGISTER)
図 4.22: PWM 制御のプログラム 割り込み処理ルーチン(PWM)
利用するためにはCCP1FCON レジスタの設定を必要とする.
CCP1CONbits.P1M = 0b1; (4.34)
により,P1M(PWM Output Configuration bit)に 0b1 を書き込むことで,P1A, P1B を
利用する設定としている.また,
CCP1CONbits.CCP1M= 0b1100; (4.35)
により,P1A, P1B を正論理 (active high) に設定している.これを
CCP1CONbits.CCP1M = 0b1111; (4.36)
として,P1A, P1B ともに負論理 (active low) に設定すると,図4.21において P1A, P1B
の値は 1, 0 が反転する.
P1A, P2B を出力するピンはそれそれ 2 つのピンの中から選択できる.P1A は 2 番ピ
図 4.23: PWM 制御のプログラム メインルーチン(PWM)
選択はAPFCON(ALTERNATE PIN FUNCTION CONTROL REGISTER) レジスタに
より行う. APFCONbits.P1ASEL= 0b1; (4.37) により,P1A を GP5(2 番ピン) に割り当て, APFCONbits.P1BSEL= 0b1; (4.38) により,P1B を GP4(3 番ピン) に割り当てている. PWM 制御用のタイマにはタイマ 2 が割り当てられている.図4.23の set timer2 関数 はタイマ 2 の設定をおこなう.タイマ 1 の設定との大きな違いは,タイマ 1 ではクロック 源を選択できるのに対して,タイマ 2 のクロック源はシステムクロック FOSC に限定さ れている.選択できるのは分周比だけである.図4.20で説明したように,TMR2 レジス タ (10 ビット)の上位 8 ビットが PR2 レジスタの値と比較される.データシートの PWM PERIOD より,PR2(Timer2 Module Period Register)を
PR2 = 0x3F (4.39)
とすると,PWM 周波数fP W Mは
図 4.24: PWM モジュールの設定関数(PWM)
と求められる.逆に,32.15 [kHz] の fP W Mを得るためには,
PR2 = 31.25[kHz]/(FOSC/4)− 1 = 31.25[kHz]/8[MHz]/4 − 1 = 63 (4.41) と設定すればよい.
なお,図4.24には図 3.20と同様にデッドタイムを設けることができるが,FUNCTTION
REGISTER SUMMARY BANK 0によると,デッドタイム設定用のPWM1CONレジス
タの電源投入時の値は 0 であるので,本章では設定を省略している.
図4.28は,図4.9の実験回路に PICkit3 を接続し,MPLAB により以上のプログラムを
PIC12HV615 に書き込んでマイコンにプログラム実行をさせたときの,2, 3 番ピンのPWM
制御出力電圧vP1A∗, vP1B∗の実験波形例を示す.duty cycle = 0x1FF と設定したことで,
デューティ比がほぼ 0.5 の PWM 波形が得られているまた,PWM 周波数 fP W M ≈ 31.33
図 4.25: タイマ 2 の設定関数(PWM)
図 4.27: PWM モジュール用のヘッダファイル (つづき)(PWM)
4.6
A/D
コンバータモジュール
図 4.29: A/D コンバータプログラムのブロック図 図4.29は,図4.19の PWM 制御プログラムのブロック図にA/D(Analog/Digital) コ ンバータモジュールを追加したブロック図を示す.5 番ピンからデューティ比の指令値を 入力して,P1A*, P1B*から出力される PWM 波形のデューティ比を制御する.図4.9の 実験回路を用いる.この回路では可変抵抗 V R1より PIC12HV615 の 5 番ピンに可変のア ナログ電圧を印加している.図4.29において,タイマ 1 により 1 [ms] ごとに割り込みが かかり,割り込み処理ルーチンはその度に A/D コンバータを起動する.A/D コンバータは 5 番ピンからアナログ電圧信号を読み込み,ADRES(ADC RESULT REGISTER)
レジスタに変換結果を格納する.割り込み処理ルーチンは A/D 変換終了を受けて,変数
duty cycle に ADRES レジスタの内容を読み出す.A/D コンバータの動作クロックはシス
テムクロック (FOSC = 8 [MHz]) を 16 分周して 500[kHz] を用いている.これは,データ シートの ADC CLOCK PERIOD (TAD) VS. DEVICE OPERATING FREQUENCIES
より,システムクロック (FOSC) が 8[MHz] のとき推奨周期が 2 or 4[µs](推奨クロックが
500 or 250[kHz]) であることによる.また,A/D コンバータの基準電圧は電源電圧 VDD
としている.
作成したプログラムを図4.30, 図4.31に示す.図には図 1.54,1.55のプログラムに対
図 4.30: A/D コンバータのプログラム 割り込み処理ルーチン(AD Conv)
モニタリング用の出力を GP1 に割り当てている.
start ad conversion(); (4.42)
の関数の定義を図4.32に示す.この関数内では
ADCON0bits.GO = 0b1 (4.43)
により,A/D 変換を開始させている.データシートの ANALOG-TO-DIGITAL
CON-VERSION TAD CYCLES よりこの A/D 変換にはほぼ 12×TAD サイクルを要すると
ある.TADは A/D コンバータのクロック周期であり,図4.31 のメインルーチン内の
set AD Converter() 関数により,TAD = 2[µs] と設定している.よって,ADRES レジ スタの値を読み出すには A/D 変換を開始させてから 24 [µs] は待たなければならない. ADCON0bits.GO のビットは A/D 変換終了時に 0 にリセットされるようになっている.
そこで,
while(ADCON0bits.GO) (4.44)
により,A/D 変換終了まで何の処理もしないで待つ設定としている.A/D 変換終了後に は read result of ad conversion() 関数により,ADRES レジスタの値を duty cycle に読み
出している.なお,図 1.54では PWM 制御を行っていないので set PWM duty cycle 関
数が無い.
図 4.31: A/D コンバータのプログラム メインルーチン(AD Conv)
メインルーチンでは,
TRISIO = 0x04 = 0b0000 0100 (4.45)
により,5 番ピン (GP2/AN2) を入力ポートに設定している.A/D コンバータモジュール
の設定は
set AD Converter(right justified, pos ref VDD, select AN2,
図 4.32: A/D コンバータの設定関数 (set ad conver.c)(AD Conv)
により行っている.この関数の定義は図4.32に示してある.この関数の引数を定義してい
るヘッダファイルを図4.33,4.34に示す.また,図4.35に A/D コンバータモジュールのブ
ロック図 (データシート ADC BLOCK DIAGRAM) を示す.このモジュールの設定は主に
ADCON0 (A/D CONTROL REGISTER 0), ANSEL(ANALOG SELECT REGISTER) レジスタにより行う.図中の経路は式 (4.46) の関数の設定による.
A/D コンバータは 10 ピットであり,変換結果を格納する ADRES レジスタは 16 ビッ トである.そこで,ADFM(A/D Conversion Result Format Select bit)により,ADRES
レジスタの左側に寄せて上位 10 ビットに格納するか,右側に寄せて下位 10 ビットに格
納するかを選択できる.right justifiedを選択することで,ADFM = 1 とし,右寄せに設
定している.10-BIT A/D CONVERSION FORMAT によるとこの設定では ADRES レ ジスタの上位 6 ビットは 0 となる.
図 4.33: A/D コンバータのヘッダファイル(AD Conv)
電圧の+側を VDD に設定している.
select AN2により,CHS(Analog Channel Select bits) = 0b010 とし,A/D コンバータ の入力を AN2(5 番ピン) に設定している.
AD ONにより,ADON(ADC Enable bit)= 1 とし,A/D コンバータモジュールを起 動する.
clock 1 16, GP2 ANinput はANSELレジスタ内のビットの設定に関する引数である.
clock 1 16により,A/D Conversion Clock Select bits)= 0b101 とし,
TAD = FOSC1 16 = 8[MHz]1 16 = 2[µs] (4.47) と設定している.
GP2 ANinputにより,ANS(Analog Select Between Analog or Digital Function on Pins bits) = 0b0100 とし,GP2 をアナログ入力ピンに設定している.
図 4.34: A/D コンバータのヘッダファイル(つづき)(AD Conv)
図 4.36: A/D コンバータモジュールの入力電圧と PWM 出力電圧
図4.36は A/D コンバータモジュールの入力電圧 vin(5 番ピン) と PWM 出力電圧 vP 1A∗(2
番ピン),vP 1B∗(3 番ピン) の波形例である.同図 (a) は vinが低い場合であり,(b) は高い
4.7
DC
モータの回転数制御
図 4.37: DC モータの回転数制御プログラムのブロック図
以上で DC モータ回転数制御回路のプログラミングと実験の準備が整った. 図4.37
は作成したプログラムのブロック図を示す.図4.29の PWM コンバータプログラムのブ
ロック図に対して新たに追加した箇所を朱書きで示す.図4.4に示すように回転数指令値
ωcomを 5 番ピンに入力し,回転数検出値ωdetを 7 番ピンに入力している.PIC12HF(F)615
内には A/D コンバータは 1 つしかないので,入力を切り替えてそれぞれの電圧を検出す
る.変換結果は ωcomを w com に,ωdetを w det にそれぞれ格納する.両者の差を PI 制
御器の入力とし,出力を電圧指令値 v com に格納する.図4.4において,ICSP コネクタ を通して PICKit3 によりプログラムを書き込む場合には,切り替えスイッチ SW をオフ とし,プログラムを実行して DC モータの回転数制御を行っているときには SW をオン とする. 図4.38∼図4.41に DC モータの回転数制御用プログラムを示す.これらは図 1.104, 1.105 に対して
#define XTAL FREQ 8000000 (4.48)
図 4.38: DC モータ回転数制御プログラム 変数宣言(DC Motor Control) 図 4.39: DC モータ回転数制御プログラム 割り込み処理ルーチン)(DC Motor Control) 図4.42は図4.1の DC モータの回転数制御回路による実験結果を示す.制御プログラ ムは図4.38∼4.41のプログラムを用い,Kp = 32, Kidt = 1 の場合である.図 1.107より も速い応答が得られている.主な原因は第 1 章執筆時の DC モータが不調となり,本章 で新品に交換したことが挙げられる.
図 4.40: DC モータ回転数制御プログラム 設定関数)(DC Motor Control)
参考文献
2012 年 11 月 著者 古橋 武 名古屋大学工学研究科情報・通信工学専攻 本稿の内容は,著作権法上で認められている例外を除き,著者の許可なく複写するこ とはできません.