cvl-robot's diary

研究ノート メモメモ https://github.com/dotchang/

ICP(Iterative Closest Point)法を勉強したいときのメモ

(編集中)

広島大学玉木先生のスライド

sssslide.com

かみやんさんの『Efficient Variants of the ICP Algorithm』(サーベイ論文)の解説

d.hatena.ne.jp

SparseICP(c++ソースコード、提案手法の比較用にオーソドックスな方のソースもある)

github.com
Windowsでビルドしたい場合は、同梱のEigenが古くてエラーを起こすので、最新版で上書きすること。

最終頁と上記ソースコードを見比べると、理解が早い

https://igl.ethz.ch/projects/ARAP/svd_rot.pdf

コンピュータビジョン 最先端ガイド3

増田先生の第2章にcソースコードもある.

コンピュータビジョン最先端ガイド 3 (CVIMチュートリアルシリーズ)

コンピュータビジョン最先端ガイド 3 (CVIMチュートリアルシリーズ)

MotorwareのGUI Composerの起動が面倒くさいことの対処

MotorWareのExampleの実行方法は二つあります。
1. コンパイル出力(proj_lab02b.out)をappProgram.outと改名してGUI Composerの実行ファイルと同じフォルダにコピーしてGUIを起動する方法
2. IDE(Code Composer Studio)にGUI Composerをzip化して読み込ませてDebugモードでoutファイルを読み込んで起動する方法

そのままでは、どっちも超絶面倒くさいです。
お勧めは、1の方法に簡単なバッチファイルを書いて、半自動で起動できるようにしておく方法です。

例えば、次のようなファイルをコンパイル出力先のフォルダに作ります。

proj_lab02b.bat

copy proj_lab02b.out "C:\ti\guicomposer\webapps\InstaSPIN_F2802xF_UNIVERSAL\appProgram.out"
cd "C:\ti\guicomposer\webapps\InstaSPIN_F2802xF_UNIVERSAL\"
InstaSPIN_UNIVERSAL.exe

特性の分からない3相DCブラシレスモーターをソフトウェアエンコーダを搭載したTiのマイコンボードLAUNCHXL-F28069MとモータドライバBOOSTXL-DRV8305EVMを使って動かす(その4)

(編集中)
最重要ファイルであるところのmotorware_selecting_user_variables.xlsxのv2p1 2014-May-28版を見てみましょう。
MotorwareのResources->Training: User's Guides, Labs, Tutorials->InstaSPIN Projects Setting User Variablesの下にあります。

1. FILL IN THESE VALUES FOR YOUR USER.H, MOTOR, and INVERTER HW

(お使いのuser.h, モータ,インバータハードウェアに合わせて、これらの値を埋めてください。)

USER_SYSTEM_FREQ_MHz90[MHz]
Maximum Bus Voltage24[V]
Maximum Target RPM40000[RPM]
USER_MOTOR_NUM_POLE_PAIRS2[PAIRS]
USER_PWM_FREQ_kHz45[kHz]
USER_NUM_PWM_TICKS_PER_ISR_TICK3[ticks]
USER_NUM_ISR_TICKS_PER_CTRL_TICK1[ticks]
USER_NUM_CTRL_TICKS_PER_CURRENT_TICK1[ticks]
USER_NUM_CTRL_TICKS_PER_EST_TICK1[ticks]
USER_ZEROSPEEDLIMIT0.002

sub-calculations:
Target Hz = (Maximum Target RPM) * (USER_MOTOR_NUM_POLE_PAIRS) / 60
POLE = 2 * (USER_MOTOR_NUM_POLE_PAIRS)
ISR_Hz = (USER_PWM_FREQ_Hz) / (USER_NUM_PWM_TICKS_PER_ISR_TICK)
CTRL_Hz = (ISR_Hz) / (USER_NUM_ISR_TICKS_PER_CTRL_TICK)
CURRENT_Hz = (CTRL_Hz) / (USER_NUM_CTRL_TICKS_PER_CURRENT_TICK)
EST_Hz = (CURRENT_Hz) / (USER_NUM_CTRL_TICKS_PER_EST_TICK)

2. The following are set by HW design, use defaults for TI EVM or your own HW

(次の値はハードウェアデザインによって決定されますので,Tiの評価ボードまたはお使いのハードウェアのための規定値をお使いください。)

USER_VOLTAGE_FILTER_POLE_Hz364.682[Hz]
USER_ADC_FULL_SCALE_CURRENT_A33.00[A]
USER_ADC_FULL_SCALE_VOLTAGE_V26.3147[V]

3. THESE VALUES ARE RECOMMENDED FOR USE once TRUE checks are satisfied

 (TRUEの確認が満たされると,これらの値は使用できます。)

Ideal USER_IQ_FULL_SCALE_FREQ_Hz for Motor

(モータのための理想的なUSER_IQ_FULL_SCALER_FREQ_Hz)
Target Hz with 10% buffer
(10%の余裕を加えた目標周波数)

Maximum allowed USER_IQ_FULL_SCALE_FREQ_HZ for HW

(ハードウェアのための最大許容可能なUSER_IQ_FULL_SCALE_FREQ_HZ)
4 * USER_VOLTAGE_FILTER_POLE_Hz [with 5% buffer]
(USER_VOLTAGE_FILTER_POLE_Hzの4倍から5%の余裕を持たせた値)

USER_IQ_FULL_SCALE_FREQ_Hz

Lower of Ideal and Maximum
(理想と最大のうち小さい方)

Maximum RPM Supported

(サポートされる最大回転数)
Rotor Hz can be 1.98 * USER_IQ_FULL_SCALE_FREQ_HZ; EST speed will roll-over outside boundary!!!!
(ローターの周波数はUSER_IQ_FULL_SCALE_FREQ_Hzの1.98倍を取り得るため,推定速度は境界の外に転がり出得ます。)

USER_MOTOR_FLUX_EST_FREQ_Hz

5-150 Hz; ~10% of Maximum Target Hz but use low as possible where Ls and Flux can be ID'd consistently
(5-150Hz; 最大目標周波数のおよそ10%、ただしLsとFluxが一貫して特定できる範囲で出来るだけ低い値を使ってください。)

USER_MAX_ACCEL_EST_Hzps

If USER_MOTOR_FLUX_EST_FREQ_Hz > 50 Hz must increase the acceleration during ID to avoid a timeout
(もしUSER_MOTOR_FLUX_EST_FREQ_Hzが50Hzよりも大きければ,タイムアウトを避けるためにIDの間の加速を増加してください。)

CURRENT Hz > MAX_Hz * 7

If FALSE increase CURRENT kHz or reduce MAX_HZ; Standard good practice for control systems
(もしFALSEならばCURRENT kHzを増加させるか、MAX_Hzを現象させてください。制御システムのための標準的な良い慣習値)

EST <= CTRL

If FALSE correct; No need to run the estimator if results are not being updated in control loop
(もしFALSEならば、制御ループ中に更新され無いことを意味するので、推定は実行されません。)

EST > 10 * USER_VOLTAGE_FILTER_POLE_Hz (+10% margin)

If FALSE increase EST Rate
(もしFALSEならEST Rateを増やしてください。)

EST > 8 * TARGET_Hz

If FALSE, increase effective EST Frequency using TICKs
(もしFALSEなら、TICKsを使って有効なEST周波数に増加さえてください。)

FLUX_EST_FREQ > ZEROSPEEDLIMIT * FULL_SCALE_FREQ

If FALSE, lower ZEROSPEEDLIMIT
(もしFLASEならば, ZEROSPEEDLIMITを減らしてください。)

USER_IQ_FULL_SCALE_CURRENT_A

Slightly >= 0.5 * ADC_FULL_SCALE_CURRENT_A
(0.5*ADC_FUKK_SCALE_CURRENT_Aよりわずかに大きい値にしてください。)

starting USER_IQ_FULL_SCALE_VOLTAGE_V

 Initially set to bus voltage until flux is identified
(磁束が特定されるまで最初に設定されるバス電圧値)

4. Once Motor ID is attempted, update these as best you can and check IQ_V Scaling

 (モーター特定を実行したら,これらの値を出来るだけ最適に調整して、IQ_Vの値幅を確認してください。)

USER_MOTOR_RATED_FLUX0.023[V/Hz]
USER_MOTOR_Ls_d0.00005[H]

sub-calculations:
Minumiu Flux Measurement = (new USER_IQ_FULL_SCALE_VOLTAGE_V) / (EST_Hz * 1000) / 0.7
= Minimum Flux that can be measured with new USER_IQ_FULL_SCALE_VOLTAGE_V (cell I20)
(=最小磁束はnew_USER_IQ_FULL_SCALE_VOLTAGE_Vで計ることができます。)

4. Check after valid USER_MOTOR_RATED_FLUX Identification
(有効なUSER_MOTOR_RATED_FLUX特定後の確認)

Minimum Flux Measurement < 0.9 * RATED_FLUX

(最小磁束測定値が0.9*RATED_FLUXより小さいこと。)
  If FALSE, reduce new USER_IQ_FULL_SCALE_VOLTAGE as low as Bus Voltage / 2 + 10% buffer
(もしFALSEならば,new USER_IQ_FULL_SCALE_VOLTAGEを電源電圧の半分に10%の余裕を持たせた値よりも小さくしてください。)

IQ_VOLTAGE < RATED_FLUX * EST Hz

If FALSE, reduce new USER_IQ_FULL_SCALE_VOLTAGE or increase EST_Hz
(もしFALSEならば、new USER_IQ_FULL_SCALE_VOLTAGEを減らすか、EST_Hzを増やしてください。)

new USER_IQ_FULL_SCALE_VOLTAGE_V

Use larger of a) or b). Minimum of Bus Voltage / 2 + 10% buffer if required to make I18 & I19 TRUE
(a)またはb)の大きな方を使ってください。Minimum Flux Measurement < 0.9 * RATED_FLUXとIQ_VOLTAGE < RATED_FLUX * EST_Hzの条件を満たすためには、電源電圧の半分に10%の余裕を持たせた値にしてください。
a) Bus Voltage
(電源電圧)
Typical Minimum, but can reduce as low as Bus Voltage / 2 + 10% buffer
(形式上の最小値、ただしBus Voltageの半分に10%の余裕を持たせた電圧程度まで減りえます。)
b) Bemf Generated @ Target Hz + 10% buffer
(目標周波数+10%余裕における逆起電力)

5. Ideal Pole Design when you build wwn HW

(ユーザが自身のHWを作る際の理想的な極設計)

Minimum Pole200[Hz MIN]
Ideal* Pole >=366.667[Hz]
Half** Pole >=183.3333[Hz]

* Use Ideal pole to keep Target Hz < USER_IQ_FULL_SCALE_FREQ_Hz but note that as pole Hz increases you are more susceptible to drift/error and should use higher precision Vph filter Capacitors
(理想的な極を使うためにTarget Hz < USER_IQ_FULL_SCALE_FREQ_Hzを維持してください。しかし,極周波数の増加は、ドリフトやエラーに影響されやすくするので高い精度のVphフィルタキャパシタを使うように、気を付けてください。)

** You may use a lower pole (down to half the value of the ideal) that is less sensitive to capacitor error/offset/drift. Set USER_IQ_FULL_SCALE_FREQ_HZ <= 4 * Lowered Pole * 0.95 buffer. Target Hz can reach +/- 1.98 * USER_IQ_FULL_SCALE_FREQ_Hz

Performance difference between the two is typically very marginal though. Do NOT use a filter pole < Minimum Pole!!!

user.hへの反映

マイコンボードとインバータボードに依存して、テンプレートのuser.hが用意されています。たとえば、LAUNCHXL-F28027F+BOOSTXL-DRV8305EVMの組み合わせの場合は、

C:\ti\motorware\motorware_1_01_00_16\sw\solutions\instaspin_foc\boards\boostxldrv8305_revA\f28x\f2802xF\src

にあります。この中から、編集可能な値をピックアップしてみます。

CURRENTS AND VOLTAGES

#define USER_IQ_FULL_SCALE_FREQ_Hz (800.0) // 800 Example with buffer for 8-pole 6 KRPM motor to be run to 10 KRPM with field weakening; Hz =(RPM * Poles) / 120
#define USER_IQ_FULL_SCALE_VOLTAGE_V (24.0) // 24.0 Set to Vbus
#define USER_ADC_FULL_SCALE_VOLTAGE_V (44.30) // BOOSTXL-DRV8305EVM = 44.30 V
#define USER_IQ_FULL_SCALE_CURRENT_A (24.0) // BOOSTXL-DRV8305EVM = 24.0 A
#define USER_ADC_FULL_SCALE_CURRENT_A (47.14) // BOOSTXL-DRV8305EVM = 47.14 A
#define USER_NUM_CURRENT_SENSORS (3) // 3 Preferred setting for best performance across full speed range, allows for 100% duty cycle
#define USER_NUM_VOLTAGE_SENSORS (3) // 3 Required
#define I_A_offset (1.210729778) // BOOSTXL-DRV8305EVM = 1.047175646
#define I_B_offset (1.209441483) // BOOSTXL-DRV8305EVM = 1.044038892
#define I_C_offset (1.209092796) // BOOSTXL-DRV8305EVM = 1.040363491
#define V_A_offset (0.5084558129) // BOOSTXL-DRV8305EVM = 0.5256254077
#define V_B_offset (0.5074239969) // BOOSTXL-DRV8305EVM = 0.5250559449
#define V_C_offset (0.5065535307) // BOOSTXL-DRV8305EVM = 0.5247237682

CLOCKS & TIMERS

#define USER_SYSTEM_FREQ_MHz (60.0)
#define USER_PWM_FREQ_kHz (45.0) //30.0 Example, 8.0 - 30.0 KHz typical; 45-80 KHz may be required for very low inductance, high speed motors
#define USER_MAX_VS_MAG_PU (0.5) // Set to 0.5 if a current reconstruction technique is not used. Look at the module svgen_current in lab10a-x for more info.
#define USER_EST_HANDLE_ADDRESS (0x600)
#define USER_VD_SF (0.95)

DECIMATION

#define USER_NUM_PWM_TICKS_PER_ISR_TICK (3)
#define USER_NUM_ISR_TICKS_PER_CTRL_TICK (1) // 2 Example, controller clock rate (CTRL) runs at PWM / 2; ex 30 KHz PWM, 15 KHz control
#define USER_NUM_CTRL_TICKS_PER_CURRENT_TICK (1) // 1 Typical, Forward FOC current controller (Iq/Id/IPARK/SVPWM) runs at same rate as CTRL.
#define USER_NUM_CTRL_TICKS_PER_EST_TICK (1) // 1 Typical, FAST estimator runs at same rate as CTRL;
#define USER_NUM_CTRL_TICKS_PER_SPEED_TICK (15) // 15 Typical to match PWM, ex: 15KHz PWM, controller, and current loop, 1KHz speed loop
#define USER_NUM_CTRL_TICKS_PER_TRAJ_TICK (15) // 15 Typical to match PWM, ex: 10KHz controller & current loop, 1KHz speed loop, 1 KHz Trajectory

LIMITS

#define USER_ZEROSPEEDLIMIT (0.5 / USER_IQ_FULL_SCALE_FREQ_Hz) // 0.002 pu, 1-5 Hz typical; Hz = USER_ZEROSPEEDLIMIT * USER_IQ_FULL_SCALE_FREQ_Hz
#define USER_MAX_ACCEL_Hzps (20.0) // 20.0 Default
#define USER_MAX_ACCEL_EST_Hzps (5.0) // 5.0 Default, don't change
#define USER_IDRATED_FRACTION_FOR_L_IDENT (1.0) // 1.0 Default, don't change
#define USER_IDRATED_DELTA (0.00002)
#define USER_SPEEDMAX_FRACTION_FOR_L_IDENT (1.0) // 1.0 Default, don't change
#define USER_FLUX_FRACTION (1.0) // 1.0 Default, don't change
#define USER_POWERWARP_GAIN (1.0) // 1.0 Default, don't change
#define USER_R_OVER_L_EST_FREQ_Hz (300) // 300 Default for high speed motors, can reduce to 100 if RoverL from Motor ID is < 2000

POLES

#define USER_VOLTAGE_FILTER_POLE_Hz (344.62) // BOOSTXL-DRV8305 = 344.62 Hz
#define USER_OFFSET_POLE_rps (20.0) // 20.0 Default, do not change
#define USER_FLUX_POLE_rps (100.0) // 100.0 Default, do not change
#define USER_DIRECTION_POLE_rps (6.0) // 6.0 Default, do not change
#define USER_SPEED_POLE_rps (100.0) // 100.0 Default, do not change
#define USER_DCBUS_POLE_rps (100.0) // 100.0 Default, do not change
#define USER_EST_KAPPAQ (1.5) // 1.5 Default, do not change

Define each motor with a unique name and ID number

#define Anaheim_BLY172S 102
#define USER_MOTOR Anaheim_BLY172S

#define USER_MOTOR_TYPE MOTOR_Type_Pm // Motor_Type_Pm (All Synchronous: BLDC, PMSM, SMPM, IPM) or Motor_Type_Induction (Asynchronous ACI)
#define USER_MOTOR_NUM_POLE_PAIRS (4) // PAIRS, not total poles. Used to calculate user RPM from rotor Hz only
#define USER_MOTOR_Rr (NULL) // Induction motors only, else NULL
#define USER_MOTOR_Rs (0.3968007) // Identified phase to neutral resistance in a Y equivalent circuit (Ohms, float)
#define USER_MOTOR_Ls_d (0.0006708066) // For PM, Identified average stator inductance (Henry, float)
#define USER_MOTOR_Ls_q (0.0006708066) // For PM, Identified average stator inductance (Henry, float)
#define USER_MOTOR_RATED_FLUX (0.03433958) // Identified TOTAL flux linkage between the rotor and the stator (V/Hz)
#define USER_MOTOR_MAGNETIZING_CURRENT (NULL) // Induction motors only, else NULL
#define USER_MOTOR_RES_EST_CURRENT (1.0) // During Motor ID, maximum current (Amperes, float) used for Rs estimation, 10-20% rated current
#define USER_MOTOR_IND_EST_CURRENT (-1.0) // During Motor ID, maximum current (negative Amperes, float) used for Ls estimation, use just enough to enable rotation
#define USER_MOTOR_MAX_CURRENT (5.0) // CRITICAL: Used during ID and run-time, sets a limit on the maximum current command output of the pded Speed PI Controller to the Iq controller
#define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0) // During Motor ID, maximum commanded speed (Hz, float), ~10% rated

user.hとmotorware_selecting_user_variables.xlsxを並べて開いて、データを相互に編集してやる必要があります。
1.最初に、user.hからエクセルの黄色い枠の中にデータをコピペしていきます。モニターで黄色が見にくいのでこのページでは、赤になっています。
2.次に、エクセルの緑の枠の値をuser.hにコピーして持ってきます。USER_MAX_ACCEL_EST_Hzpsは変えるな、とuser.hに書いてあるので変えない方が良いでしょう。
3.実機でモータ同定を行ってから、両方の青枠のデータを更新します。モータ同定はうまくいかないことの方が多いので、うまく回るかどうかを確認してから反映してください。
4.水色で示したモータの巻き線抵抗や、インバータの電流電圧検出抵抗の値をuser.hに更新します。

Tiのホームページの素晴らしい宣伝文句とは裏腹に、おしゃれなGUIなどでは設定できませんので、エディタ等でテキストベースで設定を書き換えます。
(ここまで出来ていて、何故自動ソフトウェア化しないのだろう??)

実際のパラメータ決定法

上記の計算結果をuser.hに入れて、コンパイルして、実行しようとしてもまずうまくいきません。
USER_MOTOR_RATED_FLUXの値が下限リミットに引っかかってしまい、エラーで弾かれるか、まともに動かないという結果になりがちです。
解決方法としては、excelのUSER_MOTOR_RATED_FLUXを使わない、というのが本末転倒ですが現実的なようです。

GUI ComposerのInstaSPIN-FOC MotorWare Instrumentationタブの右下の方に、Variable Overflow Checksがあり、この中の

Flux * Full Scale Freq [V] <

の項目がうまく設定できているかどうかのカギです。
要するに、この項目が下限電圧値を示していてFull Scale Freqの値はエクセルシート上ですでに計算していますから、Fluxの値をこれから直接計算してしまいましょう。
下限電圧値は、「電源電圧の半分に10%の余裕を持たせた値」としていますので、バス電圧が24Vの場合

24[V]/2*1.1=13.2[V]

です。
USER_IQ_FULL_SCALE_FREQ_Hzはエクセルシートの右側で、例えば800Hzとか513.3Hzなんていうオーダーの数値になっています。
試しに513.3Hzとすると、

Flux = 13.2[V] / 513.3[Hz] = 0.02571596 [V/Hz]

となります。エクセルと10倍程度違ったり、自動同定で見つけさせた値とかけ離れていたりしますが、こちらの値の方が上手くいくことが多いです。

これが、InstaSPIN-MOTION用だとまた少し違う項目が出てきます。が、それはまた次に。


[1]parameter settings: http://www.ti.com/lit/ug/spruhj1f/spruhj1f.pdf

特性の分からない3相DCブラシレスモーターをソフトウェアエンコーダを搭載したTiのマイコンボードLAUNCHXL-F28069MとモータドライバBOOSTXL-DRV8305EVMを使って動かす(その3)

Tiの製品はドキュメントが多いのはいいのですが、煩雑であまり整理されているようには見えません。
また、独自用語や独自製品名、独自技術名に変な名前を付けるのが好きで、ある程度一般的な技術知識を持ってる人が見ても、ちんぷんかんぷんな言葉が散見されます。
さらに、日本語訳されているドキュメントもあるにはあるのですが、途中で力尽きたのか触りの部分だけ翻訳されていたり、古いままだったりします。
なので、読むときには必ず英語ドキュメントと見比べるなど注意が必要です。

ここでは、資料と用語の簡単なまとめをしておきたいと思います。

資料の入手先

1. MotorWare

www.tij.co.jp
最初にこれをインストールします。
exe形式のアプリケーションなのですが、実態は技術資料のリンク集と、マイコンやインバータボード毎にまとめられたソフトウェアdriverやexampleのソースコード集です。
まず、これをインストールしておけば、だいたいの資料へのポインタはわかるようになります。
標準のインストール先は、c:\ti\motorwareの下になります。

*1

ちなみに、Motorwareと同様にTiのマイコン一般用のリソースをまとめたControlSuiteというアプリがありますが、モーター制御を主眼に置いて使用するなら不要です。シリアル通信のソースコードを参照する等、参考程度に使用してください。

起動すると、このようなリストが出ます。
f:id:cvl-robot:20161007151012p:plain

開発環境のインストール

最初にするべきことは、一番下のCCSのダウンロードとインストールです。
CCSはCode Composer Studioの略で、EclipseベースのTi C2000マイコン用の開発IDEです。
有料版と無料版がありますが、無料版でOKです。
ダウンロードには、ユーザー登録と用途の申請が必要になります。
こちらも標準のインストール先は、c:\tiの下になります。

開発資料の確認

MotorwareのResourcesを展開すると、
f:id:cvl-robot:20161007151720p:plain
このようなリストが出てきます。
見るべきところをさらに展開すると、
f:id:cvl-robot:20161007151940p:plain
このようになります。
マイコンボードF28069Mのハードウェアに関する情報と、
・インバータDRVV8305EVMについてのハードウェア情報と、
・Tiのマイコンシリーズ共通の技術情報、
・ユーザーガイドやチュートリアル
です。

2. C2000 Piccoloシリーズの開発入門

http://www.tij.co.jp/jp/lit/an/jaja230a/jaja230a.pdf
日本語で書かれた有用な資料ですが、翻訳が古く現在のバージョンでは致命的な問題がありますので、4章は絶対に読まないでください。
現在のバージョンでは、Flashへの書き込みはCCSの上だけでExampleのソース変更も不要でもっと簡単にできるようになっています。

固定小数点

c2000シリーズの多くは浮動小数点演算機能を持たず、あまり使い慣れない固定小数点で計算する必要があります。
IQmathライブラリという名前の固有小数点演算ライブラリが提供されており、一手間多くはなりますが慣れれば普通に計算できるようになります。

ADC

多チャンネルの入力を切り替えて使うタイプのADCで、タイミングや順序など細かい設定をプログラミングできるようになっています。
しかし、使い慣れない感じのAPIなので資料を読んでおくと有益です。

SCI(UART)

RS232で知られるいわゆるUARTシリアル接続は、TIのマイコンではSCIと呼ばれます。
これも少し煩雑なので、読んでおいた方が良いです。

用語のメモ

TRM(Technical Reference Manual)のSoftware Architectureの最初の方に記述があります。

APIApplication Programming Interface
ACIM – Alternating Current Induction Motor
ADC – Analog-to-Digital Converter
ePWM – Enhanced Pulse Width Modular
FIFO – First In, First Out
GUI – Graphical User Interface
HAL – Hardware Abstraction Layer
IDE – Integrated Development Environment
ISR – Interrupt Service Routine
MCU – Micro-Controller Unit
PIE – Peripheral Interrupt Expansion
PWM – Pulse Width Modulation
PMSM – Permanent Magnet Synchronous Motor
RAM – Random Access Memory
ROM – Read Only Memory
RTOS – Real Time Operating System
SOC – Start Of Conversion

Piccolo F2806xM InstaSPIN-MOTION TRMの54ページに記述があります。

ACIM — Alternating current induction motor. (交流誘導電動機, 交流誘導モーター)
ADRC — Active Disturbance Rejection Control. (自動外乱排除制御) Estimates and compensates for system disturbance, in real-time. (実時間での、システム外乱の推定と補償)
CCStudio — Code Composer Studio. (コードコンポーザースタジオ、開発環境)
FAST — Unified observer structure which exploits the similarities between all motors that use magnetic flux for energy transduction (磁束エネルギー伝達を使うすべてのモータの類似性を利用した統一オブザーバ機構), automatically identifying required motor parameters and providing the following motor feedback signals: (必要なモータパラメータの自動推定と以下のモーターフィードバック信号)
• High-quality Flux signal for stable flux monitoring and field weakening. (安定な磁束観測と弱め界磁のための高品質な磁束信号)
• Superior rotor flux Angle estimation accuracy over wider speed range compared to traditional observer techniques independent of all rotor parameters for ACIM.
• Real-time low-noise motor shaft Speed signal.
• Accurate high bandwidth Torque signal for load monitoring and imbalance detection.
FOC — Field-oriented control.
Forced-Angle — Used for 100% torque at start-up until the FAST rotor flux angle tracker converges within first electrical cycle.
InstaSPIN-FOC — Complete sensorless FOC solution provided by TI on-chip in ROM on select devices (FAST observer, FOC, speed and current loops), efficiently controlling your motor without the use of any mechanical rotor sensors.
InstaSPIN-MOTION — A comprehensive motor-, motion- and speed-control software solution that delivers robust system performance at the highest efficiency for motor applications that operate in various motion state transitions. InstaSPIN-MOTION builds on and includes InstaSPIN-FOC, combined with SpinTAC™ Motion Control Suite from LineStream Technologies.
IPM — Interior permanent magnet motor.
LineStream Technologies — Pioneers in the world of embedded controls software. Boasting a team of motor control experts from six different countries cumulatively speaking fifteen languages and possessing over eighty years of industry experience, LineStream is fast becoming the world's preeminent stronghold of embedded motor control knowledge.
Motor Parameters ID or Motor Identification — A feature added to InstaSPIN-FOC, providing a tool to the user so that there is no barrier between running a motor to its highest performance even though the motor parameters are unknown.
PI — Proportional-integral regulator.
PMSM — Permanent magnet synchronous motor.
PowerWarp™ — Mode of operation used for AC induction motors (ACIM) that allows minimum current consumption.
Rs-Offline Recalibration — InstaSPIN-FOC feature that is used to recalibrate the stator resistance, Rs, when the motor is not running.
Rs-Online Recalibration — InstaSPIN-FOC feature that is used to recalibrate the stator resistance, Rs, while the motor is running in closed loop.
SpinTAC™ Motion Control Suite — Includes and advanced speed controller, a motion engine, and a motion sequence planner. The SpinTAC disturbance-rejecting speed controller proactively estimates and compensates for system disturbances in real-time, improving overall product performance. The SpinTAC motion engine calculates the ideal reference signal (with feed forward) based on user-defined parameters. SpinTAC supports standard industry curves, and LineStream’s proprietary "smooth trajectory" curve. The SpinTAC motion sequence planner operates userdefined state transition maps, making it easy to design complex motion sequences.
SVM — Space-vector modulation. (空間ベクトル変調)

あ、別にTiの製品の売り込みをしたいわけではないので、このページは機能や利点の紹介はしません。
自分で使うのに必要な情報を整理していきたいだけです。

今日の沼津漫画

GTRomanをはじめとする西風先生の漫画全般、おおよそ全部沼津です。愛にあふれていて超オススメ。ドラマ化されないかなー。
旧版 

GTロマン 1 (ヤングジャンプコミックス)

GTロマン 1 (ヤングジャンプコミックス)

完全版 
西風special selection GT roman完全版 1 (SPコミックス)

西風special selection GT roman完全版 1 (SPコミックス)

Kindle版 
GT Roman(1)

GT Roman(1)

ストラダーレムック版 
GT roman STRADALE 1 (GTロマン ストラダーレ 1) (Motor Magazine Mook)

GT roman STRADALE 1 (GTロマン ストラダーレ 1) (Motor Magazine Mook)

ストラダーレコミック版 
GT roman STRADALE SPECIALE (SPコミックス)

GT roman STRADALE SPECIALE (SPコミックス)

全部買うと良いです。

夏草冬涛 (上) (新潮文庫)

夏草冬涛 (上) (新潮文庫)

夏草冬涛 (下) (新潮文庫)

夏草冬涛 (下) (新潮文庫)

*1:英語のページでは、MotorWare™ is a cohesive set of software and technical resources for developing InstaSPI-FOC™ and InstaSPIN-MOTION™ based applications.これを直訳すると「モータウェアはInstaSPIN-FOCとInstaSPIN-MOTIONに基づくアプリケーションを開発するためのソフトウェアと技術資料をまとめたセットです。」と、ちゃんと書いてあるのですが、Tiの日本語のページには、「Piccolo InstaSPIN-FOC ソフトウェア・ィストリビューションは、C 言語、オブジェクト指向で、かつ API ベースの新しいモーター制御ライブラリ(モジュール、ドライバ、システム例、資料)を使用することで、開発を容易に、評価を迅速に実行。」とあります。機械翻訳なのかよほど日本語ができないのか、一事が万事こんな感じで酷い。

TiのC2000 PiccoloシリーズのマイコンボードLAUNCHXL-F28069MでUSB Serial Portを有効にする方法

ここに書いてあります。

Using the serial adapter of XDS100 - Texas Instruments Wiki

Windows用の情報です。

バイスのユーザマニュアル(山のようにある)をいくら読んでも、どこにも書いてありません。
Tiのドキュメントはいっぱいあるのですが、まともにバージョン管理もされておらず嘘や間違いだらけで役に立ちません。ひどい。
同じシリーズのLAUNCHXL-F28027Fでは何もせずに、USB SerialPortが見つかります。

手順は次の通り。
1. デバイスマネージャ→ユニバーサルシリアルバスコントローラ→TI XDS100 Channel Bを右クリック→プロパティ→詳細設定、を開く。
2. VCPをロードする、にチェックしてOK。ちなみにVCPはVirtual COM Portの略。
3. デバイスのUSBケーブルをいったん抜いてさし直す。すると、新しいデバイスの認識が始まる。

もしデバイスを買ってきたばかりでFlashに何の書き込みもしていなければ、デモプログラムで動作を確認できます。
1. PuttyTeraTermなどのターミナルで、認識されたCOMポートに接続してください。
2. baudrateを115200に設定してください。
3. マイコンボード上のResetボタンを押してください。すると、次のような画面が表示されます。随時、基板上の温度計の温度が更新されます。

77777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777777777777777:::::::::::::77777777777777777777777777777777777777777
77777777777777777777777:::::::::::::77777777777777777777777777777777777777777
77777777777777777777777:::::::::::::7777777=~~~:~7777777777777777777777777777
77777777777777777777777:::::::::::::7777777::::~I7777777777777777777777777777
77777777777777777777777:::::::::::::7777777:::::77777777777777777777777777777
77777777777777777777777:::::::::::::777777~::::~77777777777777777777777777777
77777777777777777777777::::::::::::~77777777777777777777777777777777777777777
77777777777777777777777::::::::::::~~:~~77:::::777~:::::::::+7777777777777777
77777777777777777777777::::::::::::::~:77I:::::77::::::::::~+7777777777777777
77777777777777777777777:::::::::~::~~~~77~:::::77~~~:~::::::+7777777777777777
77777777777777777777777::::::::::::::~=77~::::I7?::~::::::::+7777777777777777
77777777777777777777777::::::::::~~+++77I~:~::77++++~:::::::+7777777777777777
77777777777777777777777:::::::::::777777~~:~:~777777~::::::::7777777777777777
77777777777777777777777::::::::::~777777~::::777777I~::::::::7777777777777777
7777777::::::::::::::::::::::::::+777777:~:::777777::::::::::~777777777777777
77777777::::::::::::::::::::::::::::~77?:~~:~77:::::::::::::::::7777777777777
77777777I::::~:::::::::::::::::::::::77~::::=77:~:::::::::::::::7777777777777
7777777777:~:::::::::::::::::::::::~?77::::~77=:::::::::::::::::7777777777777
777777777777:~:::::::::::::::::::::~77=:::~:77~:::::::::::::::::7777777777777
7777777777777~~:::::::::::::::::::::77~:::~?77::::::::::::::::::7777777777777
77777777777777~::::::::::::::::::::I77::~::77~~:::::::::::::::::7777777777777
777777777777777::~:::::::::~:~::~:~77~:::::77?~~~~~:::::::~~::::7777777777777
777777777777777?:::::::::~::::::~::77777777777777:::::::~::::~~?7777777777777
7777777777777777~::::::~7777~:::::~7777777777777+::::::::~~777777777777777777
77777777777777777?~~~:77777777:~::~7777777777777::::::~7777777777777777777777
777777777777777777777777777777?:~~~+777777777777~::::777777777777777777777777
7777777777777777777777777777777~:::::~:~::~~~~~:~::?7777777777777777777777777
77777777777777777777777777777777~~::::::::::::::::777777777777777777777777777
77777777777777777777777777777777I::::::::::::::~~7777777777777777777777777777
777777777777777777777777777777777+~::::::::::::~77777777777777777777777777777
7777777777777777777777777777777777I~~::::::::::I77777777777777777777777777777
77777777777777777777777777777777777:~::::::::::777777777777777777777777777777
777777777777777777777777777777777777+::~:::::::777777777777777777777777777777
77777777777777777777777777777777777777~~::::::::77777777777777777777777777777
7777777777777777777777777777777777777777~:::::::77777777777777777777777777777
7===========================7777777777777777II77777=========================7
7| Texas Instruments |77777777777777777777777| F28069M InstaSPIN |7
Current Temperature: |77777777777777777777777| Motion LaunchPad |7
47 Celcius = Ref + 0 ======77777777777777777777777=========================7
77777777777777777777777777777777777777777777777777777777777777777777777777777

このサンプルのソースコードをシリアル接続の参考に使いたいのだけれど、ソースコードの場所が見つかりません。
たぶんcontrolSUITEの中だけど、マニュアルにも書いてない。どこだー?

発見!
C:\ti\controlSUITE\development_kits\LAUNCHXL-F28069M\LaunchPadDemo
一緒に参照のこと
C:\ti\controlSUITE\device_support\f2806x\v150\F2806x_common\source\F2806x_Sci.c

/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled disabled by the user.
// This will enable the pullups for the specified pins.
GpioCtrlRegs.GPAPUD.bit.GPIO28 = 0;    // Enable pull-up for GPIO28 (SCIRXDA)
GpioCtrlRegs.GPAPUD.bit.GPIO29 = 0;    // Enable pull-up for GPIO29 (SCITXDA)

/* Set qualification for selected pins to asynch only */
// Inputs are synchronized to SYSCLKOUT by default.
// This will select asynch (no qualification) for the selected pins.
GpioCtrlRegs.GPAQSEL2.bit.GPIO28 = 3;  // Asynch input GPIO28 (SCIRXDA)

/* Configure SCI-A pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be SCI functional pins.
GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1;   // Configure GPIO28 for SCIRXDA operation
GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1;   // Configure GPIO29 for SCITXDA operation

今日の個人的にアニメ化希望の漫画

鈴木小波 ホクサイと飯+ホクサイと飯さえあれば


ホクサイと飯 (単行本コミックス)

ホクサイと飯 (単行本コミックス)




ただひたすらブンが可愛いくて美味しそうなご飯を作って食べるだけの漫画。

ユキヲ 邪神ちゃんドロップキック

ただひたすら邪神ちゃんが意外に素直でかわいいだけの漫画。

堀泉インコ 愛しの花凛

愛しの花凛 1巻 (まんがタイムKRコミックス)

愛しの花凛 1巻 (まんがタイムKRコミックス)

愛しの花凛 2巻 (まんがタイムKRコミックス)

愛しの花凛 2巻 (まんがタイムKRコミックス)

愛しの花凛 3巻 (まんがタイムKRコミックス)

愛しの花凛 3巻 (まんがタイムKRコミックス)

ただひたすら花凛が可愛いだけの漫画。完結。

青木幸子 茶柱倶楽部

茶柱倶楽部 5 (芳文社コミックス)

茶柱倶楽部 5 (芳文社コミックス)

茶柱倶楽部 6 (芳文社コミックス)

茶柱倶楽部 6 (芳文社コミックス)

茶柱倶楽部 7 (芳文社コミックス)

茶柱倶楽部 7 (芳文社コミックス)

茶柱倶楽部 8 (芳文社コミックス)

茶柱倶楽部 8 (芳文社コミックス)

お茶を飲むと幸せになるお話。すごく良いです。完結。

特性の分からない3相DCブラシレスモーターをソフトウェアエンコーダを搭載したTiのマイコンボードLAUNCHXL-F28069MとモータドライバBOOSTXL-DRV8305EVMを使って動かす(その2)

InstaSPINって何でしょう?
www.tij.co.jp

モーター制御ソリューションとのことですが、ずばり何なのかの説明がありません。
宣伝文句はいっぱい書いてあります。
・モーターのデータシートが不要
・センサレス、三相モーター
・簡単

読み進めていくと、3つのソリューションが列挙されています。
・InstaSPIN-MOTION
・InstaSPIN-FOC
・InstaSPIN-BLDC
宣伝文句がもっといっぱい書いてあります。しかし、それがズバリ何なのかは書かれていません。
いろいろ調べていくと少し何なのか自分なりに分かってきたのでまとめます。

InstaSPIN-MOTION

InstaSPIN-MOTIONは、トルク制御、速度制御、位置制御用のソフトウェアです。
三相同期(DCブラシレス)モータまたは三相誘導モータに使えます。
・トルク制御はセンサレス(というか原理的に位置センサは不要)、
・速度制御はセンサレス・センサ(エンコーダ)有り両方対応、
・位置制御はセンサ必要。(今のところ、エンコーダのみ対応。DRV8301-69M-KITのみHallセンサのexample有り。)
LineStream(http://linestream.com/platforms/)という会社のSpinTACという慣性推定技術を利用して、厄介な負荷(イナーシャ)を扱う場合でもモータの制御をPID制御よりも少ないパラメータで簡単にできるようにします。
次に紹介するInstaSPIN-FOCおよび、その基幹技術てあるソフトウェアエンコーダFASTを利用しています。

InstaSPIN-FOC

FOC(フィールドオリエンテッドコントロール)は、三相モータのベクトル制御技術の中の進化した一手法で、一般の用語です。
英語版WikipediaVector control (motor) - Wikipedia)に詳しいです。
三相モータの解析が進み、各相(最近は1相分(1抵抗による電流検出)でも)の電流でモータの位置推定ができるようになり、センサレスでの駆動ができるようになりました。

TiのいうInstaSPIN-FOCとは何かを見ていきますと、
・モーターの種類とパラメータの自動特定とパラメータチューニング
・ソフトウェアエンコーダ(FASTという名前)
・トルク制御用コントローラ、またはPI制御による速度制御用コントローラ
・弱め界磁制御。(最高速を伸ばす)
・強め界磁制御。(最大トルクを伸ばす)
という機能を提供するソフトウェアです。
FASTはソフトウェア技術ではあるのですが、ROMに焼き付けられているので特定のハードウェアTiのマイコンPiccoloシリーズが必要になります。

InstaSPIN-BLDC

Tiのモーター制御学習用kit用の学習のためのおしゃれなGUIソフトウェアのように見えますが、よくわかりません。
DRV8301-HC-C2-KIT、DRV8302-HC-C2-KIT、DRV8312-C2-KIT などで使えるようですが、他のボードで動くかどうかよくわかりません。


まとめると、

トルク制御用:
        InstaSPIN-FOC対応Piccoloマイコンボード製品
        (LAUNCHXL-F28027F, LAUNCHXL-F28069Mなど)
速度制御用:
  PI制御で良い場合:
        InstaSPIN-FOC対応Piccoloマイコンボード製品
        (LAUNCHXL-F28027F, LAUNCHXL-F28069M)
  負荷イナーシャが厄介な場合:
        InstaSPIN-MOTION対応Piccoloマイコンボード製品
        (LAUNCHXL-F28069M)
位置制御用:
  位置センサ必須。
  エンコーダの場合:
        InstaSPIN-MOTION対応Piccoloマイコンボード製品(LAUCHXL-F28069M)
  ホールセンサの場合:
        DRV8301-69M-KIT

ホールセンサのexampleが用意されているのは、2016年9月現在DRV8301-69M-KIT用のみです。
改造すれば他のボードでも使えるよとのことですが、公式掲示板の情報によれば、次期Motorwareにならないと公式対応はしないようです。
10月リリース予定とのことですが、平気で半年ぐらいリリースが伸びるので、あてにしない方が幸せだと思います。

モータドライバの電力段は、BOOSTXLシリーズの中からモータの定格電圧などに応じて決定します。

モーター・ドライブ・ブースタパック、DRV8301 および NexFET™ MOSFET 付き - BOOSTXL-DRV8301 - TI ツール・フォルダ
DRV8305N 三相モーター駆動 BoosterPack 評価モジュール - BOOSTXL-DRV8305EVM - TI ツール・フォルダ

とりあえず何でもいいなら、LAUNCHXL-F28069M+BOOSTXL-DRV8305EVMの組み合わせを買っておけば良さそうです。
誤解があるかもしれませんので、間違えがありましたら是非ご指摘ください。


F28069M LaunchPad: Project 0

余談:オープンソースハードウェアのモータードライバーVESC

即モータードライバーをトルク制御または速度制御用として利用したい場合は、Tiの評価ボードよりこちらの方が出来が良いです。
最新版では、自動パラメータ推定もできるそうです。
[1] VESC: VESC – Open Source ESC | Benjamin's robotics
[2] enertion:【購入先】 http://www.enertionboards.com/electric-skateboard-parts/vesc-standard/
知らない間に新モデルに切り替わってますね。 http://www.enertionboards.com/electric-skateboard-parts/vesc-x-motor-controller/
[3] 入門用チュートリアル: New vesc user? Read This - COMPLETE WALKTROUGH OF THE VESC - E-Board Electronics - Electric Skateboard Builders Forum | Learn How to Build your own E-board

Tiの同じシリーズのFETドライバやIRのFETなど最先端のデバイスを組み合わせて電力段を小さく作っています。
また、多くのインターフェースを提供していて、シリアル、CAN、PPM、USBなどが使えます。
また、エンコーダとホールセンサー共に対応しています。
価格は、1万5千円ほどで、入手は今のところ海外から輸入するか自分で基板を作るしかなさそうです。
Rtやヴィストンなどで、扱ってくれるようにならないかなー。


今日の女騎士漫画

「くっ…殺せ!」を著者が書きたいがための人気ジャンルですね。中身はどうでもいいんです。
女騎士さん、ジャスコ行こうよ 2 (MFコミックス アライブシリーズ)
女騎士、経理になる。 (2) 【電子限定おまけ付き】 (バーズコミックス)
女騎士さまは屈しない!: 2 (REXコミックス)
姫騎士さんとオーク1 (ヴァルキリーコミックス)

特性の分からない3相DCブラシレスモーターをソフトウェアエンコーダを搭載したTiのマイコンボードLAUNCHXL-F28069MとモータドライバBOOSTXL-DRV8305EVMを使って動かす(その1)

超薄型高性能100W級の3相DCブラシレスモーターを入手したので、これを色々な用途に活用したいのですが細かな仕様書がありません。
モータードライバーも手元には大きなものしかなく、ロボットには使いにくい状態です。
また、研究室には15年前のオシロスコープなどの簡単な設備しかありません。
これを何とかお手軽に使う方法を調べてまとめて行きたいと思います。

1.製品調査

既製品

三相DCブラシレスモーター用ドライバー製品はいくつか出ているのですが、いずれも大きい、重い、値段が高い、という壁を突破できず不採用です。
また、入力電圧の仕様もAC100~230V前提のものばかりです。

STマイクロ P-NUCLEOシリーズ

次に調べたのが最近出た雑誌です。インターフェース5月号に半導体メーカーの販売するモータードライバー評価キット一覧が記載されていました。

記事の著者の一押しはSTマイクロのP-NUCLEO-IHM001をはじめとする一連のモータードライバー評価キットのようで、記事でもかなりの紙面を割いて紹介されていました。
なので、これを購入してみたのですが、色々調べていくと気になる点が次から次へと出てきます。(さすがイタリア製)
問題点を列挙すると、

  • 無改造では電源電圧24Vで使えない。基板上のレギュレータが15V耐圧だそうです。
  • 弱め界磁制御が使えない。無償版の開発環境では、メモリの容量が足らないのだそうです。なんだそりゃ。
  • 大出力用のものは入手製が悪い。IHM008を注文したのですが、納期に2ヶ月かかるそうです。(キャンセルしたい、注文しちゃったよ。。。結果、ディスコンでキャンセルされました.)

こじゃれた内蔵のベクトル制御ソフトウェアやGUIはとても魅力的だし、Hallセンサなどもすっと繋げる仕様で勉強になりそうで良さそうなのですが、いまいち製品の信頼性が足らない感じです。
他のを試してだめだったら戻ってくることにして、とりあえず別の可能性を探ることにします。


中出力用モータドライバの本命が来ましたね。
http://www.st.com/ja/evaluation-tools/steval-spin3201.htmlwww.st.com

東芝TMPM375

同じ雑誌の後ろのほうで東芝のベクトル制御エンジンがハードウェア実装されたマイコンが紹介されていました。
製品設計をするわけではないのでコストはそこまで厳しくないため、電力段の設計はIPMなどで手抜きをすれば、簡単に自前のモータドライバーが作れそうです。
でも、情報少ないし入手製も悪いので、腰をすえなければ扱えません。
また、今回作りたいのは低電圧モータ用ドライバーなのですが、IPMは高耐圧用が普通でFETのオン抵抗が高くなってしまいます。
また、IGBTの代わりにMOS-FETを使ったIPMも、ROHMや三菱から最近出てきたのですが、数が少なく価格も高いためにまだ扱いづらい状況です。
なので、これを使って自作ドライバーを作ってみたい憧れはありますが、見送りです。

TI InstaSPIN

オーディオ用デジタルアンプでTIの製品を何度か扱い、電力デバイスの性能の高さと機能の充実は知っていたので、良いモータードライバがあるのではないかと思い調べてみました。
すると、ちょうどぴったりの製品が見つかりました。

BOOSTXL-DRV8305EVM
www.ti.com

です。
WEBページには、なんか凄そうな文句がいっぱい並んでいますが、ドキュメントが多すぎて逆に良く分かりません。
ちょっと時間を掛けて調べていきましょう。

今日のファンタジーロールプレイングゲームみたいな漫画

めいびい 結婚指輪物語


結婚指輪物語 1巻 (デジタル版ビッグガンガンコミックス)

結婚指輪物語 2巻 (デジタル版ビッグガンガンコミックス)

結婚指輪物語 3巻 (デジタル版ビッグガンガンコミックス)
かつて神だった獣たちへ、も良いのですが、こちらの方が少し明るい話。ただ、ページ長と話の展開がぴったりはまり過ぎて、少し先の展開が読めてしまう。

もち 魔女の下僕と魔王のツノ


魔女の下僕と魔王のツノ 1巻 (デジタル版ガンガンコミックス)

魔女の下僕と魔王のツノ 2巻 (デジタル版ガンガンコミックス)

魔女の下僕と魔王のツノ 3巻 (デジタル版ガンガンコミックス)

魔女の下僕と魔王のツノ(4) (ガンガンコミックス)

魔女の下僕と魔王のツノ (5) (ガンガンコミックス)

おこぼれ姫と円卓の騎士


おこぼれ姫と円卓の騎士(1) (ARIAコミックス)

おこぼれ姫と円卓の騎士(2) (ARIAコミックス)

おこぼれ姫と円卓の騎士(3) (ARIAコミックス)
原作は小説で、漫画は3巻で止まっている模様。少女漫画の枠。

このジャンルの漫画は、他にもいっ~~~ぱいあります。

勇者が死んだ!(6) (裏少年サンデーコミックス)