デジタル鉄道模型フォーラムDCC・メルクリン等のデジタル鉄道模型の話題でコミュニケーションできる場です。登録・利用は無料です。
デスクトップステーション(DesktopStation)のページはこちら
・無料の日本型超高品質DCCサウンドデータをWebで配布中!
・鉄道模型をスマホで簡単制御!国産で革新的なコマンドステーション DSair2はこちらから。

2015年10月30日

CV読み出し方法

CVの読み出し方法について、今まで完全に勘違いしていたことに気づきました。

CVの読み出しには、Railcomのような特殊な機能があるのだろうと思い込んでいたのですが、実はCVのVERIFY機能を使うことで、1bitずつCV値ごとに電流応答を見ることで読み出しができるということを知りました。

非常に恥ずかしい限りです。申し訳ありません。
ただし、電流センサはDSmainR5から搭載を始めるので、CV読み出し機能は入るとしてもDsmainR5のみとなります。

スマイルデコーダで使っているNMRADCCライブラリも、上記の方法は対応していることはソースコードを確認できたましたので、CV読み出しもたぶんできると思われるので、実際にDSmainR5で機能を実装して確認を進めていきたいと思います。

■CV読み出しの方法

(1) SERVICE MODEのDIRECT MODEの手順を使う
(2) CV MANIPULATION MODEをBit Verifyに指定する
(3) データを0にして、1ビットずつシフトしながら合計8回、Verifyを行う。
→Verify信号を送ったらすぐに電流センサを監視して、60mAを超えたかどうかをチェックする。複数回見て、カウントを行ってある一定回数以上、60mAを超える条件があったら、ビットに1を立てる。
(4) データを1にして、1ビットずつシフトしながら合計8回、Verifyを行う。
→(3)と同じ電流検出処理をする
(5) 得られた16bitの値で、(3)で得られた方のデータを反転する
(6) (4)のデータと(3)の反転データが一致しているか確認する
(7) 一致していれば、CV値はその値で決定。一致していなければエラーとする

Verifyモードは、ビットが立っている場合(立っていない場合)、デコーダが、一瞬電流を流すので、それを電流センサで検出して、ビットの立ち具合を8回記録すると、8ビットのデータが生成できることになります。

ビットが立っている場合と、ビットが立っていない場合の合計16回やれば、一応、データの照合もできるということになります。

CVの実装をするときにVERIFYなんてどうやって使うんだろう、と考えていましたが、まさか読み出しに使うとは思いもしませんでした。いやはや、思い込みは良くありません・・・。

■追記(10/31)

RocoとPIKOの機関車を複数試して、問題なく読み出せました。10回やって10回成功。データの照合機能を入れているので、エラーの場合は、きちんと失敗という結果にはなるので2回目をやれば、読み出せます。

CVReader_DSmainR5.png

CV読み込みのコツも分かりました。モータに電流を流した状況を見て判断するので、デコーダでCV acknowledge用のパラメータをちゃんと調整しないと、うまくモータに電流を流せないので失敗するという事が分かりました。電流を流しすぎると動いてしまって逆にうまく読み取れない。

DSmainR5では、電流センサの精度をあまり細かくしてないので(最大20Aも取れるようにしてるので・・・)、50mA弱が流れると検出、というようにしました。限界ギリギリはよろしくないので、なるべくデコーダの DCC ackは100mA以上は流して欲しいです。

BrawaとESUのデコーダは、かなり苦労しましたがなんとか読み出せるようになりました。電圧が12Vだと電流があんまり流れないので検出失敗率が上がるので、15V以上の大きめの電圧にしておくのが良さそうです。欧州系なので、高めの電圧の設定なのかと思われます。なお、Brawaについてはメルクリン向けのシリーズで試しているので、もしかすると18Vくらいにしておかないといけないのかもしれない。

ということで、CV読みコマンドを実装して思ったのが、「CV読めると超便利!」ということです。今まで電流センサをケチって入れていなかったのはコストのためですが、ミドル〜プレミアムクラスにはCV読み出しは必須だということがよく分かりました。

DSmainR5からは価格もかなり上がりますが、出力は大幅アップでディスプレイも情報量が非常に増えますし、ケースもできますので、市販メーカーのものに見劣りしない製品に仕上げられるかと思います。

■さらに追記(10/31 10:40)

スマイルデコーダでも動作確認。ただし、notifyCVAck関数内のAnalogWriteでPWMを出力してDCC Acknowledgeとするが、この値をうまく調整しないと反応しない。100くらいが良さそう(モーターやPWM周波数によるので注意)
Nゲージだともっと小さくても良いかもしれない。
posted by yaasan at 19:10 | Comment(0) | 鉄道模型