2017-08-09 11 views
-1

私はArduinoで10個の異なる12V 600mA DCポンプを制御する予定の自動ディスペンシングプロジェクトに取り組んでいます。コンピュータは、次の形式でのArduinoへのUSB接続を介してメッセージを送信する:コンピュータとのシリアル接続を使用するArduinoの制御モーター

lh = pumps off 
0h = pump 0 on 
1h = pump 1 on 
etc. 

アルドゥイーノは12V 2A DC電源に接続されたTIP120のNPN抵抗を活性化することによってポンプに電力を与えます。一度に1台のポンプしか稼働しません。

LEDの電源を入れてテストすると、シリアル接続は問題なく動作します。しかし、私はポンプでそれを試して、Arduinoはコマンドにゆっくりと応答し始め、結局私はArduinoとシリアル接続を失う。私はArduinoに接続を失わせる何らかの電力問題があると想像することができます。私が間違っているアイデアは?

アルドゥイーノコード:

#define PUMP5 5 //pin for turning transistor on/off 
const byte numChars = 32; 
char msg[numChars]; 

void setup() { 
    Serial.begin(9600,SERIAL_8N1); 
    Serial.println(msg[0]); 
    pinMode(PUMP5, OUTPUT); 
} 

void loop() { 
    read_msg(); 
    command_pumps(); 
} 

void read_msg() { 
    char rc; 
    if (Serial.available() > 0) { 
    rc = Serial.read(); 
    msg[0] = rc; 
    } 
    if(Serial.available() > 0) { 
    rc = Serial.read(); 
    msg[1] = rc; 
    } 
    Serial.print("msg[0]: "); 
    Serial.println(msg[0]); 
    Serial.print("msg[1]: "); 
    Serial.println(msg[1]); 
} 

//PUMP5 is used for each of the scenarios since I am only testing with one pump 
void command_pumps() { 
    if (msg[0] == 'l'||msg[1]=='l') { 
    digitalWrite(PUMP5, LOW); 
    } else if (msg[1] == 'h') { 
    if(msg[0]=='0') digitalWrite(PUMP5, HIGH); 
    else if (msg[0]=='1') digitalWrite(PUMP5, LOW); 
    else if (msg[0]=='2') digitalWrite(PUMP5, HIGH); 
    else if (msg[0]=='3') digitalWrite(PUMP5, HIGH); 
    else if (msg[0]=='4') digitalWrite(PUMP5, HIGH); 
    else if (msg[0]=='5') digitalWrite(PUMP5, HIGH); 
    else if (msg[0]=='6') digitalWrite(PUMP5, HIGH); 
    else if (msg[0]=='7') digitalWrite(PUMP5, HIGH); 
    else if (msg[0]=='8') digitalWrite(PUMP5, HIGH); 
    else if (msg[0]=='9') digitalWrite(PUMP5, HIGH); 
    } 
    return; 
} 

My Circuit

+0

電源で何をしましたか?十分な容量がありますか? – barny

+0

ダイオードの配置になります。 https://electronics.stackexchange.com/questions/31014/where-should-i-put-the-kickback-diode-in-a-transistor-switch –

+0

を参照してください。図を表示できますか?ここに正しいフライバックダイオードがないような音がする。 – user3411864

答えて

2

ベース抵抗デザインの問題が原因tip120データシートの図2に示したベース抵抗設計の.asにすることができる

enter image description here

enter image description here

必要なIcは600ミリアンペアですが、モーターが停止されたときには(失速状態での最大電流用DCモータのデータシートをご参照ください)IC = 1250の値を取ることができますので、より多くの電流を駆動。したがって、Ib = 5mA(5×250 = 1250).Arduinoが出すことができる最大40mAをはるかに下回ります。

TIP120が飽和状態のままで、Arduinoが必要以上の電流を供給できないほど十分に低いベース抵抗を選択する必要があります。私たちは5mAと40mAの間の電流を必要とするので、20mAの中間点を選んでみましょう。

コレクタ電流が1 Aのとき、Vbe(sat)は約1.5 Vです。ここでArduinoが5 Vを出力し、Vbeが1.5 Vの場合、抵抗その両端に(5 - 1.5)または3.5Vの電圧降下があります。オームの法則を使用して

enter image description here

サンプルシミュレーション出力

enter image description here

インダクタは、SIM内のモータを表しています。ダイオードとコンデンサを取り付けるとスパイクが減少します

関連する問題