DS00937A_JP

Similar documents
21942b_Japanese.book

PIC10(L)F320/322 Product Brief

AN1019 そのような配慮として 下記の基本的ガイドラインに沿って 可能な限り 環境条件または動作条件を制限する必要があります アプリケーションの温度を可能な限り下げる アプリケーションの電圧 ( または EEPROM の VCC 電圧 ) を可能な限り下げる 書き込みバイト数を可能な限り少なくす

PIC24F Family Reference Manual, Section 9 Watchdog Timer (WDT)

MCP42XXX Evaluation Board User’s Guide

ヒント 2: CWG を使ったハーフブリッジまたはフルブリッジ回路の駆動 ハーフブリッジまたはフルブリッジモータ回路を駆動するために多ピンマイクロコントローラは必ずしも必要ではありません PWM モジュールと CWG モジュールを組み合わせると 少ピンデバイスでも駆動できます 図 2: CWG によ

51814a0910.indd

SMSC LAN8700 Datasheet

開発ツール WINDOWS 2000 でのインストールに関する問題 MPLAB ICD 2 USB ドライバの読み込み時に問題が発生する場合 Microsoft Windows Update サイトのパッチが役立つかもしれません このパッチは Windows 2000 SP4 に更新したユーザに適用

PICF/LF1847 表 1: デバイス PICF/LF1847 ファミリの各製品 プログラムメモリフラッシュ ( ワード ) データ EEPROM ( バイト ) SRAM ( バイト ) I/O 10 ビット A/D (ch) タイマ 8/ ビット EUSART MSSP CCP/ ECCP

21919b_Japanese.book

RI_JTAG.book

ご注意 : この日本語版ドキュメントは 参考資料としてご使用の上 最新情報につきましては 必ず英語版オリジナルをご参照いただきますようお願いします PIC12F1822/16F182X 8/14/20 ピン 8 ビットフラッシュマイクロコントローラ製品概要 高性能 RISC CPU: 命令数は 49

表 1: ファミリの各製品 デバイス (1) プログラムメモリ バイトワード SRAM ( バイト ) データメモリ データ EEPROM ( バイト ) ピン数 I/O 10 ビット A/D チャンネル コンパレータ CCP/ ECCP BOR/LVD CTMU MSSP EUSART タイマ 8

Manchester Decoder Using the CLC and NCO

DS70172A_JP

SMSC LAN8700 Datasheet

DS01202B_JP

00763b.book

Microsoft PowerPoint - 6.PID制御.pptx

PIC24F Family Reference Manual Section 9 WDT

Microchip Capacitive Proximity Design Guide

B MPLAB XC HPA Renewal Instructions.book

a.fm

PowerPoint プレゼンテーション

DALI App. Note

DS01149C_JP

PIC18F23K20/24K20/25K20/26K20/43K20/44K20/45K20/46K20 Data Sheet

AN2754 USB-to-I2C Bridging with USB7002, USB7050, USB7051, and USB7052 Hubs

USB.mif

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

Polycom RealConnect for Microsoft Office 365

Section 15. Input Capture

Microsoft Word - Per-Site_ActiveX_Controls

TB3179 メモリ保護ユニット (MPU) の設定方法 はじめに メモリ保護ユニット (MPU) は Cortex -M7 コアがメモリ保護のために備えているオプションのコンポーネントです MPU はメモリマップを分割し それぞれにアクセス権とルールを設定します 本書では Cortex-M7 ベー

QNAP vsphere Client 用プラグイン : ユーザーガイド 2012 年 12 月更新 QNAP Systems, Inc. All Rights Reserved. 1

00681a.fm

Sensorless Field Oriented Control (FOC) of an AC Induction (ACIM) Using Field Weakening

a.fm

Silk Central Connect 15.5 リリースノート

Notes and Points for TMPR454 Flash memory

Microsoft Word - Circular-Memory-Leak_Mitigation

InfiniDB最小推奨仕様ガイド

S1C17 Family Application Note S1C17 シリーズ PORT 多重割り込みアプリケーションノート Rev.1.0

スライド 1

Multi-Tool Design Advisory

Cortex -M キャッシュコントローラを使って決定論的コード性能を達成する方法 TB3186 はじめに マイクロコントローラベース (MCU) の組み込みアプリケーションでは ソフトウェアは不揮発性メモリに保存して実行します この不揮発性メモリとは 通常はフラッシュメモリです フラッシュメモリは

USBドライバインストールマニュアル [Windows Vista/Windows 7]

Sample Rate Conversion Library for PIC32 User’s Guide

Reduction of the High-Frequency Switching Noise in the MCP16301 High-Voltage Buck Converter

ソフトウェア基礎技術研修

Using RN4020 for Bluetooth Smart Communication.fm

MODBUS ユーザーズマニュアル 페이지 1 / 23

KDDI Smart Mobile Safety Manager Mac OS キッティングマニュアル 最終更新日 2019 年 4 月 25 日 Document ver1.1 (Web サイト ver.9.6.0)

始める スタート > 全てのプログラム > Cypress > PSoC Creator 2.0 > PSoC Creator 2.0 をクリックします プロジェクトを作成する / 開く Start Page の "Create New Project" をクリックし 要求されたプロジェクト情報を入

MPLAB Code Configurator User’s Guide

A.book

CMOS リニアイメージセンサ用駆動回路 C CMOS リニアイメージセンサ S 等用 C は当社製 CMOSリニアイメージセンサ S 等用に開発された駆動回路です USB 2.0インターフェースを用いて C と PCを接続

TB3172 Cortex -M7 マイクロコントローラの XDMAC を使ってオーディオアプリケーションにピンポンバッファリングを実装する方法 はじめに オーディオシステムアプリケーションでは リアルタイムシステムに関する代表的なプロデューサ / コンシューマ問題が発生する可能性があります タイミ

A.book

Crucial Client SSDでのファームウェアアップデート手順

Oracle Enterprise Linux 5における認証

Microsoft PowerPoint - 【最終提出版】 MATLAB_EXPO2014講演資料_ルネサス菅原.pptx

RW-4040 導入説明書 Windows 7 用 2017 年 7 月 シャープ株式会社

AN1817 Using a Hardware or Software CRC with Enhanced Core PIC16F1XXX in Class B Applications

Microsoft Word - ESX_Restore_R15.docx

Microsoft Word - 実験テキスト2005.doc

Oracle Web CacheによるOracle WebCenter Spacesパフォーマンスの向上

Microsoft Word - SKP2VRマニュアルJA校了版Fin

Microsoft Word - Improved_Protected-Mode_API_Support

Crucial M.2 SSD Install Guide JA

Microsoft Word - Manage_Add-ons

評価ボード キット 開発ツールご使用上の注意事項 1. 本評価ボード キット 開発ツールは お客様での技術的評価 動作の確認および開発のみに用いられることを想定し設計されています それらの技術評価 開発等の目的以外には使用しないで下さい 本品は 完成品に対する設計品質に適合していません 2. 本評価

Microsoft Word - asbu_r15_wp_hyper-v_backup.docx

パソコン決裁7 捺印ツールインストールマニュアル

Microsoft Word - TC4011BP_BF_BFT_J_P8_060601_.doc

QuartusII SOPC_Builderで利用できるGPIF-AVALONブリッジとは?

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

免責事項 Samsung Electronics は 製品 情報 および仕様を予告なく変更する権利を留保します 本書に記載されている製品および仕様は 参照のみを目的としています 本書に記載されているすべての情報は 現状有姿 のまま 何らの保証もない条件で提供されます 本書および本書に記載されているす

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

Microsoft PowerPoint - 1.プロセス制御の概要.pptx

MS916 バッチ操作ガイド FW バージョン 0.52 向け バッチ操作の基本 MS916 のバッチ操作について バッチ操作では 読取ったバーコードデータはすべて 不揮発性のメモリ (1MB ROM JAN-13 約 50,000 件 ) に保存されます メモリに保存されたデータは任意のタイミング

Using L1 Cache on PIC32MZ Devices.recover.fm

2. 簡単セットアップ方法概要 SRRD のインストールが完了すると メイン ( 初期 ) 画面が表示されます また SRRD を終了しても 通常はタスクバーにアイコン ( 羊のアイコン ) が残り このアイコンをクリックすると メイン画面が表示されます * RAM ディスクの作成 RAM ディスク

BOM for Windows Ver

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

OpenLAB Data Store Release Notes

Using VectorCAST/C++ with Test Driven Development

各 SAQ (v3.2.1 版 ) を適用すべきカード情報取扱い形態の説明 / JCDSC 各 SAQ の 開始する前に の部分を抽出したものです カード情報の取り扱い形態が詳しく書かれていますから 自社の業務形態に適合する SAQ タイプを検討してください 適合しない部分が少し

アカウント情報連携システム 操作マニュアル(一般ユーザー編)


目次 はじめに... 3 仮想化環境上の仮想マシン保護方法... 4 ( 参考 )Agent for Virtual Machines での仮想マシンのバックアップ... 8 まとめ 改訂履歴 2011/04 初版リリース 2012/10 第 2 版リリース このドキュメントに含まれる特

Microsoft Word - TC4013BP_BF_J_P9_060601_.doc

RW-5100 導入説明書 Windows7 用 2017 年 7 月 シャープ株式会社

Oracle Application Expressの機能の最大活用-インタラクティブ・レポート

インテル(R) Visual Fortran コンパイラ 10.0

RDX へのバックアップ 3 ベアメタル復旧手順書 2014 年 11 月

Sound Blaster Zシリーズ

1. はじめに 本書は Wind ows10 がインストールされたPC を大量に準備する際のいくつかの手順について 検証した結果をまとめたものになります 本書の情報は 2018 年 3 月時点のものです 本書に掲載されている内容は 弊社の検証環境での結果であり すべての環境下で動作することを保証する

Studuinoプログラミング環境

Transcription:

PIC18 MCU の使用による PID コントローラの実装 Author: はじめに Chris Valenti Microchip Technology Inc. 1700 年代の後期から 連続プロセスはフィードバックループによって制御されてきました 1788 年にジェームスワットはスチームエンジンの速度制御にフライボールガバナーを使用しました Taylor Instrument 社は 1940 年に最初のフル機能型 PID(Proportional: 比例 Integral: 積分 Derivative: 微分 ) コントローラを実装しました ジェームスワット以来 フィードバック制御は大きく発展しましたが 基本方式とシステム要素は変わっていません フィードバックシステムにはいくつかの要素がありますが 議論のために 以下に示す説明用のモデルとして家庭の温暖用温度制御システムを取り上げます プラント システムの物理的な加熱および冷却を行う部分 センサー プラント内の変数を測定するデバイス ( 温度を測定するサーミスタ ) セットポイント 電圧に変換してプロセスの駆動に使用する特定の値 ( 例 : 70 ) 誤差信号 プラントの応答と希望の応答 ( セットポイント ) との差分 家庭ではサーモスタットは 70 に設定されますが 温度は実際には 65 であり したがってエラーは 5 ( エラー = セットポイント - 測定値 ) となります 妨害 これらは普通に起こり得るプラントへの望ましくない入力で 温度が直ぐに低下しその結果 ヒータが ON します コントローラ 意図的に最後にしましたが これは制御システムで最も重要な要素です コントローラはいくつかの役割を担い 物理的および非物理的要素のすべてを接続するリンクとなります コントローラはプラントのセンサーの出力信号を測定し その信号を処理した後 信号測定とセットポイントからエラーを求めます センサーデータが収集されて処理された後 その結果は PID 値を見出すために使われなければならず その後 PID 値はエラー補正のためにプラントに送出されなければなりません これらのすべてが起こる速度はコントローラの処理能力に依存します この処理能力が問題となるかどうかはプラントの応答特性に応じて異なります コントローラの処理能力に関し 温度制御システムはモーター制御システムに比べてさほど厳しくありません 図 1 にフィードバック制御システムの基本ブロック図を示します 図 1: フィードバック制御ループ セットポイント エラー コントローラ出力 プロセス変数 コントローラ プラント + フィードバック 2004 Microchip Technology Inc. DS00937A- ページ 1

目的 このアプリケーションノートの目的は次の通りです PID コントローラの 3 つの要素 比例 積分 微分について詳細に論じる PIC18 デバイスのファームウェアによる PID ルーチンを論じる 各種のシステムに適合させる柔軟性を備え しかも後に個別にチューニングできるファームウェアベースの PID の実装を論じる 実装を終えた後 PID のチューニングの詳細を論じる ソースコードの概要 先に進む前に PID ソースコードの構成法を論じます PID をファームウェアで実装する特別な方法はありません このアプリケーションノートで論じる方法は多くの可能性の中の一部について触れるだけです PID ルーチンはモジュール形式で構成されており 既存のファームウェアに組み込むようになっており PID ルーチンでは 8 ビットまたは 16 ビットのエラー値 ( 希望のプラント応答 - 測定されたプラントの応答 ) が渡されます したがって 実際のエラー値は PID ルーチンの外で計算されます 必要に応じて この計算を PID ルーチン内で行えるように プログラムを容易に変更できます PID は 2 つの方法 0 ~ 100%(8 ビット ) 範囲の割合 または 0 ~ 4000(16 ビット ) 範囲のいずれかでエラーを受け取るように構成できます このオプションは PID 変数宣言とともに PID ソースコードの先頭で #define ステートメントによって 構成されます 比例 積分 および微分ゲインはすべて 0 ~ 15 範囲の値を備えています 分解能を増やすために ゲインを 8 ビット ( 最大 255) で 16 倍にスケールされます 図 2 に メインアプリケーションコードで PID ルーチンがどのように実装されるかを一般的な流れで示します 符号付き数値を扱うために 2 通りの方法を考えました 最初の方法は PID 計算のすべての処理に 符号付き算術ルーチンを使用することでした 2 番目の方法は符号なし算術ルーチンを使用して 符号ビットをステータスレジスタに置く方法でした この場合 後者の方法が実装されました 符号ビットを保持する必要があるのは次の 5 個の変数です error a_error p_error d_error pid_error これらの符号ビットはすべて pid_stat1 レジスタ ( レジスタ 1 を参照 ) に保存されます PID のステータスビットはすべてレジスタ 1 およびレジスタ 2 に示されていますが ユーザーはエラーの符号ビット (err_sign) および PID の最終結果の符合ビット (pid_sign) にのみ注意を払う必要があります err_sign ビットは error とともに PID ルーチンに挿入されます ユーザーは pid_sign ビットをチェックしてプラントをどちらの方向に駆動しなければならないかを決定します 図 2: PID ファームウェアの実装 スタートアプリケーションの初期化 PIDINITIALIZE の呼び出し ISR(PID コード付き ) メインアプリケーションコード... コード...( エラーを計算 ) ERROR0:ERROR1 PIDMAIN の呼び出し PID_OUT0:PID_OUT2 コード...(PID の結果をプラントに適用 ) コード... エンド DS00937A- ページ 2 2004 Microchip Technology Inc.

ファームウェアの変数と定数 表 1 に このアプリケーションノートで論じられるファームウェアの変数と定数 およびその定義のリストを示します 表 1: ファームウェアの変数と定数 変数 / 定数 タイプ 定義 error0:error1 エラー変数 16 ビット変数 セットポイントと測定されたプラント出力との差分 a_error0:a_error1 エラー変数 16 ビット変数 過去のエラーのすべての和をとった累積エラー d_error0:d_error1 エラー変数 16 ビット変数 error0:error1 と p_error0:p_error1 との差分 p_error0:p_error1 エラー変数 16 ビット変数 最後のエラー値 a_err_1_lim エラー変数 累積エラーリミットを定義する 8 ビットの定数 a_err_2_lim エラー変数 累積エラーリミットを定義する 8 ビットの定数 kd ゲイン 8 ビット変数 微分ゲイン 最大 = 15(16 レベル ) ki ゲイン 8 ビット変数 積分ゲイン 最大 = 15(16 レベル ) kp ゲイン 8 ビット変数 比例ゲイン 最大 = 15(16 レベル ) pid_stat1 ステータスレジス 8 ビット変数 ステータスビットレジスタ ( レジスタ 1 参照 ) タ pid_stat2 ステータスレジス 8 ビット変数 ステータスビットレジスタ ( レジスタ 2 参照 ) タ deriv0:deriv2 項 24 ビット変数 微分項の値 integ0:integ2 項 24 ビット変数 積分項の値 pid_out0:pid_out2 項 24 ビット変数 PID 結果の最終値 prop0:prop2 項 24 ビット変数 比例項の値 timer1_hi タイムベース TMR1H レジスタにロードされる 8 ビット定数 timer1_lo タイムベース TMR1L レジスタにロードされる 8 ビット定数 注 : 16 ビット変数では 最初の変数が最上位バイト (MSB) 2 番目の変数が最下位バイト (LSB) です 例えば 変数 error0:error1 では error0 は MSB の 8 ビットであり error1 は LSB の 8 ビットです 24 ビット変数では 最初の変数が MSB 最後の変数が LSB です 例えば 変数 pid_out0:pid_out2 では pid_out0 は MSB の 8 ビットであり pid_out2 は LSB の 8 ビットです 2004 Microchip Technology Inc. DS00937A- ページ 3

データレジスタ pid_stat1 と pid_stat2 のデータレジスタには個別の PID ステータスビットが格納されます 以下に 2 つのレジスタについて簡単なビットの説明とその関連値を示します REGISTER 1: pid_stat1 データレジスタ pid_sign d_err_sign mag p_err_sign a_err_sign err_sign a_err_zero err_zero ビット 7 ビット 0 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 pid_sign: 最終の PID 結果の符合を示す 1 = 結果は正であった 0 = 結果は負であった d_err_sign: 微分項の符号を示す 1 = 結果は正であった 0 = 結果は負であった mag: どちらの変数 (AARGB または BARGB)+ が大きいかを示す 1 = 結果は AARGB であった 0 = 結果は BARGB であった p_err_sign: 前のエラーの符号を示す 1 = 結果は正であった 0 = 結果は負であった a_err_sign: 累積エラーの符号を示す 1 = 結果は正であった 0 = 結果は負であった err_sign: エラー (PID への入力 ) の符号を示す 1 = 結果は正であった 0 = 結果は負であった a_err_zero: 累積エラーがゼロに等しいかどうかを示す 1 = 結果はゼロであった 0 = 結果はゼロでなかった err_zero: エラーがゼロに等しいかどうかを示す 1 = 結果はゼロであった 0 = 結果はゼロでなかった REGISTER 2: pid_stat2 データレジスタ d_err_z ビット 7 ビット 0 ビット 7-3, 1-0 ビット 2 未実装 d_err_z: データエラーがゼロに等しいかどうかを示す 1 = 結果はゼロであった 0 = 結果はゼロでなかった DS00937A- ページ 4 2004 Microchip Technology Inc.

PID ルーチンのフローチャート 図 3 と図 4( 次ページを参照 ) に PID メインルーチン機能と PID 割り込みサービスルーチン (ISR) 機能のフローチャートを示します PID メインルーチンは error0:error1 変数 および pid_stat1 のエラー符号ビットを更新するメインアプリケーションコードから呼び出すようになっています PID メインルーチンに入ると PID 値が計算され て pid_out0:pid_out2 変数に格納され 符号ビットは pid_stat1 に格納されます pid_out0:pid_out2 の値は プラントに適用できるように アプリケーションコードによって正しい値に変換されます PID ISR はロケーション 0x0008 にある PIC18 デバイスの高優先順位の割り込み用に構成されます この ISR 内の命令は既存の ISR に置くか またはそのままとすることができ アプリケーションに組み込まれます 図 3: error0:error1 メイン PID ルーチン (PIDMain) エラーは pid_stat1 にあるエラー符号ビットとともにメインアプリケーションコードから PID ルーチンへ渡されます error = 0? NO YES PID 操作は必要ありません メインアプリケーションコードに戻ってください 比例項を計算 比例ゲイン * error0:error1 a_error0:a_error1 積分項を計算 積分ゲイン * a_error0:a_error1 微分項を計算 微分ゲイン * d_error0:d_error1 GetPidResult に進む Prop + Integ 最終の PID 結果は pid_stat1 にある符号とともにメインアプリケーションコードに送られます (Prop + Integ) + Deriv スケールダウン (Prop + Integ + Deriv) 最終 PID 値を pid_out0:pid_out2 に置く pid_out0:pid_out2 2004 Microchip Technology Inc. DS00937A- ページ 5

図 4: PID 割り込みルーチン (PidInterrupt) 高優先順位の割り込みが発生 タイマー 1 の割り込みが発生したか? YES NO RETFIE エラー = 0? YES RETURN NO コンテキストのセーブ算術変数 (1) GetA_Error を呼び出す error + a_error a_error = 0? NO a_error のリミットを超えたか? YES YES NO RETURN a_error リミットをリストア deriv_count = 0? YES GetDeltaError を呼び出す YES d_error = 0? Set d_err_z bit NO NO RETURN 再ロード T1 フラグ TMR1H:TMR1L ををクリア 算術変数をリストア (1) RETURN 注意 1: これらの命令はオプションであり ISR の構成方法に依存します このアプリケーションノートで参照され る ISR コードはコンテキストのセーブ / リストアを用いて設定され メインアプリケーションコードの ISR 内にあります DS00937A- ページ 6 2004 Microchip Technology Inc.

比例 比例項は 3 つの内で最も単純であり 同時にフィードバックシステムで最も一般的に採用されている制御技術です 比例ゲイン (kp) はエラーに乗算されます このアプリケーションノートでは このエラーは 16 ビット値の error0:error1 を表します システムに加えられる補正量は このエラーに直接比例します ゲインが増加するにつれて プラントに適用される補正もアグレッシブになります このタイプのコントローラはエラーを小さくするために一般的に使用されていますが エラーをゼロにできず 定常エラーが残ります このため システムによっては比例制御だけでは十分でないことから 積分制御と微分制御が単独に または一緒に加わります (PI PD PID コントローラなど ) 実装 これまで述べたように 比例は最も単純な項です エラーは比例ゲインで乗算されます (error0:error1 * kp) これは 16 * 16 の乗算ルーチンによって行われます その結果は 24 ビット変数の prop0:prop2 に格納されます. この値は プラントに適用するの必要な全体の値を計算するために 後でコード内で使用されます EQUATION 1: 積分 比例項 prop0:prop2 = kp * error0:error1 現在のエラーに注目する比例制御と異なり 積分制御は過去のエラーについて考慮します このため 累積エラー ( 過去のエラーすべての和 ) を用いて積分項を計算しますが これは一定の時間間隔で行われます 基本的には 一定の時間が経過するごとに その時点におけるエラーが a_error 変数に加算されます 温度システムはモーターシステムよりも長いサンプル 期間を必要としますが これは温度制御環境では応答が遅いためです 温度システムで積分サンプル期間が速すぎる場合 累積エラーが早く加算されすぎて システムで応答時間が得られず 安定化できません 積分制御において さらに考慮すべき要素に ワインドアップ があります ワインドアップはプラント出力が飽和して累積エラーが増え続ける場合に起こります この現象は累積エラーに制限を設けて回避できます また プラント出力が飽和している場合 積分項を実行しないことで回避することもできます システム内に不安定状態を作り出して発振を起こす他の特性に過剰ゲインがあります 最良の全体値を見出すためには あらゆる起こり得る事態に対して積分ゲインを完全に試験しなければなりません すなわち 累積エラーが増加すると プラントに積分項がより大きな影響を与えるということです 応答の遅いシステムでは これがプラントに送られる値を支配することになります 実装積分項を得るためには 累積エラーを検索しなければなりません 累積エラー (a_error0:a_error2) は過去のエラーの和です このため 積分は補正のためにシステム履歴をチェックします a_error を累積する方法の詳細は表 2 を参照して下さい PID ルーチンがエラーを受信するごとに そのエラーは累積エラー変数に加算されたり しなかったりします これは Timer1 のオーバーフローレートに依存します Timer1 がオーバーフローすると その時点のエラーが累積エラー変数に加算されます Timer1 のオーバーフローレートは割り込みによって駆動され 高優先順位の割り込みとして構成されています TMR1H:TMR1L レジスタには 定数の timer1_hi と timer1_loによって決定される値がロードされます これらの定数値はプラントの応答によって決めなければなりません 累積エラーは積分ゲインによって乗算 (a_error0:a_error2 * ki) され その結果は integ0:integ2 に格納されます 表 2: a_error 累積の例 時間 エラー Timer1 のオーバーフロー 累積エラー t = n 10% No x% t = n + 1 8% No x% t = n + 2 12% Yes x + 12% t = n + 3 9% No (x% + 12%) t = n + 4 6% No (x% + 12%) t = n + 5 4% Yes (x% + 12%) + 4% t = n +... 2004 Microchip Technology Inc. DS00937A- ページ 7

積分ワインドアップを避けるために 累積エラーリミットがインストールされています (a_err_1_lim:a_err_2_lim) 累積エラーが計算されると その結果はリミット変数と比較されます 計算された値がリミット値を超えると 累積エラーはコードの先頭でユーザーが変数定義によって決定した値に等しくされます EQUATION 2: 積分項 integ0:integ2 = ki * a_error0:a_error1 (a_error0:a_error1 = error0:error1 + error0:error1 + error0:error1) 微分 これまで述べたように 比例項は現在のエラーに作用し 積分項は過去のエラーに作用し そして微分項はシステムの将来応答を予測するために現在と過去のエラーに作用します 微分項はプラント出力がそのセットポイントから変化している速度に基づいて調整されます このタイプの制御で注目すべき特性は エラーが一定であるか最大リミットになっていると その効果が最小になることです システムによっては 比例と積分 ( または いずれか ) で十分な制御が得られない場合があります これらのシステムでは 比例項と積分項を微分項に加えると 制御要件を完全に満たすことができます 実装微分項は積分項と同じ方法で計算されます 微分ルーチンは 微分項がシステムの変化速度に基づくことを考慮して d_error を計算します これは現在のエラーと前のエラーとの差分になります この計算が行われる速度は Timer1 のオーバーフローに依存します 微分項はシステムのエラーに作用しているときは極端にアグレッシブになります この代わりに エラーからではなく システムの出力から微分項を計算する方法があります このアプリケーションノートではエラーを使用します 微分項がアグレッシブになりすぎるのを防ぐために 微分カウンタ変数がインストールされています この変数により Timer1 のオーバーフローが x 回起こるごとに 1 回 d_error を計算することができます (Timer1 のオーバーフローごとに計算する累積エラーとは異なります ) 微分項を得るには 前の誤差が現在の誤差から減算されます (d_errro0:d_error1 = error0:error - p_error0:p_error1) その差分は微分ゲイン(kd) で乗算され この結果は deriv0:deriv2 に置かれ 比例項および積分項とともに加算されます チューニング システムの最適化のために PID コントローラをチューニングするさまざまな方法があります このアプリケーションノートのコードは緩く定義されており 個々のアプリケーション ( モーター制御 温度 アクチュエータなど ) に合わせてチューニングできる柔軟性を備えています PID コントローラのチューニングは幾分困難で時間がかかるため 系統的な方法で行わなければなりません 1. システムをオープンループで稼動させて その経時的な応答を測定します 測定された応答に基づくと いずれの PID 項が一番必要であるか見当をつけることができます 2. プラントの応答時間 最も大きな影響を及ぼす PID 項 累積エラーリミットなどのアプリケーション要件を決定します 3. a_error と d_error 項を計算する頻度を決定します これで Timer1 および微分カウンタレジスタにロードする値が決まります 現在の構成では d_error が a_error の計算ごとに 1 回計算されます この計算回数が少ないか多いか検討する必要があります 最後に これらの変数が決定された後 次の手順で PID ゲインを検証できます 最小のゲインから始めて (kp =1*16 ki =1*16 kd =1*16) 所望の出力に達するまで これらの値を徐々に大きくしていきます コードを少し変更するだけで コントローラを比例のみのコントローラにして最適値にチューニングできます その後 他の項を一度に 1 個ずつ追加して その都度 最適化できます EQUATION 3: 微分項 deriv0:deriv2 = kd * d_error0:d_error1 (d_error0:d_error1 = error0:error p_error:p_error1) DS00937A- ページ 8 2004 Microchip Technology Inc.

図 5 ~ 7 に温度制御環境のシステム応答を示します 図 5 は比例のみのフィードバックループに対する応答図を示しています 図では いずれのゲインも入力 信号に到達せず 入力信号のレベルを維持できないでいます 4 つのゲイン値すべてがゼロでない値に整定しており これは前述の通りです 図 5: 比例のみの応答図 1.4 1.2 1 Temp 0.8 0.6 0.4 0.2 0 Pgain = 1 Pgain = 2 Pgain = 5 Pgain = 10 Input 0 0.5 1 1.5 2 2.5 3 3.5 4 Time 2004 Microchip Technology Inc. DS00937A- ページ 9

図 6 は比例 / 積分 (PI) コントローラの応答図を示しています 大きな積分ゲインが良い応答を示しています ( 菱形マークが付いているラインを参照 ) チューニングされた PI ゲインを用いると システムはそのセットポイントに整定します これが多くのシステムで PI 制御が十分であるとされる理由です しか し PI 制御では整定に時間がかかる (t =3) という欠点があるため 比例 / 積分 / 微分 (PID) 制御が推奨されます 図 6: 比例 / 積分 (PI) コントローラの応答図 1.4 1.2 1 Temperature 0.8 0.6 0.4 0.2 0 P = 2, I = 0.1 P = 2, I = 0.05 P = 2, I = 0.02 P = 1, I = 0.02 Input 0 1 2 3 4 5 6 Time DS00937A- ページ 10 2004 Microchip Technology Inc.

図 7 は PID コントローラの応答図を示しています この図は PI の図 ( 図 6) に非常に似ていますが PID 制御はセットポイントに整定するのに PI 制御の半分の時間 (t =1.5) しかかかっておりません 図 7: PID コントローラの応答図 1.4 1.2 1 Temperature 0.8 0.6 0.4 0.2 P = 20, I = 0.5, D = 100 P = 20, I = 0.1, D = 100 P = 10, I = 0.1, D = 50 P = 5, I = 0.1, D = 50 Input 0 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2 Time PID 出力 PID 出力は比例 積分および微分項が決定された後で計算されます この計算に追加されるのは pid_sign ビットであり このビットをチェックしてプラントをどちらの方向に駆動するかを決定する必要があります このビットは pid_stat1 に置かれています これらの項の和は pid_out0:pid_out2 に格納されます EQUATION 4: PID ルーチン PID 出力 = prop0:prop2 + integ0:integ2 + deriv0:deriv2 2004 Microchip Technology Inc. DS00937A- ページ 11

最後に 最初に述べたように コントローラの処理能力により 誤差に応答するシステムの能力が決まります 表 3 に PID 機能の一覧 および各 PID 機能の命令サイクル数と所要時間を示します プラントの応答が遅い場合は プロセッサの速度を落として省電しても 許容時間内で PID ルーチンを実行することができます 表 3: PID 機能 機能 命令サイクル数 経過時間 ( s)(40 MHz 時の TCY) PID Main 437 43.7 Proportional 50 5.0 Integral 52 5.2 Derivative 52 5.2 GetPidResult 270 27 GetA_Error 70 7.0 PID Interrupt 184 18.4 表 3 の測定値は 誤差の大きさおよび算術ルーチンがどのくらい使用されるかによって変わります 測定値は PID ルーチンに送られた 6% の誤差も影響しています このアプリケーションノート用にコード開発を終了した後 PID ルーチンが PIC18F4431 モータ制御ボード (PICDEM MC) に実装されています モータ制御の最初のスタートでは PID ゲインは次の値でした : モータ制御の最初のスタートでは PID ゲインが kp = 96 ki = 80 kd = 16 のスケール値でした モータを始動してその設定速度に近づくようにした結果 積分ゲインは 144 に変わりました 累積誤差はミリ秒ごとに計算され Timer1 のオーバーフローで開始しました デルタ誤差 (d_error) は 4ms ごとに計算されました ( 微分カウンタ = 4) DS00937A- ページ 12 2004 Microchip Technology Inc.

APPENDIX A: ソースコード 完全なソースコードは PID アプリケーションの Maestro いくつかのデモアプリケーションおよび必要なサポートファイルとともに 当社の Web サイトから 1 個のアーカイブファイルとしてダウンロードできます www.microchip.com 2004 Microchip Technology Inc. DS00937A- ページ 13

NOTE: DS00937A- ページ 14 2004 Microchip Technology Inc.

Microchip デバイスのコード保護機能に関する注記 : Microchip 製品は各製品独自の Microchip( 以下 弊社 ) のデータシートに記載されている仕様を満たしています 各製品ファミリは 所定の方法 通常の条件下で使用される限り 現在市販されている類似製品の中で最も安全なファミリのひとつであるといえます コード保護機能に不正または不法にアクセスする行為は 弊社が知る限り すべて弊社のデータシートに記載されている動作仕様範囲外の方法で弊社製品を使用して行われます 通常 これらの行為は知的財産の侵害となります 弊社はコードの完全性について懸念されるお客様をサポートしていく所存です 弊社または他の半導体メーカーを問わず コードのセキュリティを保証しておりません コード保護機能は製品への 不正アクセス防止 を保証するものではありません コード保護機能は常に高度化し続けています 弊社では 弊社製品のコード保護機能を向上すべく不断の努力を重ねております 弊社のコード保護機能を侵害する行為は デジタルミレニアム著作権法 (DMCA) に違反します こうした行為によるソフトウェアや著作権に関わる製品への不正使用があった場合 同法に基づき賠償請求を行う権利があります 本書に記載されているデバイスアプリケーション等に関する内容は 参考情報に過ぎず 常に最新版であるとは限りません ご利用のアプリケーションが仕様を満たしているかどうかについては お客様の責任にてご確認願います そのような情報の正確性や使用方法 あるいはそれらから生じる特許や他の知的財産権の侵害に関し Microchip Technology Incorporated は説明または保証を含め いかなる責任も負いません 弊社の製品を生命維持装置の重要な構成要素として使用する場合は 弊社の書面による明示的な承諾がない限り許可されません いかなる知的財産権の下でも 暗黙的か明示的かを問わず ライセンスの譲渡は認められません 商標 Microchip の名称と M のロゴ Microchip ロゴ Accuron dspic KEELOQ microid MPLAB PIC PICmicro PICSTART PRO MATE PowerSmart rfpic 及び SmartShunt は米国及びその他の国における Microchip Technology Incorporated の登録商標です AmpLab FilterLab MXDEV MXLAB PICMASTER SEEVAL SmartSensor The Embedded Control Solutions Company は 米国における Microchip Technology Incorporated の登録商標です Analog-for-the-Digital Age Application Maestro CodeGuard dspicdem dspicdem.net dspicworks ECAN ECONOMONITOR FanSense FlexROM fuzzylab In-Circuit Serial Programming ICSP ICEPIC Linear Active Thermistor Mindi MiWi MPASM MPLIB MPLINK PICkit PICDEM PICDEM.net PICLAB PICtail PowerCal Powerlnfo PowerMate PowerTool REAL ICE rflab rfpicdem Select Mode Smart Serial SmartTel Total Endurance UNI/O WiperLock ZENA は 米国及びその他の国における Microchip Technology Incorporated の登録商標です SQTP は米国における Microchip Technology Incorporated のサービスマークです ここに記載されているその他の商標は 各企業が所有しています 2004, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved. Printed on recycled paper. Microchip は 2003 年 10 月に同社の世界的な拠点である設計およびウエハ製造施設 ( アリゾナ州チャンドラーおよびテンペ カリフォルニア州マウンテンビュー ) に対して ISO/TS-16949:2002 品質システム認証を取得しました Microchip の品質システムプロセスと手順は PICmicro 8 ビット MCU KEELOQ コードホッピングデバイス シリアル EEPROM マイクロペリフェラル 不揮発性メモリおよびアナログ製品を対象にしています さらに 開発システムの設計 製造に関する Microchip の品質システムは ISO 9001:2000 の認証も取得しています 2004 Microchip Technology Inc. DS00937A- ページ 15

世界各国の営業所およびサポート アメリカ合衆国 本社 2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel: 480-792-7200 Fax: 480-792-7277 テクニカルサポート : http://support.microchip.com ウェブサイトアドレス : www.microchip.com アトランタ Atlanta Alpharetta, GA Tel: 770-640-0034 Fax: 770-640-0307 ボストン Boston Westborough, MA Tel: 774-760-0087 Fax: 774-760-0088 シカゴ Chicago Itasca, IL Tel: 630-285-0071 Fax: 630-285-0075 ダラス Dallas Addison, TX Tel: 972-818-7423 Fax: 972-818-2924 デトロイト Detroit Farmington Hills, MI Tel: 248-538-2250 Fax: 248-538-2260 コーコモ Kokomo Kokomo, IN Tel: 765-864-8360 Fax: 765-864-8387 ロサンゼルス Los Angeles Mission Viejo, CA Tel: 949-462-9523 Fax: 949-462-9608 サンタクララ Santa Clara Santa Clara, CA Tel: 408-961-6444 Fax: 408-961-6445 トロント Toronto Mississauga, Ontario, Canada Tel: 905-673-0699 Fax: 905-673-6509 アジア / パシフィックアジアパシフィック営業所 Suites 3707-14, 37th Floor Tower 6, The Gateway Habour City, Kowloon Hong Kong Tel: 852-2401-1200 Fax: 852-2401-3431 オーストラリア - シドニー Tel: 61-2-9868-6733 Fax: 61-2-9868-6755 中国 - 北京 Tel: 86-10-8528-2100 Fax: 86-10-8528-2104 中国 - 成都 Tel: 86-28-8676-6200 Fax: 86-28-8676-6599 中国 - 福州 Tel: 86-591-8750-3506 Fax: 86-591-8750-3521 中国 - 香港特別行政区 Tel: 852-2401-1200 Fax: 852-2401-3431 中国 - 青島 Tel: 86-532-8502-7355 Fax: 86-532-8502-7205 中国 - 上海 Tel: 86-21-5407-5533 Fax: 86-21-5407-5066 中国 - 瀋陽 Tel: 86-24-2334-2829 Fax: 86-24-2334-2393 中国 - 深川 Tel: 86-755-8203-2660 Fax: 86-755-8203-1760 中国 - 順徳 Tel: 86-757-2839-5507 Fax: 86-757-2839-5571 中国 - 武漢 Tel: 86-27-5980-5300 Fax: 86-27-5980-5118 中国 - 西安 Tel: 86-29-8833-7250 Fax: 86-29-8833-7256 アジア / パシフィック インド - バンガロール Tel: 91-80-4182-8400 Fax: 91-80-4182-8422 インド - ニューデリー Tel: 91-11-4160-8631 Fax: 91-11-4160-8632 インド - プーナ Tel: 91-20-2566-1512 Fax: 91-20-2566-1513 日本 - 横浜 Tel: 81-45-471-6166 Fax: 81-45-471-6122 韓国 - クミ Tel: 82-54-473-4301 Fax: 82-54-473-4302 韓国 - ソウル Tel: 82-2-554-7200 Fax: 82-2-558-5932 or 82-2-558-5934 マレーシア - ペナン Tel: 60-4-646-8870 Fax: 60-4-646-5086 フィリピン - マニラ Tel: 63-2-634-9065 Fax: 63-2-634-9069 シンガポール Tel: 65-6334-8870 Fax: 65-6334-8850 台湾 - 新竹 Tel: 886-3-572-9526 Fax: 886-3-572-6459 台湾 - 高雄 Tel: 886-7-536-4818 Fax: 886-7-536-4803 台湾 - 台北 Tel: 886-2-2500-6610 Fax: 886-2-2508-0102 タイ - バンコク Tel: 66-2-694-1351 Fax: 66-2-694-1350 ヨーロッパオーストリア - ベルス Tel: 43-7242-2244-3910 Fax: 43-7242-2244-393 デンマーク - コペンハーゲン Tel: 45-4450-2828 Fax: 45-4485-2829 フランス - パリ Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79 ドイツ- ミュンヘン Tel: 49-89-627-144-0 Fax: 49-89-627-144-44 イタリア - ミラノ Tel: 39-0331-742611 Fax: 39-0331-466781 オランダ - ドリューネン Tel: 31-416-690399 Fax: 31-416-690340 スペイン - マドリード Tel: 34-91-708-08-90 Fax: 34-91-708-08-91 英国 - ウォーキンガム Tel: 44-118-921-5869 Fax: 44-118-921-5820 05/28/04 DS00937A- ページ 16 2004 Microchip Technology Inc.