トミックスの5001パワーパックはデザインや操作性は秀逸で、現在も使っておられる方も多いようです。とはいってもレオスタット制御ですので、走行電流の小さいモーターでは、ラビットスタートになってしまいうまく制御できないようです。
そこでこれをパルスPWM制御と電圧制御兼用パックに改造することにしました。改造といっても使うのはケースぐらいで、中身は総入れ替えになります。まあ模型店の中古やネットオークションで、500−1000円ぐらいで売られているので、ケース代と思えば高くはないと思います。
// include the library code: インクルードするライブラリーファイルの指定
#include <EEPROM.h>不要
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#define PIN_FORLED 2 //前進時点灯させるLEDのピンを定義
#define PIN_BAKLED 3 //前進時点灯させるLEDのピンを定義
/* Analog */ //変数を定義しています
word control_V = 0;
word ZeroOffset = 32;
word inPower = 0;
byte inDir = 0 ;
void setup()
{
//Pin mode 入出力のピンを定義しています
pinMode(9, OUTPUT);// PWM出力
pinMode(10, OUTPUT);//PWM出力
pinMode(A2, INPUT);//Control_Volumeの入力
pinMode(PIN_FORLED, OUTPUT);//LED_FOR 前進時LED点灯出力
pinMode(PIN_BAKLED, OUTPUT);//LED_BAK 更新時LED点灯出力
//Timer1 PWM Freq
TCCR1B = TCCR1B & B11111000 | B00000001; // set timer 1 divisor to 1 for PWM frequency of 31372.55 Hz
タイマー1の周波数を変更して PWMの周波数を31kHにする
/* Debug message for PC */ //起動時のメッセージをシリアルモニターに送ります
Serial.begin(57600);
Serial.println("--------------------------------------");
Serial.println("Tomix One Handle Controller 2024/6/11 ");
Serial.println("--------------------------------------");
Serial.println("100 Ready");
ShutoffPower(); //出力を停止します
void loop()
{
VolumeRead(); //コントローラーのボリュームの値を読み込みます
}
void VolumeRead(void)
{
/* control volume check */
control_V = analogRead(A2);
if ( control_V >= 512 + ZeroOffset ) //前進時
{ //go forward
inPower = (control_V - 512 - ZeroOffset) * 11 / 10 ;
inDir = 1;
SetPWMoutput(inDir, inPower);
digitalWrite(PIN_FORLED, HIGH); //LED Forward On
digitalWrite(PIN_BAKLED, LOW); //LED Back Off
}
else if(control_V <= 512 - ZeroOffset) //後進時
{ //go back
inPower = (512 - control_V + ZeroOffset) * 11 / 10 ;
inDir = 0;
SetPWMoutput(inDir, inPower);
digitalWrite(PIN_FORLED, LOW); //LED Forward Off
digitalWrite(PIN_BAKLED, HIGH); //LED Back On
}
else // stop 停止時
{
inPower = 0;
ShutoffPower();
digitalWrite(PIN_FORLED, LOW); //LED Forward Off
digitalWrite(PIN_BAKLED, LOW); //LED Back Off
}
//ボリュームを0−1023の値で読み込みますが、中間値512の前後±32 480-544では出力ゼロとなるようにしています。そのためフルスピードになるように値を1.1倍して補正しています。
}
void ShutoffPower(void) //PowerOff 出力停止
{
analogWrite(9, 255);
analogWrite(10, 255);
}
void SetPWMoutput(byte inDir, word inPower) //Power on 方向と速度をPWM出力する
{
word aPower = inPower >> 1;
if( aPower >= 255)
{
aPower = 255;
}
Serial.print(aPower); //速度と方向をシリアルモニターに送ります
Serial.print(",");
Serial.println(inDir);
switch( inDir )
{
case 1://BAK 後進時
analogWrite(10, 255 - aPower);
analogWrite(9, 255);
break;
case 0://FOR 前進時
default:
analogWrite(9, 255 - aPower);
analogWrite(10, 255);
break;
}
}
パーツが届いて平滑直流化がうまく作動した時点で、プログラムをアップロードします。
☆6/24 配線図修正
Recent Comments