Mengapa pin analog saling mempengaruhi?


Saya memiliki sensor dan menghasilkan sinyal analog.

Saya membaca semua data analog dan mengirimkannya ke komputer saya.

masukkan deskripsi gambar di sini

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);
}

Saya merencanakan pembacaan analog. Mengapa grafiknya terlihat seperti ini?

masukkan deskripsi gambar di sini


papan tempat memotong roti memiliki beberapa kepulan kapasitansi di antara baris
dandavis

Jawaban:


Ini yang diharapkan.

Pin lain tidak ada yang terhubung, jadi tegangannya mengambang.

MCU Arduino hanya memiliki ADC tunggal. Untuk membaca pin analog yang berbeda, ia menggunakan multiplexer untuk menghubungkan pin yang ingin Anda baca ke ADC tunggal. ADC di dalam MCU memiliki kapasitor "sampel dan tahan" di dalamnya.

Untuk membaca tegangan pada pin, itu akan menghubungkan pin, untuk mengisi sampel dan menahan kapasitor. Ini kemudian akan memutuskan dan mengukur tegangan sampel dan menahan kapasitor, sedikit demi sedikit.

Jadi dalam kasus Anda, dengan membaca tegangan pada pin yang terhubung, itu akan mengisi kapasitor. Kemudian akan membaca pin yang tidak terhubung. Tetapi karena tidak ada yang terhubung sampel dan kapasitor tahan akan tetap berada pada tegangan yang sama, karena pin yang tidak terhubung tidak akan mengisi daya, atau mengeluarkannya.

Mengukur tegangan pada sampel dan menahan kapasitor akan sedikit menurunkan tegangan ini, jadi itu sebabnya dalam grafik garis akan lebih rendah dari pengukuran sebelumnya.

PS Juga, karena semua pin ditempatkan di papan tempat memotong roti, Anda akan memiliki beberapa kopling kapasitif antara pin yang berdekatan.


Jadi tidak ada masalah? Tidak akan mengurangi keakuratan jika ada pin lain?
erow

6
Tidak juga. Kecuali jika sinyal yang Anda coba baca memiliki impedansi keluaran yang sangat tinggi. Anda dapat menghubungkan pin yang tidak digunakan ke ground, jika Anda ingin mendapatkan grafik yang lebih bersih.
Gerben

Acc benar-benar kapasitor kecil. Saat Anda berpindah saluran, muatan di kapasitor acc dapat dibawa dari satu saluran input ke yang berikutnya. Jika saluran input berikutnya memiliki impedansi yang sangat tinggi, atau kapasitansi yang sangat rendah, muatan pada kapasitor ak mendominasi dan tegangannya berubah sedikit.

Selain itu, kode yang buruk juga dapat menyebabkannya - biasanya karena kurangnya waktu untuk ditambahkan.


Maksudmu saya perlu menambahkan penundaan untuk loop?
erow
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.