lpc1114+mbedで作るTOMIX 5001ニューパワーユニット風PWMパワーパック(1)
 「最近のいわたさん」の所で何か触発されて、いにしえのTOMIX 5001 ニューパワーユニットのような左右につまみを回すだけで前後進するパワーパックを作ってみたくなった。

 もちろんmbedベースのPWM制御に。ということで先に作ったmbed習作のパワーパックをベースにして改造してしまう。使ってなかったしw
 * * *
 5001のようなパワーパックをマイコンで作り出す方法はいろいろ考えられるが、まずは肝心のボリュームをどうするか?という問題がある。

 オーディオアンプのバランスボリュームに使われているようなMNカーブ、中点クリック付の2連ボリュームを使えば楽と言えば楽なのだが、値段も高いしそんなの持ってない。(ボリュームのカーブの話はボリュームの抵抗変化特性について東播ラビットおやじのブログさんのところがわかりやすい)

a0008202_2241057.jpg

 在庫の中に中点クリック付の10kΩ Bカーブのボリュームがあったのでこれを使う。中点クリックがあるとは言え、これは所詮普通のBカーブのボリュームなので中点は電気的には直接わからない。
 中点検知は電源投入時にはボリュームを中点にセットするという前提でソフト的にキャリブレーションすることにする(アルプス製だけあって、中点の抵抗を測定したらほぼぴったり50%ではあったが)。

 回路は簡単、この通り。先の習作からほとんど変わっていない。
a0008202_0315677.png
(クリックすると大きくなります)

a0008202_22405756.jpg


 ソフトも簡単。最初に中点をキャリブレーションして求めたら、その値を元に中点から左に回しているか右に回しているかを判断し、左右に応じて前後進させている。

---------------
#include "mbed.h"

AnalogIn vThin(dp9);
AnalogIn vIlin(dp10);
//AnalogIn vDirin(dp11);
InterruptIn vRstin(dp13);

DigitalOut vLDir(dp14);
DigitalOut vRDir(dp28);

PwmOut rPwm(dp24);
PwmOut lPwm(dp18);

Ticker tick1;
float fMid;
float fLlim;
float fRlim;
int iIntlim;

void mid_reset(){
if (iIntlim >= 0){
fMid = vThin;
// 中点から外れすぎていたら無視
if (fMid < 0.4f || fMid > 0.6f){
fMid = 0.5f;
}
// 中点遊びの設定 1%
fLlim = fMid * 0.99f;
fRlim = fMid * 1.01f;
// 1秒間は再リセットを無視
iIntlim = -50;
}
}

void tick(){
float fThin;
float fIlin;
float fArrin;

fThin = vThin;
fIlin = vIlin;

if (fThin > fLlim && fThin < fRlim){
rPwm = 0;
lPwm = 0;
vLDir = 0;
vRDir = 0;
}
else if (fThin <= fLlim){
rPwm = 0;
fArrin = 1 - (fThin / fLlim);
lPwm = 0.2f * fIlin + (1 - 0.2f * fIlin) * fArrin * fArrin * fArrin;
vLDir = 1;
vRDir = 0;
}
else{
lPwm = 0;
fArrin = (fThin - fRlim) / (1.0f - fRlim);
rPwm = 0.2f * fIlin + (1 - 0.2f * fIlin) * fArrin * fArrin * fArrin;
vLDir = 0;
vRDir = 1;
}
}

int main() {
// 初期化
vRstin.mode(PullUp);
mid_reset();

rPwm.period_us(33);
lPwm.period_us(33);

vRstin.fall(&mid_reset);

tick1.attach(&tick, 0.02);

while(1) {
}
}
---------------


 ソース中、fArrin(計算で導いたスロットル開度。値は0~1)を3乗しているのは、低速域での操作性を良くするために、ボリュームで言えばAカーブのような特性にするため。
 また、習作のパワーパックで常点灯ボリュームに使っていたIlボリュームは、出力の最低値(中心から少し動かした時の値)を動力ごとに調整する役目を持たせています。
 合わせて図にすると下のようになります(横軸がThボリュームの回転、縦軸が出力の絶対値。黄線がIlボリューム最大時の出力、青線がIlボリューム最小時の出力)。Thボリュームが中心のときは出力は無しです。
a0008202_132170.png
(クリックすると大きくなります)


 * * *
 動力の整備や手元のレールでちょっと遊びたいときは、このように逆転スイッチが無いほうが気楽で良いですね。次はケースに組み込んで見た目を整えます。
[PR]
by r34_gtt | 2015-12-05 00:52 | 活動(鉄) | Comments(0)


<< ネオリューブの代用品見つけた 鉄道フェスティバル2015に行... >>