Arduino Uno - 外部電源が正しく動作しない

enter image description hereI am a newbie to Arduino and created my first project. The project is using a Sharp short range sensor and a 7 seg LED board (http://embedded-lab.com/blog/new-version-of-max7219-based-4-digit-serial-seven-segment-led-display/) to count objects.

私のコンピュータにUSB電源を供給しているとき、またはUSBケーブルを使って5V 1Aの壁アダプタを使用すると、すべて正常に動作します。問題は、外部電源アダプタを使用するか、またはVinにDC電源を使用する場合です。ボードの電源が入り、5Vピンの出力電圧を測定して約4.8Vを測定しています。

シャープセンサーはA0アナログ入力に接続されています。オブジェクトが通過すると電圧が変動するのがわかりますが、外部電源ではLEDが値を表示していません。ディスプレイはGRD、5Vに接続されています。ディスプレイのDIN、CLK、およびLOADピンは、説明されているようにピン7,6、および5に接続されています。

私は2つの異なるArduinoボードといくつかの異なるAC to DC電源アダプタを試しました.9Vから12Vに加え、Vinと同じ結果にDC電源を使用しました。

コードは以下の通りですが、かなりシンプルです(これはもっと良い方法があると確信していますが、これはC言語の最初のプロジェクトですので、簡単に手に入り、数字の機能はウェブサイトからのもので、私の書かれたものではありません)。

プロジェクトの写真が助けになるなら、アップロードすることができます。

任意のアイデアや考え? ありがとう、 スティーブ

#include "LedControl.h"
#include 
#include 

// Arduino Pin 7 to DIN, 6 to Clk, 5 to LOAD, no.of devices is 1
LedControl lc = LedControl(7, 6, 5, 1);
int sensorpin = 0;     //analog pin used to connect the sharp sensor
int val = 0;           //variable to store the values from sensor(initially zero)
int cnt = 1;

void setup()
{
   //Initialize the MAX7219 device
    lc.shutdown(0, false);  //Enable display
    lc.setIntensity(0, 10); //Set brightness level (0 is min, 15 is max)
    lc.clearDisplay(0);    //Clear display register


}
void loop()
{


    val = analogRead(sensorpin);      //reads the value of the sharp sensor
    if (val >= 650)
    {

    //write values to LED
    if (cnt<=9)
    {
        lc.setDigit(0, 0, cnt, false);//Display 4 to Digit 1-9, " "
    }
    if (cnt >= 10 && cnt <= 99)
    {
        lc.setDigit(0, 0, getDigitFromNum(cnt,0), false);//Display 4 to Digit 1-9, " "
        lc.setDigit(0, 1, getDigitFromNum(cnt, 1), false);//Display 3 to Digit 1-9, " "
    }

    if (cnt >=100)
    {
        lc.setDigit(0, 0, getDigitFromNum(cnt, 0), false);//Display 4 to Digit 1-9, " "
        lc.setDigit(0, 1, getDigitFromNum(cnt, 1), false);//Display 3 to Digit 1-9, " "
        lc.setDigit(0, 2, getDigitFromNum(cnt, 2), false);//Display 2 to Digit 1-9, " "
    }

    delay(400);
    cnt++;

}
}

// Function: getDigitFromNum returns a digit at a given index of a integer.
// Goes from right to left with the starting index of 0.
int getDigitFromNum(int num, int digit) {
    num /= pow(10, digit);
    return num % 10;
}
// Function: getDigitFromDec returns a digit at a given index of a double.
// Goes from left to right with the starting index of 0.
int getDigitFromDec(double dec, int digit) {
    dec *= pow(10, digit);
    return (int)dec % 10;
}
// Function: getDigitFromNum returns the decimal values of a double.
double getDecimals(double dec) {
    return dec - (int)dec;
}
2
たぶん5Vレギュレータのノイズや負荷が大きいのでしょうか?あなたはどれくらいの力を引き出していますか? USB電源を使用するだけで何が問題になりますか?彼らは安くて見つけやすい。
追加された 著者 L. Kolmodin,
そして良いクリーンな画像、および回路図は常に役立ちます。
追加された 著者 L. Kolmodin,

1 答え

USBからの給電とバレルジャックを通電する唯一の違いは、電圧が低ドロップアウト(LDO)電圧レギュレータを介して5Vに低下することです。これらは一般的に一般的なLM1113-50のクローンで、電流処理能力は約500mAから1Aまで変化します。

私はあなたのボードが純粋なArduinoではないことに気付きました - したがって、使用されるコンポーネントはより安価な端にあるかもしれません。したがって、優れたヒートシンクでサーマルシャットダウンに入る前に500mAしか処理しない低グレードのLDOを想定します。これらのボード上にないので、あまりにも暑くなる前に最大400mAと仮定します。おそらく幾分保守的かもしれない。

したがって、回路全体が約400mAを超える場合、レギュレータがシャットダウンするか、または少なくとも電流および/または電圧を低減することが期待できます。

5Vではなく4.8Vが表示されているという事実は、レギュレータが十分な電流を供給することができないため、電圧降下が発生することを示している可能性があります。これはレギュレータが非常に暑くなるのを伴います。

レギュレータは、右側に3つのピンがあり、バレルジャックソケットの真上にある左側に1つのタブがあるデバイスです。それがどれほど熱いのか見てみましょう。

10秒間泣かなくてもそれをつかむことができれば、それはあまりにも暑くはありません。


あなたができるもう一つのことは、回路を最小限に抑えることです。絶対にすべてのプラグを抜き、Blinkサンプルスケッチをアップロードしてください。外部DCから電源を供給し、LEDが点滅しているかどうか確認してください。そうであれば、電源が正常に動作しています。一度に1つずつペリフェラルを追加して、いつ障害が発生するかを確認することができます。

それが点滅しなければ、電源に何か本来的に間違っているはずです。

1つの可能性は、入出力コンデンサが不十分または不正確であるためにLDOが振動するということです。これは、基本的には、「5V」電圧が、実際には4.5Vと5Vまたは4.75Vと5.25Vの間で大きく変動していることを意味し、マイクロコントローラを実際に混乱させます。安価なLDOは、しばしばペアになるコンデンサに対してより敏感であり、この種の問題に悩まされる可能性があります。

このようなことを診断するには、実際に電圧を分析するためにオシロスコープにアクセスする必要があります。

発振している場合は、LDOの下側の2つのピン間に接続された10μFのセラミック・コンデンサ(VoutとGNDです)がそれを治す可能性があります。 1206表面実装コンデンサは、これらのピン間にうまく収まり、はんだを手作業で送ることができます。電源ヘッダの5VとGNDの間にスルーホール・コンデンサ(セラミック)をもう一度試すこともできますが、実際にはLDOに近づけたいので、LDOのピンに直接半田付けしてください。

2
追加された