2016 年度情報処理学会関西支部 支部大会

A-01

割り込み駆動のモータ制御プログラムからの高位合成
High-Level Synthesis from Interrupt-Driven Motor Control Programs

大迫 裕樹 †神原 弘之‡石浦 菜岐佐 †Yuuki Oosako

Hiroyuki Kanbara

Nagisa IshiuraMotor

1 はじめに産業機器, ロボット, 洗濯機や冷蔵庫等の家庭用電気製品, 冷却ファンやハードディスクドライブを内蔵した PC

TimerController

Motor
Simulator等, モータは幅広い製品で使用されている. また, 近年では, 内燃機関を動力源としてきた自動車, 建設機械あるい
hardware implementation

はドローン等の輸送機器の電動化が急速に進みつつある.
その一方, モータは日本国内の総電力消費量の 57.3% を

図1

モータのセンサレス制御消費しており [1], 省エネルギー化を達成するために, さらなるモータ制御の高度化が必要とされている.
モータのフィードバック制御では, センサから取得したみ駆動のモータ制御をハードウェア実装する手法を提案

回転速度や位置 (角度) 情報を元に PWM (pulse widthする. タイマ割り込みにより駆動されるブラシ付き DCmodulation) 等でモータの駆動電圧を調整し, その回転速度やトルクを目標値に近付ける. これに対し, センサ情報を用いないセンサレス方式では, 制御系側でモータの物理言語により記述し, これを ACAP で FPGA 上の回路に的なモデルをシミュレーションすることによって速度やることを確認した.

モータのセンサレス制御を C 言語と MIPS のアセンブリ合成することにより, 約 21 µs の周期で PID 制御が行えトルクを推定し, フィードバック制御を行う. モータのふるまいのシミュレーションには浮動小数点演算を多用するが、マイコン搭載の浮動小数点演算器の能力が限られていることもあり, 必要とされる制御周期を実現できない状況が生じつつある [2].
モータ制御の高度化を達成するアプローチの一つに,FPGA (field programmable gate array) 等を用いて制御処理をハードウェア化する方法が考えられる. FPGA が2 モータの制御とモータの動作モデルのバイナリ合成
2.1 モータのセンサレス制御
本稿では, 図 1 [5] の破線内部の “モータのシミュレーション” と “PID 制御” からなるセンサレス制御のソフトウェア処理のプログラムから, マイコンと同様にタイマからの割り込み信号に同期して動作するハードウェア回路搭載している多数の乗算器を再構成することによって浮を合成する.

動小数点演算を並列に実行し, より短い制御周期でモータ

2.2 伝達関数によるモータモデル
図 2 [5] は, ブラシ付き DC モータの伝達関数をブロック線図で表したものであり, 印加電圧 Va と負荷トルク TLから回転角速度 ω を求めることができる. 図中 s はラプラス演算子, Te (= La /Ra ) は電気的時定数, Ra は巻線抵抗, KT はモータ定数, D は粘性制動係数, J は慣性モーメント, KE は逆起電力定数である.
このモータの物理モデルを常微分方程式で記述し, 数値解析を行うことにより回転速度 ω を求めることができる.
文献 [6] では, 同様のモデルを記述した C プログラムを高位合成によって FPGA 上の回路に合成することにより,のふるまいを推定し, 制御を高度化することが可能になる.

C 言語等で書かれた制御プログラムを FPGA に実装可能なハードウェア回路に変換することは, 高位合成技術 [3] により比較的容易になった. しかし, 一般的な高位合成技術では, マイコンのアセンブリ言語で記述された割り込み処理プログラムを合成することはできず, タイマやセンサからの割り込みに基づく制御プログラムをそのままハードウェア化することはできない.
本稿では, 割り込み処理を含むプログラムを合成可能なバイナリ合成系 ACAP [4] を用いることにより, 割り込モータの高速なシミュレーションが可能であることを示† 関西学院大学, Kwansei Gakuin University‡ 京都高度技術研究所, ASTEM RI

している.

x1
Va+x2
_x31
Ra11+sTex4x5Kr

TL_+

InstMemx61Dx7

11+sJ/Dx8

ω

DataMem

DataMemint
mainx9KEint

図2

ブラシ付き DC モータの伝達関数のブロック線図 [5]mainCPUasmgasC

CDFG-32756 -32760

gcc+ lw +MIPS binaryLobjdump

optimization

DataMemschedulingbinding+addu
RTL IR-32764<<+

CDFG generator

図3

図 4 ACAP における割り込みハンドラを含むコードのハードウェア化 [8]Sswsllcomposer
Verilog
HDL

HW_sigint_sig

Device...

...
lw v1,-32756(gp)lw v0,-32764(gp)nopaddu v0,v1,v0
sll v0,v0,0x2sw v0,-32760(gp)
...

lw

L

library info

HardwareDeviceState
MachineData
path
int module

CP0k0
k1

State
Machine

ACAP での高位合成の処理の流れ [4]Datapath
main module

Hardware

2.3 高位合成とバイナリ合成
高位合成は, C 言語等による動作記述からハードウェアの設計記述を合成する技術である. その中でも, アセンブ
リや機械語を入力として用いるものはバイナリ合成 [7] とも呼ばれる. アセンブリや機械語を入力として用いることにより, ポインタや構造体等のより広範なプログラムを容易にハードウェアに合成することができる.
バイナリ合成システム ACAP [4] は, MIPS R3000 の機械語プログラムを入力として, これを 32bit の整数演算命令を並列に実行可能なハードウェアに変換する. ACAPの処理の流れを図 3 に示す. ACAP への入力は, 既存の機械語プログラムであってもよいし, アセンブリ言語や C言語によるプログラムから得られるものであってもよい.
機械語プログラムは CDFG (control dataflow graph) に変換された後, 最適化, スケジューリング, バインディングの処理を施して, Verilog HDL に変換される.
ACAP では, 割り込みハンドラを含むプログラムの高位合成が可能である [8]. 図 4 のように, プロセッサ及び割り込みハンドラを含むプログラムに等価なハードウェアを,通常処理 (main) と割り込み処理 (int) を行う 2 つのモジュールとして合成する. 生成されるハードウェアの構成を図 5 に示す. CP0 は割り込み信号の処理を行う MIPSのコプロセッサである. main module と int module はそれぞれが状態機械を持っており, 独立に動作する.

3 モータ制御の記述
本稿では, 内部にモータの動作モデルを持ち, タイマ割り込みによって駆動されるモータ制御を, バイナリ合成によりハードウェア化する.

図 5 ACAP により合成されるハードウェアの構成 [8]本稿のモータ制御には PID 制御を使用する. これはフィードバック制御の一種であり, 偏差, 偏差の積分, 偏差の微分をそれぞれ制御するパラメータである, 比例ゲインKP , 積分ゲイン KI , 微分ゲイン KD を調整することにより, 応答時間, 定常偏差, 振動, オーバーシュートを抑制する.
PID 制御とブラシ付き DC モータのシミュレータを含めたブロック線図は, 図 6 [5] のように定数と 3 個の 1 次遅れ要素で記述できる. 図中の x1 が制御されるモータへの印加電圧である. PID の各要素 (比例要素, 積分要素,微分要素) はまとめて 1 つのブロック PID として表している.
本稿のモータ制御は, 周期的もしくは非同期の外部割り込みに基づいて行う. 割り込み信号が入ると, モータの回転速度と目標値を取得し, モータへの印加電圧を決定する.
割り込み時間の間隔を短くすれば, より高精度な制御を行えるが, 印加電圧の計算は次の割り込みまでに終える必要がある.
3.1 C 言語による記述
本稿のモータ制御を行うプログラムは図 7 のように記述できる [5]. 関数 Pid Control は, 制御量 (現在の回転速度) pState->speed と目標値 (目標速度) pInput->wCmdからモータへの印加電圧を計算し, pInput->wCmd を修正する. 18 行目の関数 Pid は, 比例, 微分, 積分ゲインに基づき, 比例要素, 積分要素, 微分要素の処理を行う. 21 行目の関数 DcLimit は, 入力値が特定の範囲に含まれない

図 6 ブラシ付き DC モータの PID 制御の伝達関数のブロック線図 [5]123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
64
65
66

void PID_Control (MotorInput * const pInput ,MotorState * const pState ,const float dt){
static float c5 = 0. f ;static float work [2] = {};const float KP = 1.0 f ,KI = 0.0 f ,KD = 0.03 f ;const float
const float
const float
const float
Pid ( c2 ,const float

GAIN =
c1=c2=c2pid =KP , KI ,c3=500. f ;pInput - > wCmd ;c1 - c5 ;KD , work , dt );c2pid * GAIN ;pInput - > wCmd = DcLimit ( c3 );motor ( pInput , pState , dt );const float TG//

1 void Motor (2MotorInput * const pInput ,3MotorState * const pState ,4
const float dt5 )6 {7static float x4 = 0.0 f ;8static float x8 = 0.0 f ;9static float x9 = 0.0 f ;10
11
const float Ra= 1.0 f ;12/ / 電機子抵抗13const float La= 0.008 f ;14/ / 電機子インダクタンス
15
const float TAUe = La / Ra ;16
const float K= 0.28 f ;17/ / モータ定数 ( K E = k T = K )18
const float J= 0.005 f ;19/ / 負荷を含む慣性モーメント20
const float D= 0.0002 f ;21/ / 粘性制動係数
22const float TAUj = J / D ;23
24
const float x1 = pInput - > wCmd ;25
const float x2 = x1 - x9 ;26
const float x3 = x2 / Ra ;27
x4 = rk4 ( x3 , x4 , TAUe , dt );28/ / 電機子電流の計算
29
const float x5 = x4 * K ;30/ / モータ発生トルクの計算
31
const float x6 = x5 - pInput - >loadTorque ;
32
33
34
35
36373839 }/ / 負荷トルクを印加

const float x7x8= x6 / D ;= rk4 ( x7 , x8 , TAUj , dt );/ / 回転角速度の計算

x9 = x8 * K ;pState - > speed= x8 ;
pState - > current = x4 ;= 10.0 f / 314.159 f ;速 度 検 査 器 設 定(3000/ min : 10 V )const float c4= pState - > speed * TG ;const float TAU1 = 0.01 f ;c5 = rk4 ( c4 , c5 , TAU1 , dt );}

図8モータのシミュレーション [5]モータのシミュレーションは, 図 8 のように記述でき

float Pid (const float xin ,const float kp ,const float ki ,const float kd ,float work [] ,const float dt){
const float a = xin ;const float b =( xin + work [0])/2.0 f * dt + work [1];const float c =( xin - work [0])/ dt ;work [0] = xin ;work [1] = b ;const float xout =a * kp + b * ki + c * kd ;return xout ;}る [5]. 関数 Motor は, 図 2 のブロック線図において, モータの各パラメータを, 巻線抵抗 Ra =1Ω, 巻線インダクタ
ンス La =8mH, 逆起電力定数 KE =0.28Vs/rad, トルク定数 Kr =0.28Nm/A, 慣性モーメント J=0.005kgm2 , 粘性
制動係数 D=0.0002Nms/rad, 制御時間間隔 dt=500µs,回数 te/dt=2000 と設定したものである. 4 次のルンゲ・クッタ法により一次遅れ要素の近似解を求める 関数 Rk4
は図 9 の通りである.
図 10 は メ イ ン 関 数 の 記 述 で あ り, 5 行 目 の 関数 init interrupt で 割 り 込 み 処 理 の 初 期 化 を, 6行 目 の 関 数 register exc handler で 割 り 込 み ハ ン
ド ラ の 登 録 を 行 っ て い る.

float DcLimit ( const float input ){const float MAX_V = 80. f ;const float MIN_V = -80. f ;return( MAX_V < input ) ? MAX_V: ( input < MIN_V ) ? MIN_V:input ;}図7モータの PID 制御 [5]な お, init interrupt,register exc handler, および割り込み受け付けルー
チンは, [8] と同様, インラインアセンブリを含む C プロ
グラム及び MIPS アセンブリプログラムで実装している.
図 11 は割り込みハンドラの記述である. 6 行目の関数
GetTime で現在時刻を取得し, 16 行目で, 前回の制御時刻からの経過時間, モータへの負荷トルクの値を制御関数
PID Control に引き渡している.

4 合成結果場合にこれを範囲内の値に修正するものである. 23 行目

高位合成系 ACAP を用いて, 3 章のプログラムを合成の関数 Motor はモータシミュレーションの呼び出しであした. 生成された Verilog HDL は論理合成ツール Xilinx

り, 29 行目の関数 Rk4 はルンゲ・クッタ法による一次遅ISE 14.7 によって, Xilinx Spartan 6 をターゲットに論理合成した. 浮動小数点演算器に関しては, 加減算器とれ要素の近似計算である.

表11 // 4 次 の ル ン ゲ ・ ク ッ タ 法 に よ る 近 似 解
2 float Rk4 ( const float xin , const float

xold , const float tau , const float dt )3 {45678910111213141516 }const float
dt * ( xinconst float
dt * ( xinconst float
dt * ( xinconst float
dt * ( xink1 =- xold )k2 =- ( xold
k3 =- ( xoldk4 =- ( xold/ tau ;MIPS [9]HW

論理合成およびシミュレーションの結果
FF 数 LUT 数 遅延 [ns] サイクル数 (周期 [µs])
1821
3788
16.07823001(369.8)
2766
16617
23.676871(20.6)+ k1 / 2. f )) / tau ;+ k2 / 2. f )) / tau ;+ k3 )) / tau ;const float xout =xold + ( k1 + 2. f * k2 + 2. f * k3 +k4 ) / 6. f ;return xout ;5 むすび
本研究では, モータの伝達関数モデルを用いた割り込み駆動のセンサレス制御プログラムを, 高位合成系 ACAPを用いてハードウェア化した. 約 21 µs 間隔で割り込みをかけて PID を制御を行うことができた. 割り込みを活用

図 9 4 次のルンゲ・クッタ法による近似解計算 [5]123456789101112131415

volatile int fContinue = 1;
int main (){init_interrupt ();register_exc_handler (EXC_Int0 , TimerHandler);
InitializeSim (); / / 出 力 関 連 の 初 期 化
while ( fContinue ) / * V O I D * / ;FinalizeSim ();return 0;}

図 10 割り込みハンドラの登録

1 void TimerHandler ()2 {3// 前 回 の 制 御 時 刻
4static float time_l ;5// 現 在 の 時 刻
6const float time = GetTime ();78const float dt = time - time_l ;9time_l = time ;1011MotorInput input = {125.0 f ,// 速 度 指 令
13GetCurrentLoad ()// 現 在 の 負 荷
14};1516PID_Control (& input , & state , dt );1718loopCount ++;19 }

図 11割り込みハンドラ

乗算器は [6] で設計されたものを, 除算器と比較演算器はXilinx Core Generator により生成したものを使用した.
実験結果を表 1 に示す. FF 数, LUT 数, 遅延, サイクル数, 周期は, それぞれフリップフロップ数, LUT 数, 遅延時間, 1 周期の制御に要するサイクル数と時間を表す.
MIPS は文献 [9] の MIPS R3000 互換プロセッサであり,HW は本稿で合成したハードウェアである. プロセッサは浮動小数点演算器を持っておらず, 浮動小数点演算は soft
float 実行時ライブラリにより行っている. 本稿のハードウェア実装では 1 周期の制御が 20.62 µs で行える.

したさらに高度な制御への適用が今後の課題である.
謝辞
本研究に関して有益な御助言を頂いた元立命館大学の中谷嵩之氏, 元関西学院大学の田村真平氏に感謝致します. 本研究は一部 JSPS 科研費 60193265 の助成による.

参考文献[1] “電力機器の消費電力量に関する現状と近未来の動向調査,”
http://www.sicalliance.jp/science data/bunken/fedpower-consume.pdf, 財 団 法 人 新 機 能 素 子 研 究 開 発 協 会(Mar. 2009).
[2] 江崎雅康: FPGA マガジン no.7, pp. 4–7 “なぜ FPGA でモータを制御するのか,” CQ 出版社 (Oct. 2014).
[3] D. D. Gajski, N. D. Dutt, A. C-H Wu, and S. Y-L Lin:High-Level Synthesis: Introduction to Chip and System
Design, Kluwer Academic Publishers (1992).
[4] Nagisa Ishiura, Hiroyuki Kanbara, and Hiroyuki
Tomiyama: “ACAP: Binary Synthesizer Based on MIPS
Object Codes,” in Proc. ITC-CSCC 2014, pp. 725–728(July 2014).
[5] 高橋久: C 言語によるモーター制御入門講座 〜SH マイコ
ンで学ぶプログラミングと制御技法〜, 電波新聞社 (Oct.
2007).
[6] 竹林陽, 伊藤直也, 田村真平, 神原弘之, 石浦菜岐佐: “高位合成系 ACAP を用いたモーターの浮動小数点モデルの FPGA上での実行,” 情処関西支部大会, A-02 (Sept. 2014).
[7] Greg Stitt and Frank Vahid: “Binary synthesis,” ACM
Trans. on Design Automation of Electronic Systems, vol.
12, no. 3, article 34 (Aug. 2007).
[8] 伊藤直也, 石浦菜岐佐, 冨山宏之, 神原弘之: “割込みハンドラを独立したモジュールとして実装するバイナリ合成,” 信
学技報, VLD2015-106 (Jan. 2016).
[9] 神原, 金城, 矢野, 戸田, 小柳: “パイプラインプロセッサを理解するための教材: RUE-CHIP1 プロセッサ,” 情処関西支部大会, A-09 (Sept. 2009).