車載デコーダ

2010/06/06

桂庵で製作したデコーダです。

 

桂庵で作成したデコーダ関係のページです。

1.パケットモニター(工事中)
2.試作デコーダ(工事中)
3.小型のつもりデコーダ
4.HO用デコーダ 各種
5.Nゲージ用デコーダ
6.DN-EF65/60もどきデコーダ
7.ATtiny44標準デコーダ

1、2は、過去のDCC関係、DCCハード、ソフトのページにあります。

3.小型のつもりデコーダ
試作デコーダの結果を元に、P-FETドライブ回路を変更し、表面実装部品で作成したデコーダです。
Nゲージに何とか搭載できることを目標に作成しました。使用部品は、秋葉原で購入可能、あるいは国内通販で入手可能な表面実装部品としています。(2006年3月時点)
基板サイズは約 31mm x 12 mmです。最小部品は2012タイプ(2mm x 1.2mm) 部品です。基板厚は0.4mmです。

回路図を下に示します。
試作回路との大きな違いは、出力段P-FETのドライブ回路です。P-FETのゲート、ソース間は、トランジスタで駆動しています。試作回路では2KΩ抵抗でした。これは、試作回路の場合、P-FETに接続しているN-FETがPWMでスイッティングを行う時、P-FETのドレイン、ゲート容量によりP-FETがオンになる電圧が生じるためです。今回の回路はトランジスタにより低インピーダンスとしてP-FETがオンになるのを防いでいます。
 また、赤外LEDによる通信機能は省いています。省いた理由は、Atmega8は、内部発振器では16MHzの設定ができず、設定可能である最大の8MHzではLED通信の処理が間に合わなかったためです。



クリックすると大きくなります。

下にPCBを示します。
表面側パターンです。 CPU, モータドライバ回路です。



クリックすると大きくなります。

裏側のパターンです。(表から見た図)
電源回路、F0,F1ドライブ回路です。



クリックすると大きくなります。


TOMIX EF64 , EF66に搭載して使用中です。



クリックすると大きくなります。写真内の上がEF64、下がEF66です。EF66の重りを削るのに一日かかりました。
デコーダは小さいほうが良いと実感します。たまたま、EF64とEF66で基板の実装が表裏になり部品実装が見えます。

ヘッドライトLED電流制限用抵抗は、EF64が普通の抵抗、EF66は表面実装抵抗を用いています。

4.HO用デコーダ各種(2008/2/24)
HO用デコーダを作成しました。HO用の一番最初はモハネ581の床板に乗せたデコーダです。車両の改造、製作、モハネ581のページを参照して下さい。

モハネ581用デコーダ(あるいは上の小型のつもりのデコーダ)は、最初に設計したデコーダです。2年以上使用していますが、問題点が何箇所かあったので変更をかけました。変更点は、ハードのみです。ソフトに関しては2006年5月に対してPID計算後に加速制限機能を追加した以外変更はありません。AVR CPUのFUSEの値に関しては変更しています。

変更理由
1.CV値がばける。
CV値が変わってしまう事がありました。

2.動作しなくなる。
サービスモードでは、モータは駆動できるのに、通常モードで走行しなくなりました。
結論は、ソフト(Flash)がばけ、通常動作が出来なくなったようです。

3.走行時に過電流がながれる。
脱線もしておらず、通常走行のはずなのに、コマンドステーションが過電流を検出することがある。

CV値の異常、ソフト(Flash)の異常の原因として、AVR CPUに加わる電源電圧の急激な変化、およびAVR CPUのリセット電圧設定があっていない、が考えられます。
 急激な電圧変化は、走行時の集電不良のため電圧低下、および、集電復帰時の平滑コンデンサーへの大電流と考え、整流回路後の平滑コンデンサーの値の見直し、および、モータ駆動回路以外の電源へは、100オームの抵抗を直列に接続し、突入電流の増加を防いでいます。

 走行時の過電流については、これも集電に関係していると考えています。モータ駆動タイミングで集電不良となった場合、CPU電源電圧の低下によりCPUリセットがかかってしまい、モータ駆動用P-FET/N-FETがともにONとかなり貫通電流が流れると考えています。モータ駆動タイミングでは、N-FETゲートは"H"の状態となっており、この状態でCPUリセットとなるとN-FET駆動用I/Oがハイインピーダンスとなり、N-FETがONのままになります。また、P-FETはリセット時ONであるので、この状態では貫通電流が流れます。リセット時N-FETをOFFにするため10Kオームの抵抗をN-FETゲート,GND間に入れました。

回路図です。


現在 3台の機関車に搭載しています。

アリイEF65 1000番台

クリックすると大きくなります。

DE10(KATO) 半田レジスト塗り前の状態です。レジストを塗った後、DE10に搭載しています。

 

EF65 500番台(KATO)

DE10と同様に、ライト基板の寸法に合わせてデコーダを作成し、搭載しています。
ライトは電球色LED(3Φ)を使用しています。

ソフト
ソースコード...DecoderMain168.zip

FUSE設定
ATmega8は、低電圧動作品と通常品でFUSE LOW設定を分けています。FUSE HIGHは同じです。

FUSE HIGH
bit7 1 RST Disenable
bit6 1 WDT ON
bit5 0 SPI Enable
bit4 1 CLK Opt
bit3 1 EE Save
bit2 0 BOOTSZ1
bit1 0 BOOTSZ2
bit0 1 BOOTRST

FUSE LOW
bit7 ATmega通常品0, 低電圧品1 BOD Level
bit6 0 BOD Enable
bit5 1 SUT1
bit4 0 SUT0
bit3 0 CK SEL3
bit2 1 CK SEL2
bit1 0 CK SEL1
bit0 0 CK SEL0

CV設定
[CV1]7bitアドレス
Bits 0-6 に7ビットアドレスを格納します。アドレスは 1 から 127までです。bit7は "0"でなければいけません。また、アドレスを0とした場合はNMRA規格以外のものとなるので指定してはいけません。0の場合の動作保証はしておりません。デフォルト3です。
[CV8]メーカID
0のままです。書き込みはしないで下さい。
[CV11]DCC Packetタイムアウト
デコーダが正しいDCC Packetを受け取れなかった場合、デコーダが警告のためにモータ、ファンクションのオン、オフを繰り返します。このCV値は、デコーダが警告動作を始めるまでの時間を指定します。単位は1msです。100-250の間で指定してください。デフォルトは250(ms)です。
[CV17]拡張(14bit)アドレス(上位)
拡張アドレス時の上位アドレスを指定します。拡張アドレスが適用されるのは、CV29のbit5が"1"の場合です。CV17に拡張アドレス下位が格納されます。CV18に格納される値は11000000 から11100111までです。
[CV18]拡張(14bit)アドレス(下位)
拡張アドレス時の下位アドレスを指定します。拡張アドレスが適用されるのは、CV29のbit5が"1"の場合です。CV18は0-255までの値が格納できます。
[CV19]総括アドレス
bit0-bit6に7bitの総括アドレスを格納します。bit7に、走行方向が格納されます。bit7が"1"の場合は通常方向、"0"の時は反対になります。bit0-bit6がすべて"0"の場合は、総括走行状態は解除されます。
[CV29]デコーダ設定
Bit 0 = 走行方向: "0" = 通常, "1" = 反対。ヘッドライト等も同様に動作
Bit 1 = FL制御bit位置: "0" = 速度方向命令bit 4, "1" = 機能グループ1命令bit 4("1"に固定)
Bit 2 = 電源変換: "0" = NMRA Digitalのみ, "1" = 変換可能("0"に固定)
Bit 3 = 双方向通信: "0" = 双方向通信オフ, "1" = 双方向通信オン("0"に固定)
Bit 4 = 速度テーブル: "0" = 速度テーブルオフ, "1" = 速度テーブル(CV66-CV95)オン("0"に固定)
Bit 5 = アドレス設定:"0" = 7bitアドレス, "1" = 拡張(14bit)アドレス
Bit 6 = 予約("0"に固定)
Bit 7 = デコーダ種別: "0" = マルチ機能デコーダ, "1" = アクセサリーデコーダ("0"に固定)
[CV49]PID設定
PID制御の設定、PID制御状況のLED出力設定を行う。
抵抗補正制御は、起動時駆動値(CV65)、走行抵抗補正値(CV59)を用いてPID制御を行います。回転数補正制御は、目標電圧値を指定速度に対して回転数補正値(CV58)の割合に補正します。CV58は%で入力します。
Bit 7 = 予約
Bit 6 = 予約
Bit 5 = 予約
Bit 4 = 予約
Bit 3 = 予約
Bit 2 = 抵抗補正制御:"0" = 抵抗補正制御オフ、"1" = 抵抗補正制御オン
Bit 1 = 回転数補正制御:"0" = 回転数補正制御オフ、"1" = 回転数補正制御オン
Bit 0 = PID状況出力:"0" = 出力オフ、"1" = 出力オン
[CV55]PID比例項係数
PID制御の比例項の値。PID計算では、この値を十分の一にしてPID計算を行う。この値が"0"の時はPID制御オフ。
[CV56]PID積分項係数
PID制御の積分項の値。PID計算では、この値をそのまま使用してPID計算を行う。
[CV57]PID微分項係数
PID制御の微分項係数。PID計算では、この値を千分の一にしてPID計算を行う。
[CV58]回転数補正値
目標モータ回転数に対する補正値を%で入力します。この補正はモータ内部の抵抗を補正するためのものです。PID計算上は目標電圧とこの回転数補正値を掛け、モータ逆起電力と比較しています。従って、この値を小さくすると最高速度が遅くなります。
[CV59]走行抵抗補正値
車両の走行抵抗です。128ステップ値で入力します。この値は、車両が停止しない最低の128ステップ値とします。
[CV60]加速駆動制限値(2007/12/9追加)
この値は、現在の速度(BEMF値)から、加速の変化を制限します。
例として、加速駆動制限値を40に設定した場合、現在のBEMF値が10であり、指示速度が速くPID計算値が80(7 bit)になった場合でも、BEMF値 + 加速制限値 = 50に駆動を抑えます。
集電不良時の急加速を防ぐためです。CV3のAcceleration Ratioと似てますが、時間軸に対する計算は行っていません。128ステップ値で入力します。最小値はCV65の起動時駆動補正値となります。起動時駆動補正値よりは大きな値が必要です。
[CV65]起動時駆動補正値
車両起動値。128ステップ値で起動のための速度データを格納します。起動時(車両停止から起動時)にこの値でモータ駆動されます。


5.Nゲージ用デコーダ

KATO キハ82系、TOMIX 583系(クハネ581)用デコーダの紹介です。
これらのデコーダはアトメルATtiny45で作成したものです。ATtiny45でのデコーダの作成は、ATtiny26の後長い間試験をしてきましたがなかなか動作しませんでした。その後PID動作試験用にATmega168を使用したため、IOピンが似ていてQFPが入手できたATmega8でのデコーダを作成してきました。

最近、HOからNゲージに戻ってきたので、ATtiny45でのデコーダを本格的に検討し、やっとどうにか動作するものが出来たので回路図、ソフトを紹介します。

ただ、まだ、なにかATmega8での動作と比較して不安定な感じを受けています。この原因としては、

@ ソフト書き込みでATtiny45にダメージを与えている。
 これは、DIPタイプのATtiny45でソフトの書き換えをしながら試験をしていましたが、ソフト書き込み時たまにATtiny45が熱くなりラッチアップぎみになっている感じを受けました。パラレル書き込みは12VをResetピンに加えるので、その加え方が悪くラッチアップぎみになったと思われます。ATtiny45が破壊まで行かなくても、ダメージを受けている可能性が大きいと考えています。
Resetピンは、BEMF動作の電圧検出に使っているので、このピンに不具合が出ると動作がめちゃくちゃになってしまいます。
A Nゲージの方が集電状況が悪く、リセットスタート時の動作がもう一歩かと思っています。

と考えていますが、KATO のEM13と比較し、そんなに遜色がないのでまずはこれで良いかとしています。

モータ駆動用デコーダ
キハ80 / モハネ582に搭載しています。PCBのパターンは異なりますが、回路は同一です。

回路図

クリックすると大きくなります。

部品について、
CPUはアトメルATtiny45です。モータ駆動用HブリッジFETにはフェアチャイルドFDC6506P, FDC6561ANを使用しています。これらの部品はデジキィで購入しました。だいぶ前に購入したので今ではより良いFETがあるかも知れません。
その他の部品は秋葉原の秋月電子、鈴商、千石電子で購入しております。
(なお、回路図のFDC6506PS/FDC6561ANSの最後のSは私がかってつけた番号でPCBパターンの種類を示しているので部品品番には関係ありません。)

回路について
P-FETのドライブ回路
簡単にNPN + 抵抗としております。過去P-FETにはNPN + PNP でドライブしておりましたが、実装面積が大きくなるという事と、今回のFDC6506Pの入力容量が過去使用してきたP-FETに比較し小さくなっているため、発熱しないだろうと考えたためです。結果は、2.2Kの抵抗、PWM周波数16KHzでP-FETは発熱しませんでした。(前はこのPWM周波数で発熱した)

DCCパケット検出抵抗(R3)値
前回までは100Kとしていましたが、今回は220Kとなっています。これは、ATtiny45が電源変動に弱そうなのでなるべく大きな抵抗として手持ちで一番大きな220Kとしています。この抵抗はあまり大きくするとATtiny45の入力容量とフィルターを構成するのでDCCパケット信号が取りきれなくなると思いますが、220Kでは大丈夫のようです。(まじめに計算するば良いのですが。済みません)

整流ブリッジ出力コンデンサー(C1)値
このコンデンサーの容量はなるべく小さい方が、突入電流が減ります。キハ80には0.1uF/25Vのままですが集電不良の多かったモハネ582には10uF/25Vとしています。

ATtiny45電源コンデンサー(C3)値
キハ80には10uF/6.3Vをつけていますが、モハネ582には100uF/6.3Vを使用しています。

モハネ582は集電不良が多く試験的にC1, C2コンデンサー値を上げています。結局モハネ582の集電ばねを7mmに変えて集電の改善を行いました。コンデンサーは大きくしたままの状態です。時間があったら元の値に戻そうと思っています。

ソフトです。
WinAVRで作成しています。ソース/ヘッダーファイルです。
DecoderMain45_2.zip


PID計算をキハ80とモハネ582で変えて見ました。ソースコード上はモハネ582の状態です。キハ80用コードはコメントアウトしています。動作的にはキハ80の方が良かったようです。PID計算の違いは走行抵抗値の補正の仕方です。キハ80の方は補正を先に計算していますが、モハネ582の方はPID計算後補正をかけています。
( PID制御の内 I, D制御は取り外しています。したがってP制御のみ計算としています。 )

ATtiny45のFuse設定
High Fuse
リセットピンはADC入力、SPIはディスエネーブル、BODレベルは2.7V
bit 7 RSTDISBL    0
bit 6 DWEN        1
bit 5 SPIEN        1
bit 4 WDTON      1
bit 3 EESAVE      1
bit 2 BODLEVEL2   1
bit 1 BODLEVEL1   0
bit 0 BODLEVEL0   1

Low FUSE
クロックを内部8MHzに設定
bit 7 CKDIV8      1
bit 6 CKOUT      1
bit 5 SUT1       0
bit 4 SUT0       0
bit 3 CKSEL3     0
bit 2 CKSEL2     0
bit 1 CKSEL1     1
bit 0 CKSEL0     0

です。

6.DN-EF65/60もどきデコーダ
DN-EF65/60もどきデコーダです。


クリックすると大きくなります。


前回のNゲージ用デコーダ(モータ駆動用)とはあまり違ってはいませんが、F0ヘッドライトを入れています。ATtniy45は8PINなので、P-FETドライブ回路にLEDを入れて、走行時はOFF出来ませんが、停止時はON/OFFが可能です。

回路図です。

クリックすると大きくなります。P-FETのゲート/ソース抵抗を500Ω(1KΩ×2)として、LEDの電流制限としています。P-FETのゲート/ソース抵抗はなるべく低い方が良いのですが、今回はLEDの電流制限抵抗値としています。いくら小さいほうが良いとは言え、流れる電流や、用いる抵抗の許容電力等で限界があります。500Ωは今回の目的には十分すぎるほど小さい値と考えています。

DN-EF65/60もどきのPCBパターン図を示します。

赤が部品面(表側)、青が半田面(裏側)です。裏面には抵抗ひとつ(1KΩ)のみ実装しています。ビア(スルーホールもどき)は、裏面にスペースがある所に付けています。桂庵でのビアホールは、0.3mmドリルで穴を開け、0.4mm真鍮線を用いてビア(スルーホール)にしているため、表、裏面にスペースがある所にしか付けることが出来ません。

ATtiny45のFuse設定(前回と同等)
High Fuse
リセットピンはADC入力、SPIはディスエネーブル、BODレベルは2.7V
bit 7 RSTDISBL    0
bit 6 DWEN        1
bit 5 SPIEN        1
bit 4 WDTON      1
bit 3 EESAVE      1
bit 2 BODLEVEL2   1
bit 1 BODLEVEL1   0
bit 0 BODLEVEL0   1

Low FUSE
クロックを内部8MHzに設定
bit 7 CKDIV8      1
bit 6 CKOUT      1
bit 5 SUT1       0
bit 4 SUT0       0
bit 3 CKSEL3     0
bit 2 CKSEL2     0
bit 1 CKSEL1     1
bit 0 CKSEL0     0

です。

ソフトです。ほとんど前回の変わりませんが、F0の制御を追加しています。
DecoderATtiny45_MFL_Soft.zip

ソースファイル、hexファイルがあります。

7.ATtiny44標準デコーダ
ATtiny44を用いたDCCデコーダの標準回路を決め、デバッグボードを作成しました。
機能としては、桂庵のいつものモータ駆動用デコーダと同じです。
1.BEMF付きモータ駆動
2.F0F/F0R, F1, F2
です。CV設定はDirectのみ、オペレーションモードCV設定可能。
モータ制御方式は、P(比例)制御+モータ起動時可変駆動方式+低速時制御を入れています。
各信号をさわれるようにピンを立てています。また、車両搭載時(特に機関車)、基板サイズが足りない場合を考え前回のATtiny45で採用したF0F/F0R制御方式(車両走行時は必ずF0は点灯、停止時はF0のコントロール可)も可能です。

回路図を下に示します。

クリックすると大きくなります。

ソフト
 ソフトのコンパイラーはWinAVR-20060421を使用しております。
DCCパルスレベル検出方式(標準)ソフト Bトレにも搭載しています。
機関車用ソフト DCCパルスエッジ検出方式でEF65に搭載しています。(上記回路でQ4, Q5制御なし)

ATtiny44のFuse設定
High Fuse
BODレベルは2.7V
bit 7 RSTDISBL    1
bit 6 DWEN        1
bit 5 SPIEN        0
bit 4 WDTON      1
bit 3 EESAVE      1
bit 2 BODLEVEL2   1
bit 1 BODLEVEL1   0
bit 0 BODLEVEL0   1

Low FUSE
クロックを内部8MHzに設定、DCCパルスエッジ検出方式ではプログラムで4MHzに設定
bit 7 CKDIV8      1
bit 6 CKOUT      1
bit 5 SUT1       0
bit 4 SUT0       0
bit 3 CKSEL3     0
bit 2 CKSEL2     0
bit 1 CKSEL1     1
bit 0 CKSEL0     0

低速時の制御はもう少し改良が必要と思っています。
BEMFによるモータ制御はCV値により、変更が可能となっております。もし、このデコーダを作成されたら、制御方式による低速時の動作を報告ください。


以上です。