なぜアナログピンは互いに影響し合うのですか?


8

センサーがあり、アナログ信号を生成します。

すべてのアナログデータを読み取り、自分のコンピューターに送信しています。

ここに画像の説明を入力してください

uint8_t sensors[] = { A0,A1,A2,A3,A4,A5,A6 };
const int len = sizeof(sensors) / sizeof(sensors[0]);
void loop(void)
{
    for (size_t i = 0; i < len; i++)
    {
        auto sensor = sensors[i];
        int sensorValue = analogRead(sensor);
        // Convert the analogue reading (which goes from 0 - 1023) to a voltage (0 - 5V):
        float voltage = sensorValue * (5.0 / 1023.0);
        char t[100];
        sprintf(t, "%d:%d$\n", sensor, sensorValue);
        uint8_t t1[100];
        //PrintSerial.println(t);
        memcpy(t1, t, 100);
        wifi.send(t1, strlen(t));
    }
    delay(300);
}

アナログの読みをプロットしました。なぜグラフはこのように見えるのですか?

ここに画像の説明を入力してください


ブレッドボードには、行間にわずかな静電容量があります
dandavis 2017

回答:


11

これは予想されることです。

他のピンには何も接続されていないため、それらの電圧はフローティングです。

Arduino MCUには、ADCが1つしかありません。さまざまなアナログピンを読み取るために、マルチプレクサを使用して、読み取りたいピンを単一のADCに接続します。MCU内のADCには、「サンプルアンドホールド」コンデンサが内蔵されています。

ピンの電圧を読み取るために、ピンを接続して、サンプルおよびホールドコンデンサを充電します。次に、サンプルおよびホールドコンデンサの電圧を一度に1ビットずつ切り離して測定します。

したがって、あなたのケースでは、接続されたピンの電圧を読み取ることにより、コンデンサを充電します。次に、未接続のピンを読み取ります。しかし、何も接続されていないため、接続されていないピンは充電も放電もしないため、サンプルアンドホールドコンデンサはほぼ同じ電圧に留まります。

サンプルアンドホールドコンデンサの電圧を測定すると、この電圧がわずかに下がるので、グラフでは線が前の測定よりも低くなります。

PSまた、すべてのピンがブレッドボードに配置されているため、隣接するピン間に容量結合が生じます。


別のピンがあっても精度は落ちないのでしょうか?
2017

6
あんまり。読み取ろうとしている信号の出力インピーダンスが非常に高い場合を除きます。よりきれいなグラフを取得したい場合は、未使用のピンをグランドに接続できます。
Gerben

0

accは本当に小さなコンデンサです。チャネルを切り替えると、accコンデンサの電荷が1つの入力チャネルから次の入力チャネルに運ばれます。次の入力チャネルのインピーダンスが非常に高い、または容量が非常に小さい場合、accコンデンサの電荷が支配的になり、その電圧の変化はほとんどありません。

さらに、貧弱なコードはそれを引き起こす可能性もあります-通常、追加が完了するのに十分な時間がないためです。


forループに遅延を追加する必要があるということですか?
erow
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.