Endless trail

寄り道好きのひとりごと
<< September 2019 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 >>
 
PR
RECENT COMMENT
  • KATO C56 (HOタイプ)を頑張ってオープンサウンド化にしてみる。
    MECY (08/30)
  • KATO C56 (HOタイプ)を頑張ってオープンサウンド化にしてみる。
    KAKKA (08/30)
  • KATO C56 (HOタイプ)を頑張ってオープンサウンド化にしてみる。
    MECY (08/27)
  • KATO C56 (HOタイプ)を頑張ってオープンサウンド化にしてみる。
    KAKKA (08/26)
  • Next18のSmileDecoderを試す
    MECY (08/13)
  • Next18のSmileDecoderを試す
    なごでん (08/13)
  • Hoゲージの大ジオラマでC59を思いきり走らせてみた
    KAKKA (08/11)
  • Hoゲージの大ジオラマでC59を思いきり走らせてみた
    MECY (08/11)
  • Hoゲージの大ジオラマでC59を思いきり走らせてみた
    KAKKA (08/09)
  • Hoゲージの大ジオラマでC59を思いきり走らせてみた
    KAKKA (08/09)
MOBILE
qrcode
PROFILE
無料ブログ作成サービス JUGEM
 
帰ってきたBEMF
 なんか昔の特撮ヒーロものみたいなおかしなタイトルになってますが、今回は 自分では出来たかな?と思っていたBEMFのスケッチが、名古屋電鉄さんから何かスピードが出ないよ?おかしいよ?とのコメントを頂いて、改めてチェックしたところ、確かにBEMF有の場合フルスロットルにしてもBEMFなしの場合と比べると速度の乗りが今ひとつで高速域が出ていない事に今更ですが気がつきました。本家のYaasanさんからも「検出BEMF電圧値のゲインが掛かってないのでは・・」とのコメントも頂いて、またもやBEMFの世界に帰ってくることになりました。
 まずは基本に戻って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が無い場合、速度が物凄く出るのを改めて認識しました。ですが常時こんな高速で走らせるケースはあまりないと思います。みなさん速度の出しすぎは程々になさってくださいね。長時間速度を出しすぎると多分モーターかデコーダが死にます。
 
BEMF | 15:13 | comments(4) | - |
スポンサーサイト
- | 15:13 | - | - |
コメント
from: MECY   2016/06/12 11:37 PM
名古屋電鉄さま
最高電圧設定を可能にしていただいたスケッチありがとうございます。
完成度も汎用性も備わってきたので、あとは耐久性と安定性が確認されればと思います。
from: 名古屋電鉄   2016/06/12 9:13 AM
MECY様

名古屋電鉄です。

ありがとうございます。
完成度が上がりましたね。
BEMFをoffにして最高速でぶん回すのが気になる人のためにCV5 最高電圧の設定に対応したスケッチを送りました。
登り・下り坂はないですが、今日の運転会で試運転してみます。
from: MECY   2016/06/12 1:30 AM
Yaasanさま
コメントありがとうございます。まだ改良の余地は残っていると思いますが、Yaasanさまの的確なアドバイスと名古屋電鉄さまのご支援により完成度が上がったと思います。ありがとうございました。
from: Yaasan   2016/06/11 6:13 PM
BEMFフィードバックの係数調整機能、ありがとうございます!自分は違うことばかりやってしまい、本当に助かります。
ついでに進行方向も対応していて、完成度が非常に上がったと思います。

市販のデコーダに負けないものが出来たと思います。MP3デコーダとの組み合わせも楽しみです。

コメントする









 

(C) 2019 ブログ JUGEM Some Rights Reserved.