忍者ブログ

あやの

NゲージをベースとしたDCCについての日記を 書いています。 ある程度貯まりましたら、鉄道模型のDCCのまとめサイトに まとめています。 DCC館 http://1st.geocities.jp/dcc_digital/ DCC2号館 http://dcc.client.jp/

2017/05    04«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  31  »06
久しぶりに、DCC用サーボモータスケッチを動かしたら、すっかり忘れていて、
思い出しながらソースをいじっていました。

このまま進展無いのもアレなので、SmileFunctionDecoder Servoセットとして、
通販のページに追加しました。
Webページも記事を追加しました。
在庫数0ですが、最近、出張ばかりで自宅にいないので(^^;


こんな感じに、HobbyKingのHK-5320を接続した状態で動作確認した上で
配布しようかなと考えています。

スケッチは読みやすい様に改良中です・・

前に色々確認したDCC servoの記事はこちら。

拍手[0回]

PR
今日も、わけのわからない書き込みですw
SmileFunctionDecoder使って、サーボモータ用のスケッチ(プログラム)を
作っているんですね。

■やった事
 オシロスコープで5Vラインとサーボモータ制御線を観察
 サーボモータの制御終了後、現在の角度をCV値としてEEP-ROMに書き出すようにした。
 線路電圧が掛かった最初に前回の最終角度を読みだし、コマンドステーションから
 送られていくるコマンドと比較して、角度スーイープ処理を入れて初期角度を設定
 するようにした。
■わかった事
 5V系に電解コンデンサを33uFつけてみたが、電圧降下にあまり効果がなかった。
 (三端子レギュレータの供給能力不足)
 サーボモータを急変させると電流が多く流れる。
 起動時に前回の角度を読み出す方法はうまくいった。
 DCS50Kは前回のファンクッションの状態を覚えており、
 最初F4=offしばらくして、F4=onを送ってくるので、前回onで終わらせた状態を
 EEP-ROMに記録しているのに、一度サーボモータがoffになって、またonになる
 動きが見られた(どうしようもない・・・)
■次やる事
 パンタグラフステートマシンも同様の処理を加えて動作確認
 パンタグラフとサーボモータ間の光ファイバロッドの修理

----

以下の波形は黄色がサーボモータの制御波形、水色がデコーダの5V
サーボモータの角度を急変させた時、2.82Vまで低下しています。
5Vラインに電解コンデンサを足しても、大差ありませんでした。
数百uFくらい積まないとだめなんでしょうね)

多少5Vがドロップしても動くので良しとします?!


プログラムはこんな感じに、サーボモータの制御完了時に現在の角度を書き出す様に
しました。


analogWriter()関数を使っていると、シリアルデバックコマンドの関数がメモリに
入りきらないので外してカット&トライでデバックしていましたが、
中々取れないんで、夕飯以降はw
analogWrite()関数を全部コメントアウトして、シリアルデバックしていました。

※サーボモータの動作がないので、数値だけでデバックする事になります。
ステートマシンで作ってあるので、ステートと現在の角度をシリアル出力させるだけで、
分岐条件とか目に見えるので、すぐバグが見つかります。

間違って、Dcc.setCV(initDeg.nowDeg); と書いていました。
※変数initDegはCV番号では無く、初期角度を格納している変数w
 CV_initDegと書く必要がありました。


拍手[0回]

今日も、訳の分からない書き込みです。

■やった事
 サーボモーターにトルクを掛けた時の電流波形を取得する。
■わかった事
 トルクを掛けている時は、5V-100mA以上流れている事。
 波形ではイマイチ分からなかった。
■次やる事
 SmileFunctionDecoder用サーボモータ用スケッチのバグ取り。


以前にAllegroのACS712というホール素子タイプの電流センサをゲットしました。
検出回路と絶縁されているので、PWM波形と電流を一緒に観測する事が
できたりして、色々便利そうです。

・全体的な出力誤差 1.5% (TA = 25°C) 結構悪い・・・ホビーユースという事で・・・
・1.2 mΩ の内部導体抵抗 すごく低いので良いです。
・5.0 V、単一電源動作 電源は5Vだけで良いので、便利です。
・ほぼゼロの磁気ヒステリシス

0Aで、VIOUT端子に2.5Vが出力されています。

↓アマゾンで買えます。レンジが色々あるのですが、5Aタイプが良いかな。


ごちゃごちゃしていますが、SmileFunctionDecoderにサーボモータの
HK-5320の電源ラインに、ACS712電流センサを割り込ませてあります。
VIOUTに電圧テスターと、デジタルオシロで波形を観測しています。


ピーと音がするACアダプタだなーと思って、5Vラインを見たら、
リップルのすごいこと・・・


負荷が軽いから、こんなもんでしょうか・・・↓これを使うのをやめて、もう一つ5Vの
ACアダプタがあったので、そっちを使いました。


もう一個のACアダプタは若干5Vを超えているので、0A時にVIOUT端子は2.780Vでした。


サーボモータを手でトルクをかけて「み゛ー」とさせると、2.793Vになります。
ACS712は、185mVで1Aなので、軽く100mA以上流れています(^^;
テスターは実効値表示なのでピーク電流はもっと流れているでしょう・・・
SmileFunctionDecoderの三端子レギュレータが熱くなるわけです(^^;


オシロスコープの波形ではよくわかりませんでした(^^;

さて、一応、
某所でちゃんとした電源と測定器を使って、ACS712のデータを取りました。
こちら。

基準電流発生器が見つからなかったので、直流電源の定電流モードを使って、
DMMの電流レンジで電流値を合わせながら測定しました。
そこそこリニアリティはありそうですね。
数十mAクラスは、数mVの変化しか見えないので、オシロスコープではちょっと見えなさそう。
(結果的に、見えませんでした・・・アンプで増幅させないとダメですね。)

DCC電源を入れた瞬間、PWMを発生させた瞬間にギュンとサーボモータが動いてしまうので、
対策しないとダメです・・・
せっかく、光ファイバロッド(^^;直したのに、また千切っちゃいました・・・
ゼムクリップを伸ばしたロッドを試してみましたが、ロット自体を垂直駆動ができないと
うまくパンタグラフを上下させる事ができませんでした。
パンタグラフもパンタスパーク用にLEDをアロンアルファでくっつけたやつなので、
可動がスムーズでないので、新品を買ってきてから再トライしたほうがよさそうです。

拍手[0回]

※やっつけ記事なので、色々と適当です・・・

ちょっと分かりにくいですけど、φ0.5の光ファイバーを瞬間接着剤で固定して、
車内まで引き込んでいます。
カーボンロッドを使うと強度とかも良さそうですが、見た目重視の為、
光ファイバーを使いました(強度が無いんだけどね・・・)



そして、サーボモーターを収める為に、車両を刻みますw
ホットナイフが欲しいですね。


くり抜きました。


こんな感じに収まる予定。
この後、0度でパンタ下限、90度でパンタ上限を実現させるには、下の写真の
位置では都合が悪いので、上側に移動させる為に、さらに刻みました。



サーボホーンの穴に光ファイバーを通してダイソーで買ってきた
エポキシ接着剤で固定します。

※ツナ缶は、ゴミ入れですw(以外と便利)

サーボモーターはダイソーで売っていたクールガン(ポリガン)で
固定しました。


HK-5320を5個仕入れましたので、人柱用に配布しようかなと。


最初、F4 OFF時に0deg、F4 ON時に90degの設定で動かしてますが、
途中エポキシ接着剤がはがれましたw
次のDCS50Kで何をやっているかと言いますと、
CV62はON時の角度なので、50deg、CV63はOFF時の角度なので、9degに
設定します。(後日動画を撮り直します)


動画撮る前に、上下の角度を9deg,50degに調整していい感じに昇降ができていたのですが、
動画を撮る為に、デフォルトの0deg,90degに設定して撮影したところ、無理掛かって
接着剤が外れましたw

ちなみに、デコーダーにトルクがかかると、「み゛ー」とサーボから音がし出して、
かなり電流が流れるようで、3端子レギュレータがものすごく熱くなります。
「み゛ー」と鳴らないように、CV62と63を使って角度を調整してあげます。

車体を刻めば、HK-5320が入り、Nゲージでもパンタグラフを昇降させるギミックの
実装が可能です。

拍手[0回]

なんとか形になりましたの、パンタグラフ昇降スケッチの紹介します。



例の小型サーボモータを使って、SmileFunctionDecoderの応用例として、
パンタグラフ昇降を想定した、サーボモータを動かしてみました。
ちなみに、プログラム内でこんなパターンを作っておきます。

//panta patern
//Cmd,Time,deg
//O:出力,E:終了
byte upptn[7][3]  = {{'O',0,0},{'O',4,90},{'O',4,70},{'O',4,90},{'4',5,80},{'O',4,90},{'E',0,0}};
byte downptn[5][3] = {{'O',0,80},{'O',4,0},{'O',2,10},{'O',2,0},{'E',0,0}};

動画では、F4は単純に200msで0degから90degを動かしています。
F3がパンタグラフの昇降を模擬させています。




参考にした動画はこれでです。
パンタグラフが架線にあたり、一度跳ね返っている動作を模擬しましたw
下ろすときも、なんとなく跳ね返っている動作を入れました。



ATtin85のPWMは8bitしかないので、細かな角度設定が実は難しいです。
周波数も狙った値にできなくて、キャリアは236Hzです(いいのかな?)
0〜90degの分解能は1.3degです。(中途半端ですね・・・)
なので、サーボモータの移動量はfloatで計算させています。




メモ
Arduino使って、状態遷移を使って動かす場合、一定の時間で駆動される(イベントドリブン)
プログラムを作る場合、状態遷移部分に定期的にアクセスする必要があります。
処理が重くなっていないかを確認するのに、I/Oピンに信号を出力させて、
オシロスコープで波形を確認して周期を確認します。

digitalRead()で読み込んだ値に!を付けて反転させて、digitalWriteで出力させ、



波形でみると、こんな感じにパタパタするので、上記のプログラムの場合、10ms周期でアクセス
される為、ちゃんと動いていることが確認できます。
digitalWriter(O3,!digitalRead(O3)); の組み合わせはちょっと便利です。




シリアルデバックする際に、float内の変数を出力させようと、sprintf を使っていましたが、
ちゃんと表示されず、変だなと思ったらArduinoはdtostrf()を使わないとダメだそうです。
 

拍手[0回]

ブログ内検索

プロフィール

HN:
あやのすけ
性別:
非公開
| HOME Next >>
Copyright ©  -- あやの --  All Rights Reserved
Design by CriCri / Material by もずねこ / powered by NINJA TOOLS / 忍者ブログ / [PR]