SSブログ
ds-DCCデコーダ ブログトップ
前の10件 | 次の10件

Mp3V5スケッチのアップデート(EL,SL) [ds-DCCデコーダ]

 タイトルのように言うと、聞こえが良いですが、
・パフォーマンス改善のためTimer1を使用しないように変更
・一部モーター部分の挙動修正
・自動ブレーキ音が鳴りにくいため、Mp3のブレーキ音該当部分のWait修正
です。
 デバッグ中にSLを鳴らしてみたので、その動画も上げておきます。
トーマスのトビーみたい?


電車の正面に養生テープを貼ってあるのは、連結器のビビリ対策です。

EL102eはこちら
SL102aはこちら

コメント(3) 

クモハ12(HO)のDCCサウンド化改造 その2 [ds-DCCデコーダ]

 今日は、鉄道模型コンテストに行って、そのあとMakerFairに行って、そのあと、銀座のテンショウドウに行って(中古のHOがあるということで)、で、秋月電子、千石電商、コイズミ無線やマルツに行って、なんかいいスピーカーないかなあと探してみましたが、鉄道模型に入りそうな27mm以下のスピーカーはどこも似たようなものばかりでした。
 どこかで情報を見かけましたが、行きがけに湘南新宿ラインで大崎の前あたりで確かにクモハ12が外に出ていました。「東京総合車両センター 一般公開」が8月下旬にあるんでしょうか?(ネットで情報を見つけられなかった)。せっかく車両を買ったので、見に行こうかと思いました。
 で、本題ですが、最終的に以下の写真のようにスピーカーを付けました。床板にスーパーブラックで固定して、エンクロージャはボディーそのものという、?なものです。
re_DSC01872.jpg

 そうしたら、大きな音で鳴らすと連結器が共振します。ブリブリうるさいので、対策は追々考えていくことにします。
 音がどのくらい大きくなったかですが、まずは以前のクモハ40です。ホビーセンターカトーに持っていったら、HOオーナーズレイアウトのテンショウドウSLのせいで全然聞こえませんでしたが、このぐらいの音です。


 スピード20ぐらいの一番吊りかけ音の感じのところは51dB程度です。
 で、今回のクモハ12です。


 スピード20ぐらいで60dB行きます。よくわかりませんが3dBで2倍らしいので、10倍ぐらいの音?ですかね。ただ、SLよりもうるさい吊りかけ電車ってそれは嘘だろとも思うのですが。

 せっかくですので、ほぼ音量パラメータマックス状態でのコンプレッサー音と途中から吊りかけ音です。割れてしまいました・・・。


 ということで、少々音を落として、もう一回今度は吊りかけ音と警笛です。


 スピーカーでボディーと連結器がビビッてしまっていて、これはこれで対策を考えないといけないかなあと思います。(いや、音小さくするだけでいいような気もしますが)

 スピードが0のまま吊りかけ音を変えていますが、CV5(最高速電圧)をCV2(初速電圧)より小さくすると、動かさずに実験できます。

 これはクモハ12の改造コンテストに出したらウケるんじゃないか?と思ったのですが、なんか「塗りかえ、窓埋め、ボディ加工など魅力ある作品を募集いたします」とあるので、違うかもとちょっと思いました。

コメント(0) 

SmileDecoderR6Nを動かす。 [ds-DCCデコーダ]

 今週は夏休みですので、明日、明後日は家族旅行に出かけています。今日は、どっかに遊びに行こうかどうか悩みましたが、あまりに暑いのでやめて、お家でおとなしく実験です。

 で、なごでんの日記様からSmileDecoderR6N(12vD級アンプを用い走行音のみを出力するようにしましたが、想定以上にパワーがありすぎて現状の設計では耐えられないので再度見直しを行います。)の訳ありサンプルをいただきましたので、実験してみました。
 R6Nはこんな感じです。
re_DSC01697.jpg

 気を付けるところは、今までのSmileDecoderはどれもATMEGA328側がスマイルコネクタの〇□側なのですが、今回のは逆です。

 で、一緒に16Ωの大きなスピーカー(40㎜*30㎜)もいただきましたので、これで鳴らすことにします。大きさ的にはHOのゴードンの炭水車には載せられそうです。
 re_DSC01695.jpg

 ちょっと、鳴らしたら、やっぱりエンクロージャがないと全然音が小さいので、工作用紙で適当なエンクロージャを作ります。まあ、40㎜*30㎜*20㎜の容器作っただけですが。
re_DSC01696.jpg
 
 で、完成です。
re_DSC01698.jpg

 アンプ(PAM8006A)からの発熱は触っててそのうちアチッとなるので、50~60℃ぐらいと思われます。改造されたデコーダが一個しかなく、貴重なものなので、あまり長い間通電はさせていません。
 音は超大きいです。たぶんテンショウドウに勝てると思います。家でやるには単に迷惑な感じです。外のセミの声やヘリコプターの音、電車の通過音よりも大きいです。CV50(音の大きさ)は適当に調節しています。
せっかくですから、動画を載せておきます。
EL102D 吊りかけ音・・・振動でスピーカーが動いていきます。


EL102D VVVF音


SL102 SL音・・・ちょっと違うような気もするので、サンプリングデータをもう少し加工しようかと思いました。


DL106 ディーゼル音




 

Mp3V5の32KHz時の負荷低減について [ds-DCCデコーダ]

 青春18きっぷを買ってみました。大学生の時以来ですね。でも、そういえば行くところすら決めていません。
 碓氷峠鉄道文化むらとか日帰りでいいかなあとか思います。東海道線が高崎まで直通で、朝6時に家を出ると10時に横川に着くようですし。
 さて、標題の話題ですが、
・Mp3V5で走行音を出すと若者にはモスキート音(16KHz)が聞こえる。
→理由は16KHzのパルスで音の波形を作っているため。そのパルスもアンプで強調されてしまうため。
・パルス周期を32KHzにすれば16KHzの音が小さくなるかもと思って、32KHzに変更した。
→マイコンの負荷が高くなって、DCCのパケットを取りこぼしやすくなったためか、走行時に暴走しやすくなった。との報告。(ごめんなさい。実車に乗せて確認してないです・・・。)
 で、どうすればマイコンの負荷低減ができて、DCCのパケットをもらうプロセスをたくさん回せるか(→暴走しなくなる)という話になっているかと思います。

 で、とりあえずVVVF部分の負荷を低減できるか実験してみました。すべて、VVVF_Sound.cppの話です。

 まずは、へのへのもへじ様やあやのすけ様からお聞きして、私もVVVF音部分の割り込み時どのくらい時間を占有しているかを確認してみるため、割り込み関数「void vvvf_int1()」の最初と最後に

PORTD ^= _BV(PD7);

を入れて、割り込み時にピンから信号を出力をさせて、Arduino7ピンからオシロで波形を見てみました。
 なお、上記をやるためにはスケッチの一番最初に、

pinMode(7, OUTPUT);

の、おまじないをしないと出力されません・・・。

 で、結果波形が以下です。まずはEL102bスケッチ(16KHzのもの)です。Lowの時が割り込み中です。
走行時
EL102b走行時.png

停止時
EL102b停止時.png

走行時は周期が62usぐらいで、割り込み時間は16.7usです。
停止時は周期が62usぐらいで、割り込み時間は0.8usです。

次に、EL102cスケッチ(32KHzのもの)です。16KHzごとにパルスDutyを変えるスケッチになります。
走行時
EL102c走行時.png

停止時
EL102c停止時.png

走行時は周期が31usぐらいで、割り込み時間は17.1us、0.8usを繰り返します。
停止時は周期が31usぐらいで、割り込み時間は1,3us、0.8usを繰り返します。

また、せっかくですから、割り込み関数内の各命令がどのくらい時間を食っているのかもついでに確認してみました。
中身ですが
(1)2回に1回だけ命令を実行するためのトグル関数・・・0.8us(7ピンの出力含む)
flg = !flg;
if(flg)
{
return;
}

(2)VVVF音を出すかどうかの条件分岐・・・0.5us
if (pwm_shift != 8)

(3)波形の計算・・・4.5us(ただしpwm_shiftの値で若干変わる)
a = ((pgm_read_byte_near(&WAV_DATA1 [pwm_state1 >> SHIFT_PWM]) * 3 + pgm_read_byte_near(&WAV_DATA3 [pwm_state3 >> SHIFT_PWM])) >> pwm_shift)

(4)波形をTimer1に書く・・・6.9us
Timer1.setPwmDuty(VVVF_SOUND_PIN,a);

(5)波形の次のポイントへの移動・・・2.5us
pwm_state1 += pwm_add1;
if((pwm_state1 >= (WAV_LENGTH1 << SHIFT_PWM)))
pwm_state1 -= (WAV_LENGTH1 << SHIFT_PWM);
pwm_state3 += pwm_add3;
if((pwm_state3 >= (WAV_LENGTH3 << SHIFT_PWM)))
pwm_state3 -= (WAV_LENGTH3 << SHIFT_PWM);

仕事の改善提案ではありませんが・・・、明らかに(4)のDutyをTimer1に書くところが
やっていることに対して時間をとりすぎな感じがプンプンします。
ということで、Timer1ライブラリのsetPwmDutyを眺めてみました。
すると、
void setPwmDuty(char pin, unsigned int duty) __attribute__((always_inline)) {
unsigned long dutyCycle = pwmPeriod;
dutyCycle *= duty;
dutyCycle >>= 10;
if (pin == TIMER1_A_PIN) OCR1A = dutyCycle;
・・・
となっており、long型の掛け算をやっており、これは遅そうだと思いました。
 Timer1は16ビットのタイマーで、もともとTimer1の周波数を変更してVVVF音の音階を変えようと思っていたのですが、いろいろと試行錯誤をやっているうちに、パルス周期は一定で波形周期だけ変える形に変更したため、Timer1の高機能は現在いらなくなっています。32kHzだけ出ればいいんです。
 ということで、Timer1を取っ払ってしまうことにしました。
具体的には、
void VVVF_Setup()
{
//PWM出力ピン D9を出力にセット
pinMode(VVVF_SOUND_PIN, OUTPUT);
//Timer1使用
Timer1.initialize();
//初期設定
Timer1.pwm(VVVF_SOUND_PIN,0,0);
Timer1.attachInterrupt(vvvf_int1,current_period1);//interruptの設定
}
部分を、analogWriteでも使用している8ビットタイマーにしてしまっています。
以下になります。

void VVVF_Setup()
{
//PWM出力ピン D9を出力にセット
pinMode(VVVF_SOUND_PIN, OUTPUT);

//31KHzに設定(初期設定でPhaseCorrectPWMモードになっていると思う)
//D9,D10 キャリア周期:31kHz(分周無し)
TCCR1B &= B11111000;
TCCR1B |= B00000001;

//出力の設定
if(VVVF_SOUND_PIN == 9)
{
TCCR1A |= _BV(COM1A1);
}
else //10
{
TCCR1A |= _BV(COM1B1);
}

//interrupt設定
TIMSK1 = _BV(TOIE1);
}

で、割り込みはAVRでよく見る形に変えています。
関数名をポインタで指定するやり方がよくわからなくって・・・。
ISR(TIMER1_OVF_vect)
{
・・・
unsigned int a = ((pgm_read_byte_near(&WAV_DATA1 [pwm_state1 >> SHIFT_PWM]) * 3 + pgm_read_byte_near(&WAV_DATA3 [pwm_state3 >> SHIFT_PWM])));

if (VVVF_SOUND_PIN == 9)
{
OCR1A=a>>(pwm_shift + 2);
}
else//(VVVF_SOUND_PIN == 10)
{
OCR1B=a>>(pwm_shift + 2);
}
・・・
}

で、これでめでたく、割り込み時間が短くなりました。
EL102dスケッチ(こちら)になります。
走行時
EL102d走行時(Timer1やめ).png

停止時
EL102d停止時(Timer1やめ).png

走行時は周期が31usぐらいで、割り込み時間は10.4us、0.8usを繰り返します。
停止時は周期が31usぐらいで、割り込み時間は1,3us、0.8usを繰り返します。

 一応、世間的にいうと17.1us→10.4usなので「性能は1.5倍アップ!」です。
 でも、たぶん、割り込みのために、割り込み前、割り込み後に必要な退避とかがあるでしょうから、そんなにアップしてないんだろうなあとは思います。


Mp3V5用VVVF音アンプ負荷低減スケッチ [ds-DCCデコーダ]

 日曜日は所得を増加させる第一歩としてTOEICを受けに行ったのですが、なんと、腕時計を忘れて、教室には掛け時計もなく、仕方なく、時計なしでテストを受けたのですが、そんな心理状態だったので、なんか点数悪そうです・・・。
 で、なごでんの日記様から、走行音(VVVF音)部分から停止時も16KHzが出ているので、スピーカの負荷低減(というかアンプと5Vレギュレータが熱くなるのを低減という感じか)で、音を出さないときはパルスを出力するのをやめられませんか?と言われたので、やめるものを作りました。
 やっていることは、ノッチオフ時や停止時はボリュームというか波形を徐々に小さくして0にしてしまっているだけです。
 で、16KHzの音解析はMECY様からスマホで周波数解析できて、iAnalyzer Lite というソフトですとのことでしたがIPhone用でしたので、(私は持っていないので)適当なAndroid用ソフトで試しています。FFTWave Ver.1.3というアプリです。
re_DSC01689.jpg
 上段の赤い線が時間軸の波形で、下の緑色が現在のFFTでデータ数は2048でした。ピンク色が平均値で、ピーク値を黄色で周波数表示してくれます。(ちょっとアプリの設定をいじっています)

 まずEL102Bです。もともとの16KHzの搬送波が大きく出ているものです。停止時も走行時も16KHzが力強く?出ていることが分かります。(なお、私の耳は可聴周波数チェッカで確認したら残念ながら14KHzまでした聞こえませんでした。)


 次に、EL102cです。搬送波を32kHzにしています。16kHzはもちろん少なくなっています。(0ではない)


 で、最後に今回のEL102_0724です。停止時だけ音量を0にしますので、停止時だけ16kHzピークが消え、一応無音状態になります。


 スケッチ(EL102_0724)はこちらです。
 一つ注意点があって、CV50の走行音ボリュームですが、今まで0~8でしたが、今回から0~10にしています。今までの8相当のボリュームは10です。お気を付けください。

ゴードン用SLスケッチをブラックキューブスピーカーで鳴らす。(SL101) [ds-DCCデコーダ]

 さて、Yaasan様から蒸気音は低音がいっぱいだから音を高くしたほうが良いとアドバイスをもらいましたので、やってみることにしました。
 Audacityで音を高くしようとしたら、どのフィルタを使っても、Wavの時間が変わってしまうため、Bass,Treble調整でTreble(高音側)を大きくして、高い音を出すようにしてみました。
 今回のシステムはこんな感じです。
re_DSC01663.jpg
 CV値をたくさん書き替えないといけないのでDSBlueBoxを使用しております。で、そこからMp3デコーダ(SL101スケッチ)+ブラックキューブスピーカとつなぎ、別配線で線路ではゴードンがDSDecR3で動いております。
 動画は以下です。


 ちょっと、蒸気音のリアリティが下がりましたが、本物から加工した音です。大井川鉄道のトーマス(C11だかC12)ですが。
 で、CV値ですが、
走行音を目一杯、大きくするため、
走行音:CV50(0-8)→8
アンプ:CV59(0-30)→30(走行音が割れるようなら少しずつ小さくしていく)
Mp3音量:CV58(0-30)は音が割れるので、21
もちろんジョイント音はいらないのでCV48(0-3)→0
蒸気音の周期はKasoku配列を(現在)適当に再利用しているのでCV47(0-7)→0~4
です。
なお、モスキート音対策済みスケッチで若者(8歳?)に確認して、モスキート音は出ていません。
SLの蒸気音ですが、スケッチ中の
shu1_16k.h~shu4_16k.hでこれを変えると、そのまま蒸気音が変えられます。
back_***フォルダがその試行錯誤の跡です。
スケッチ(SL101)はこちらです。

ゴードン用のMp3デコーダSLスケッチ [ds-DCCデコーダ]

 ゴードンを買ったので、必死にMp3デコーダでSLスケッチを作るのをしておりました。
 で、とりあえず完成?しました。
 今回のシステムも、とりあえずBoseの外部スピーカーです。
re_DSC01662.jpg
 繋ぎはDSMainR5→Mp3デコーダ→Boseのスピーカーで、DCCは線路側に分岐させゴードンのスマイルデコーダR3につながっています。またFunctionを鳴らすためにS88 Analogをつないでいます。

 で、今回は、吊りかけ音の周波数を必死に鳴らしているTimer1をシュッシュッポッポの音にしています。どうやらスケッチには16kHz(8bit)で1秒までWavが入れられるようでしたので、0.24秒ずつちょっとずつ違う「シュッ!」という音を入れて、その鳴らし始め周期を変えることで蒸気音としています。(以前のスケッチのように再生周波数を変えるのはしておりません。やってみたら、なんか音が変だったので・・・。)それ以外の音はMp3側で鳴らすようにしています。
 で、動画です。




 今回わかったことは、
・このゴードン、人のスロットル操作に鈍感です。とても接触の悪いアナログNゲージみたいな動きをします・・・。
・シュッシュッポッポとピストンの動きを合わせるのがとても難しいです。
・ブラックキューブスピーカーで鳴らしたら、ゴードンのピストンのキュルキュルノイズ音のほうが大きくて、蒸気音が全然聞こえません・・・。なごでんの日記様の爆音デコーダに期待しています。
・スマイルコネクタを切るとゴードンのテンダーに入りそうですが、デバッグ中なので、コネクタ部分を切る気になりません・・・。

で、スケッチはこちらです。
・モーターが回るかは確認していません・・・。

Mp3デコーダ モスキート音の解消(DLスケッチ) [ds-DCCデコーダ]

 MECY様に確認していただき。DLスケッチもモスキート音が出ているとのことで、修正しました。
こちら(DL106)です。
・音が出ることは確認しましたが、モスキート音が消えたかは確認しておりません。
・モーターが回るかは確認していません。

Mp3デコーダ モスキート音の解消方法 [ds-DCCデコーダ]

 DCC電子工作連合の中で、MP3デコーダV5を改造しようとしたら、Mp3デコーダからモスキート音がするという話があり、そういえばうちの子供も電車が停止時にピーって言っているよと言っていたので、オシロで見てみました。(もちろんそんな音、中年の私には聞こえません)
 EL102スケッチ(EL102bスケッチも多分一緒)の時です。
EL102.png
 1メモリ10usですが、確かに60us周期のノイズが出ています。
 で、どうしようか、寝ないで考えました。(嘘です)
 今までPWMの搬送波をサンプリング周波数と一緒の16kHz(62.5us)にしていたのですが、16kHzは若者に不快な音として聞こえてしまうとのことで、PWMの搬送波を倍の32kHzにしました。具体的には、割り込み周期を32kHzにして、2回に一回だけ、PWMの値を変更することで、再生は16KHzのままです。こうすると、停止時のノイズも32kHzで、若者の耳も20kHz程度までしか聞こえないので、うちの若者(7歳?)に聞かせてみましたが、ピー音聞こえないとのことでOKでした。
 その時の停止時のPWM波形です。
EL102c.png
 30usぐらいの周期の波形ですから32KHzの高周波が出ているはずですが、人間には痛くもかゆくもありません。たぶん。
 スケッチはこちら

ディーゼル音スケッチの解説 [ds-DCCデコーダ]

 HOのTomixの115系Katoのキハ58系と新幹線E5系の増結のどれを優先すべきかで悩み続けております。
・Tomixの115系・・・よくみると東海道線は113系で115系ではないらしい、のと、R490までしか曲がれないというので、ちょっと躊躇しています。
・新幹線E5系・・・すでに6両編成で8畳間の直線では6両がいっぱいであることが分かったので、あと4両足してもなあと思ったりしています。それなりに高いし。
・キハ58系・・・気動車で安いですが、わたしにとって全く思い出のない電車(見たことがない)なのでどうしようかというところです。(というとクモハ40もクモハ12も全く思い出はありませんが。)
 でも、思い出がないという話では、前のDCCの飲み会で「なぜ欧州型の鉄道模型を集めるか?」という話をしていて、鉄道模型という趣味において、日常から離れる目的でやっているわけであって、いつも乗っている電車ではイラッとするだろうという話があって、確かに大人の鉄道模型は子供時代への懐古や非日常へのタイムスリップだよなあと考えると、これを買うのもありだよなあと、考えがぐるぐるしています。そういう意味で、私にとって、ほぼ嫌な出張の思い出とセットのN700系とかはあまり購入の対象にならないかなあと思いました。
 さて、本題です。
 ディーゼル音スケッチの解説をWikiに載せました
 興味のあるかたは参考にどうぞ。
前の10件 | 次の10件 ds-DCCデコーダ ブログトップ