一定期間更新がないため広告を表示しています
名古屋電鉄様から「BEMFのスケッチCV2が効いてないじゃない?」とのご指摘があったのに、色々とごにょごにょしようとする前に、PCをWindows10にアップグレードしようとして、まんまとし損なってしまいました。スケッチをいじくるPCを復旧する間はまったく手がつけられず対応が遅れていましたが、何とかなりましたのでご報告します。
前作で名古屋電鉄との共同作業でBEMFのスケッチにCV2(起動電圧調整)のしくみを入れたつもりだったのですが、この部分の確認が甘かったため、名古屋電鉄様のご指摘どおりCV2が全然効いていない状態でした。申し訳ございませんでした。
そこで改めてCV2が確実に効く様にスケッチを書き換えて試験走行をしましたところ、それらしい動きになることを確認しました。
試験走行の動画をご覧ください。
動力車がキハ47ディーゼルカーなのに貨車との編成でちょっと変ですが、重量がある編成でも低速からトルクが出ているところを見極めるため、おかしな点は多めにみていただきたいと思います。
■BEMF ON CV2:20(デフォルト)の場合
■BEMF ON CV2:60の場合
CV2が20(デフォルト)の場合はスピードメータを28〜30程に開けないと走り出しませんでしたが、改良スケッチでCV2を60に
設定した場合はスピードメータで4を指すあたりからスタートする様になったのでCV2が確実に効いているのではないかと考えてます。
但し車両メーカやモーターの特性でCV2の効きはじめは変わってきますので、そのへんは差し引いて観ていただきたいと思います。
ついでにBEMF OFFの場合の動画も撮りましたのでご覧ください。
■BEMF OFF CV2:60の場合
スピードメータで40程にならないと走り出しませんでしたので、BEMF+CV2の低速時の効果は絶大ではないかと思います。
今回の改良を入れたスケッチを貼っておきます。
・DSDCCDec_motor_BEMF_03c.zip
追記 6/30
スロットル0でもCV2の補正が掛っていたバグを修正したスケッチを貼っておきます。
-------------------------------------------------------
■追加されたCV項目
CV2 スタート電圧調整 (デフォルト:20)
CV3 加速率調整 (デフォルト:16)
CV4 減速率調整 (デフォルト:16)
CV5 最高速度調整 (デフォルト:255)
■その他
緊急停止コマンド受信時のメッセージ発令 (緊急停止ボタンでデジトラックス等のコントローラへメッセージを返す)
-------------------------------------------------------
■前作までのスケッチでサポートしているCV項目
CV29 正転/反転 Direction
CV54 BEMF速度係数(デフォルト値:3) ※有効設定範囲:0〜9
CV55 P(デフォルト値:32)
CV56 I(デフォルト値:96)
CV57 BEMFオプション(デフォルト値:0→BEMF OFF /1→BEMF ON)
*BEMFはオプションとしています
■その他
名古屋電鉄様のMP3デコーダのファンクション制御用スマイルデコーダ(SmileDecoderR4n)のスケッチとしても機能します。
※機能確認済み。暫定対応。
-------------------------------------------------------
・DSDCCDec_motor_BEMF_03b ← まだまだベータ版です
■謝辞
MECYが適当に書き汚してきたスケッチを整理してくださいました名古屋電鉄様には厚くお礼申し上げます。
まずは基本に戻ってBEMFのスケッチのチェックから始めました。特にYaasanさんから指摘を頂いたmotor_ctrl.cppのコードをメインに全体的に見渡しました。ここは自分では今まで特に手を入れてなかったコードなのですが一通り見渡して観て、まずはモータ速度のリミッターが掛かる箇所に不完全なコードを見つけたので、よし!判った!これが高速の足かせになってたんだな!と単純な思い込みのまま、まずはここの手直してみました。しかしそうは簡単に事は運ばす、コードは直したのに症状は以前と変わりなく..ん・・深くなりそうだなーと思い調査初日はそのまま寝てしまいました。それから何日かは決定的な解決策が見当たらず虚しい日々が過ぎていきましたが、ふと!Yaasanさんのコメント「検出BEMF電圧値にゲインを何もかけていないので、実際の速度に換算した電圧値に係数を掛けてあげないといけない・・」を思い打出し、んー確かにここは何も試してないなーチョットみておこうと、折れかけた心を奮い立たせつつやり始めました。
問題の箇所はモータの回転を検出する部分で一見するとコードそのもには問題はなさそうです。逆にへたにさわると動かなくなる重要な部分なので、今まではそのままにしていました。
■修正前
==============Before==============
//PI Control
if( gParam.mBEMFcutoff > 0)
{
//Speed detection
aSpeedDet = gMotorSpeed;
if( aSpeedDet < gParam.mBEMFcutoff)
{
//ある閾値以下は速度ゼロと見なす
aSpeedDet = 0;
}
else
{
//検出速度のオフセットをする
aSpeedDet = aSpeedDet - gParam.mBEMFcutoff;
}
//Command zero check
if( aSpeedDet == 0)
{
gZeroCount++;
if( gZeroCount > COUNT_ZEROMAX)
{
gZeroCount = 0;
gMotorPI_buf = 0;
}
}
else
{
gZeroCount = 0;
}
//BEMF時 PI制御
aSpeedRef_offseted = MOTOR_PI(aSpeedRef - aSpeedDet, gParam.mPI_P, gParam.mPI_I, &gMotorPI_buf) + ((aSpeedRef==0) ? 0 : gParam.mStartVoltage);
}
===============================
YaasanさんのコメントからするとどうもこのBEMFの検出そのものをなんとか調整せよ。との事らしいのですが自分では、はじめどうすれば良いのかさっぱりな状態でした。
今回のネタの肝な?コード
//Speed detection
aSpeedDet = gMotorSpeed;
名古屋電鉄さんもここはTRYしていた様で効果がなかったとの話だったので、はてさてどうーすれば?と思いつつTRY、ERRを繰りかえす度に確かに動きに変化が見えたので何か効果がありそうだと思いました。
最終的には下記の様なコードにしました。これが最適な係数の合わせ方なのか疑問?なところもありますが、車両の走りは劇的に改善しスピードも出る様になりました。
■修正後
==============after==============
//PI Control
if( gParam.mBEMFcutoff > 0)
{
//Speed detection
// aSpeedDet = gMotorSpeed;
aSpeedDet = gMotorSpeed * (1- 0.1 * gParam.mBEMFcoefficient); //MECY Adjust 2016/06/07
if( aSpeedDet < gParam.mBEMFcutoff)
{
//ある閾値以下は速度ゼロと見なす
aSpeedDet = 0;
}
else
{
//検出速度のオフセットをする
aSpeedDet = aSpeedDet - gParam.mBEMFcutoff;
}
//Command zero check
if( aSpeedDet == 0)
{
gZeroCount++;
if( gZeroCount > COUNT_ZEROMAX)
{
gZeroCount = 0;
gMotorPI_buf = 0;
}
}
else
{
gZeroCount = 0;
}
//BEMF時 PI制御
aSpeedRef_offseted = MOTOR_PI(aSpeedRef - aSpeedDet, gParam.mPI_P, gParam.mPI_I, &gMotorPI_buf) + ((aSpeedRef==0) ? 0 : gParam.mStartVoltage);
}
==============================
gParam.mBEMFcoefficient←係数?を掛け合わせている部分はCV54で1・2・3・・と任意に調整できる様にしました。
(デフォルト値:3)
あと、名古屋電鉄さんのご協力で将来的にMP3デコーダにも適用できる様に各CV値の配置換えとファンクションの拡張を行っています。
--------------スケッチ変更履歴メモ---------------
新設 →CV54:BEMF速度係数(デフォルト値:3) 0 /1 / 2 / 3 ~ 小さい程速度抑止
CV54→CV55:P(デフォルト値:32)
CV55→CV56:I(デフォルト値:96)
CV10→CV57:BEMFオプション(デフォルト値:0→BEMF OFF /1→BEMF ON)
*今回からBEMFはオプションとしています
他
新設 →CV29 正転/反転 Direction
F0〜F28 ファンクション拡張
----------------------------------------------
・DSDCCDec_motor_BEMF_03 ←まだベータ版です
BEMF有の2パターンとBEMFがないノーマル状態で動画を撮ってみましたので、ご覧ください。
■ BEMFで速度係数が掛かった場合の走行 CV54=4
■ BEMFで速度係数が掛かっていない状態の走行 CV54=0
■ BEMF無しの場合の走行
CV54を0にした場合は改良前のスケッチと同じ速度しかでませんが、CV54を大きくすれば速度をかなり出せる様になるのがわかると思います。
またBEMFが無い場合、速度が物凄く出るのを改めて認識しました。ですが常時こんな高速で走らせるケースはあまりないと思います。みなさん速度の出しすぎは程々になさってくださいね。長時間速度を出しすぎると多分モーターかデコーダが死にます。
(C) 2024 ブログ JUGEM Some Rights Reserved.