Bagaimana saya mencicipi sinyal analog -2 V hingga +2 V dengan mikrokontroler PIC?

10

Saya menggunakan mikro PIC dengan ADC 10bit untuk mengambil bacaan dari sinyal analog dengan frekuensi kurang dari 300 hz. Namun sinyal analog berada dalam kisaran -2 V dan +2 V. Bagaimana saya mengkondisikan sinyal untuk masuk ke rentang yang dapat digunakan (dengan asumsi input ke ADC harus positif) Juga saya tidak memiliki positif dan catu daya negatif.

pengguna2200
sumber
3
Kemungkinan rangkap: electronics.stackexchange.com/questions/3105/…
Thomas O
@Kellenjb - pertanyaan yang Anda tautkan tidak membahas perhitungan untuk kasus khusus ini, di mana tegangan input berada di kedua arah di luar rel.
stevenvh
Pertanyaan-pertanyaan berikut ditutup sebagai duplikat dari yang ini, dan memiliki jawaban yang berguna: electronics.stackexchange.com/questions/15985/… , electronics.stackexchange.com/questions/15940/…
Kevin Vermeer

Jawaban:

14

Catatan penting:
jawaban ini diposting untuk menyelesaikan masalah untuk -20V hingga + 20V input, karena itulah yang ditanyakan. Ini adalah metode yang cerdas tetapi tidak berfungsi jika batas tegangan input tetap di antara rel.

Anda harus mengukur tegangan dengan pembagi resistor sehingga Anda mendapatkan tegangan antara -2.5V dan + 2.5V, dan tambahkan 2.5V. (Saya anggap catu daya 5V untuk PIC Anda).

Perhitungan berikut terlihat panjang, tetapi itu hanya karena saya menjelaskan setiap langkah secara terperinci. Pada kenyataannya sangat mudah bahwa Anda dapat melakukannya di kepala Anda dalam waktu singkat.

Pertama ini:

R1 adalah resistor antara dan V O U T , R2 adalah resistor antara + 5 V dan V O U T , dan R3 adalah resistor antara V O U T dan G N D . VINVOUT
+5VVOUT
VOUTGND

Berapa banyak yang tidak diketahui yang kita miliki? Tiga, R1, R2 dan R3. Tidak cukup, kita dapat memilih satu nilai secara bebas, dan dua lainnya bergantung pada yang itu. Mari kita pilih R3 = 1k. Cara matematika untuk menemukan nilai-nilai lain adalah dengan membuat satu set dua persamaan simultan dari dua pasangan ( , V O U T ), dan menyelesaikan untuk nilai-nilai resistor yang tidak diketahui. Setiap pasangan ( V I N , V O U T ) akan melakukannya, tetapi kita akan melihat bahwa kita dapat menyederhanakan banyak hal dengan memilih dengan cermat pasangan-pasangan itu, yaitu nilai ekstrim: ( + 20 V , + 5 V ) dan ( -VINVOUTVINVOUT+20V+5V , 0 V ). 20V0V

Kasus pertama: , V O U T = + 5 V Perhatikan bahwa (dan ini adalah kunci dari solusi!) Kedua ujung R2 lihat + 5 V , jadi tidak ada penurunan tegangan, dan oleh karena itu tidak ada arus melalui R2. Itu berarti bahwa I R 1 harus sama dengan I R 3 (KCL). I R 3 = + 5 V - 0 VVIN=+20VVOUT=+5V
+5VIR1IR3
. Kita tahu arus melalui R1, dan juga tegangan di atasnya, sehingga kita bisa menghitung resistansi:R1=+20V-5VIR3=+5V0V1kΩ=5mA=IR1
. Ditemukan yang tidak diketahui pertama kami! R1=+20V5V5mA=3kΩ

Kasus kedua: , V O U T = 0 V Hal yang sama dengan R2 terjadi sekarang dengan R3: tidak ada drop tegangan, jadi tidak ada arus. Sekali lagi menurut KCL, sekarang I R 1 = I R 2 . I R 1 = - 20 V - 0 VVIN=20VVOUT=0V
IR1IR2
. Kami tahu arus melalui R2, dan juga tegangan di atasnya, sehingga kami dapat menghitung resistansinya:R2=+5V-0VIR1=20V0V3kΩ=6.67mA=IR2
. Ditemukan tidak diketahui kedua kami! R2=+5V0V6.67mA=0.75kΩ

Jadi solusinya adalah: . R1=3kΩ,R2=0.75kΩ,R3=1kΩ

R1=12kΩ,R2=3kΩ,R3=4kΩ
VINVOUT0V2.5V0.75kΩ+2.5V+5V

VOUTR3//RADC=1kΩRADC=5kΩ11kΩ=1R3+1RADC=1R3+15kΩR3=1.25kΩ



VOUTVOUT

stevenvh
sumber
-20V akan menghasilkan sedikit di bawah 0V keluar.
Olin Lathrop
(dan mungkin Olin Lathrop): Saya mencoba mencari tahu bagaimana Anda menemukan nilai resistor 7k. Saya perhatikan bahwa ketika tegangan input 2.5V tidak akan mengalir arus ke node, apa pun nilai resistornya, karena tidak ada perbedaan tegangan. Tapi 2.5V in bukan mid-range, sedangkan 2.5V in juga. Bukankah itu berarti pembagi harus memiliki dua resistor yang berbeda? Jika kamu tahu maksud saya.
Federico Russo
Mungkin itu juga menjelaskan komentar @Olin Lathrop.
Federico Russo
@ Federico: Ya, itu tidak akan sepenuhnya simetris. Saya membahas ini dalam jawaban saya. Dimungkinkan untuk menyesuaikan tiga resistor untuk memetakan -20 hingga +20 volt menjadi 0 hingga 5 volt, tetapi Steven dan saya menunjukkan casing yang lebih sederhana di mana Anda mendapatkan asimetri litle.
Olin Lathrop
6

Cara termudah adalah dengan menggunakan "pembagi resistor".

Anda tidak mengatakan pada tegangan apa PIC ini bekerja dan oleh karena itu rentang input A / D adalah, jadi mari kita gunakan 5V sebagai contoh. Kisaran tegangan input Anda adalah 40V, dan output 5V, sehingga Anda memerlukan sesuatu yang setidaknya dilemahkan oleh 8. Anda juga perlu hasilnya dipusatkan pada 1/2 Vdd, yaitu 2.5V, sedangkan tegangan input Anda dipusatkan pada 0V .

Ini dapat dicapai dengan 3 resistor. Satu ujung dari ketiga resistor dihubungkan bersama dan ke pin input PIC A / D. Ujung R1 yang lain menuju ke sinyal input, R2 ke Vdd, dan R3 ke ground. Pembagi resistor dibentuk oleh R1 dan kombinasi paralel dari R2 dan R3. Anda dapat menyesuaikan R2 dan R3 untuk memusatkan rentang yang dihasilkan pada 2.5V, tetapi untuk menjelaskannya secara sederhana kita akan hidup dengan sedikit asimetri dan melemahkan sedikit lebih untuk memastikan kedua ujungnya terbatas pada rentang Vss-Vdd.

Katakanlah PIC ingin sinyal analog memiliki impedansi 10 kΩ atau kurang. Sekali lagi untuk kesederhanaan, mari kita buat R2 dan R3 20 kΩ. Impedansi yang memberi PIC tidak lebih dari kombinasi paralelnya, yaitu 10 kΩ. Untuk mendapatkan redaman 8, R1 harus 7 kali R2 // R3, yaitu 70 kΩ. Namun, karena hasilnya tidak akan persis simetris, kita perlu melemahkan sedikit lebih untuk memastikan -20V tidak akan menghasilkan kurang dari 0V ke dalam PIC. Itu sebenarnya membutuhkan pelemahan dari 9, jadi R1 harus setidaknya 8 kali R2 // R3, yaitu 80 kΩ. Nilai standar 82 kΩ akan memungkinkan untuk beberapa slop dan margin tetapi Anda masih mendapatkan sebagian besar kisaran A / D untuk mengukur sinyal asli.

Ditambahkan:

Berikut adalah contoh untuk menemukan solusi tepat untuk masalah serupa. Ini tidak memiliki asimetri dan memiliki impedansi keluaran yang ditentukan khusus. Bentuk solusi ini selalu dapat digunakan ketika rentang A / D sepenuhnya berada dalam kisaran tegangan input.

Olin Lathrop
sumber
+1 karena sejauh jumlah bagian berjalan, ini adalah cara termudah untuk membangun apa yang diperlukan. Beberapa catatan: Dimungkinkan untuk menjaga asimetri dalam kode UC, dan dengan menambahkan satu kapasitor secara paralel ke resistor yang masuk ke GND, sinyal dapat dihaluskan (filter low-pass). Pojok freq. adalah 1 / (2 * pi R C), di mana R adalah nilai paralel dari ketiga resistor dan C adalah nilai tutup yang ditambahkan (ADC perlu tutup. Lagi pula!). Silakan hitung keakuratan pengaturan ini dengan mempertimbangkan semua toleransi (R, kesalahan ADC dalam +/- maks. LSB, Rujukan kesalahan, ...) - mungkin lebih buruk dari yang diharapkan.
zebonaut
@zebonaut - Saya melakukan perhitungan lagi dan menjelaskan setiap langkah secara terperinci dalam jawaban saya yang diperbarui (jauh lebih rumit dari tampilannya!). Ini memberi Anda pemetaan yang tepat dari (-20V .. + 20V) hingga (0V .. + 5V)
stevenvh
@zebonaut: Kapasitor mungkin berguna sebagai filter anti-aliasing, tetapi tidak ada hubungannya dengan asimetri. Saya tidak berpikir asimetri kecil itu masalah besar. Cukup mudah untuk dirawat di firmware seperti yang Anda katakan.
Olin Lathrop
Jika Anda ingin mengkompensasi asimetri dalam perangkat lunak, Anda harus menghitung fungsi transfer yang tepat. Jika Anda tetap harus melakukan ini, mengapa tidak menggunakan nilai resistor yang tepat di tempat pertama (bukan yang dari jawaban pertama saya (keliru)!)
stevenvh
@stevenvh: Tidak ada yang salah dengan menggunakan nilai resistor "benar". Saya menyadari pemetaan yang tepat adalah mungkin (seperti yang saya sebutkan dalam jawaban saya), tetapi memutuskan untuk tidak masuk ke dalam kompleksitas perhitungan dan menjawab kasus yang secara konsep lebih sederhana yang menghasilkan sedikit asimetri. Bagaimanapun, Anda harus melemahkan sedikit lebih untuk memperhitungkan slop, dan mungkin harus tetap melakukan kalibrasi dalam firmware.
Olin Lathrop
2

Ini adalah sirkuit standar untuk itu. Anda perlu mengukur nilai resistor untuk impedansi yang Anda butuhkan.

Leon Heller
sumber
Apakah Anda perlu memastikan impedansi sumber Anda relatif rendah jika menggunakan itu?
Nick T
Leon, mengapa tidak menggunakan kapasitor sebagai pengganti resistor 1k?
stevenvh
Ini adalah solusi DC-coupled. Resistor seri diperlukan untuk operasi yang tepat.
Leon Heller
3
@Leon Heller: Saya pikir ini akan menjadi jawaban yang lebih baik jika Anda menjelaskan cara menemukan nilai yang tepat untuk resistor.
Federico Russo
2

Jika sinyal bukan DC, atau jika referensi DC tidak penting, sinyal dapat digabungkan secara kapasitif ke input ADC.

Atau, jika ground Anda untuk PIC melayang, Anda dapat mengikat ground sinyal Anda ke 1/2 VDD dari PIC.

W5VO
sumber
Jika Anda menggunakan kopling kapasitif Anda menyingkirkan komponen DC, tetapi bagian negatif dari sinyal masih akan pergi di bawah tanah, kecuali jika Anda memberikan bias pada pin input oleh pembagi resistif, seperti di sirkuit Leon.
stevenvh
Tegangan suplai tidak ditentukan - ini akan bekerja dengan ADC 5V. Jika Anda menggunakan Vdd yang lebih kecil, maka Anda perlu mengatur skala inputnya. Itu akan berubah menjadi sirkuit Leon dengan kapasitor pada saat itu.
W5VO
2

Sirkuit berikut harus melakukan pekerjaan:

3.3V
 +
 |
 \
 / 1k
 \
 |
 +-- ADC input
 |
 \
 /  1k
 \
 |
 +-- Signal input (-2V to +2V)

Ini pembagi potensial. Pada -2V, output akan menjadi 0,65V; pada + 2V, 2.65V.

Semua kebisingan pada rel 3.3V akan ditransfer ke input, jadi gunakan referensi tegangan yang baik untuk mengurangi masalah ini.

Ini akan bekerja dengan persediaan lain juga, tetapi offset akan bergeser.

Thomas O
sumber
Ya, itu berfungsi, tetapi alangkah baiknya menggunakan rentang ADC lengkap :-)
stevenvh
@stevenh Anda dapat melakukannya menggunakan referensi 0.65V dan 2.65V meskipun Anda mungkin juga menggunakan sirkuit Anda.
Thomas O
VREF+VREFGND
@stevenh PIC24, dsPIC dan PIC32 pasti memiliki Vref-. Saya pikir beberapa 18F juga.
Thomas O
Ya, oke, saya tidak tahu semuanya (ada banyak dari mereka). OP tidak mengatakan bagian mana yang dia gunakan dan dia tampaknya menghilang, jadi tidak ada gunanya bertanya padanya.
stevenvh
1

VADCREF
VADCVDDVADCVADCREF+

VDD2V3.3VVADC

stevenvh
sumber