Výroba měřiče kapacity kondenzátorů na ATmega8: od schématu po prototyp
Kapacita C se určuje podle vztahu C = Q/U, kde se náboj ukládá exponenciálně. Čas nabití na 63,2 % napětí Ucc odpovídá časové konstantě τ = R × C. Algoritmus:
- Výstup pro vybíjení nastaven na "VSTUP" pro zabránění výběhu.
- Zaznamenání t0 začátku nabíjení.
- Výstup pro nabíjení nastaven na "VÝSTUP" HIGH, monitorování A/D převodníku až do 63,2 % Ucc.
- C = (t - t0) / R.
- Vybití přes rezistor: výstup pro vybíjení "VSTUP", výstup "VÝSTUP" LOW.
RC obvod s přepínatelnými rezistory přizpůsobí τ rozsahu C od pF až po mF.
Struktura a principiální schéma
Mikrokontrolér ATmega8 (DIP-28) s 10-bitovým A/D převodníkem převádí napětí Uc na digitální kód. ALU vypočítá kapacitu podle τ. Nabíjecí rezistory SMD 0603 (1kΩ–1MΩ) tvoří RC obvod. Rezistor pro vybíjení omezuje proud. LCD displej 16×2 přes I2C (SDA/SCL) minimalizuje počet výstupů. Napájení: 9 V baterie "Krona" → LM7805 → 5 V, s keramickými kondenzátory 0603 a elektrolytickými 3216 pro filtraci.
AREF/AVCC na 5 V, Vcc/GND standardně. Automatické přepínání rozsahů prostřednictvím digitálních výstupů na rezistory.
Seznam klíčových součástí:
- ATmega8-16PU
- LM7805
- LCD I2C 0x3F
- Rezistory 0603: 1k, 10k, 100k, 1M
- Kondenzátory: 100nF×4, 10μF, 100μF
Návrh tištěné desky v EasyEDA
Velikost desky 30×38 mm. Minimální šířka spojů b_min = I_max / (j_dop × t) = 0,254 mm (j_dop=50 A/mm², t=35 μm, I_max<0,1 A). Otvory d=1,2 mm pro vývody ≤1 mm. Plocha S = S'/Kz, Kz=0,4.
Subtraktivní metoda: kyselina na folii na FR4. Umístění minimalizuje délku cest A/D převodníku pro snížení rušení. Země jednotná pásma, napájení ploché vedení. 3D prohlídka ověřuje mezery.
Výpočty parametrů desky:
- Plocha: S' = ∑ plochy ELE, Kz=0,3–0,6.
- Spoje: b_min podle proudu a metody.
- Otvory: d = d_e + |∆d_no| + r (r=0,1–0,4 mm).
- Mezery: ≥0,2 mm.
- Plošky: průměr 1,5–2×d.
Trasování: analogové obvody odděleny od digitálních, země pod A/D převodníkem.
Kryt a mechanika
V programu Kompass 3D byl navržen prototyp: oddíl pro 9 V baterii, svorky BNC pro Cx, výřez pro LCD, tlačítko zapnutí. Stěny 2 mm, žebra tuhosti. Vizuální prezentace potvrzuje ergonomii: přístup k kalibračním prvkům.
Programová realizace
Kód v C++ pro AVR-GCC. Inicializace Wire a LiquidCrystal_I2C. Adresa LCD 0x3F. Piny: nabíjení PB0, vybíjení PB1, rozsah PB2–PB4, A/D převod PC0.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define LCD_ADDRESS 0x3F
#define LCD_COLS 16
#define LCD_ROWS 2
LiquidCrystal_I2C lcd(LCD_ADDRESS, LCD_COLS, LCD_ROWS);
// Piny
const int CHARGE_PIN = 9; // PB1
const int DISCHARGE_PIN = 10; // PB2
const int ADC_PIN = A0; // PC0
void setup() {
lcd.init();
lcd.backlight();
pinMode(CHARGE_PIN, OUTPUT);
pinMode(DISCHARGE_PIN, OUTPUT);
digitalWrite(CHARGE_PIN, LOW);
digitalWrite(DISCHARGE_PIN, LOW);
// Inicializace A/D převodníku
ADMUX = (1<<REFS0); // AVCC referenční
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);
}
float measureCapacitance(float R) {
// Vybití
digitalWrite(DISCHARGE_PIN, LOW);
delay(100);
// Nabíjení
unsigned long t0 = millis();
digitalWrite(CHARGE_PIN, HIGH);
while (analogRead(ADC_PIN) < 645) {} // 63,2 % z 1023
unsigned long t1 = millis();
digitalWrite(CHARGE_PIN, LOW);
return (t1 - t0) / 1000.0 / R;
}
void loop() {
float C = measureCapacitance(10000.0); // R=10k
lcd.clear();
lcd.print("C = ");
lcd.print(C * 1e6, 1);
lcd.print(" uF");
delay(2000);
}
Dotaz A/D převodníku každých 10 ms, ochrana proti přetečení časovače. Kalibrační konstanty uloženy v EEPROM.
Co je důležité
- Metoda nabíjení přes RC dává přesnost ±5 % pro C=1 nF–100 μF.
- Přepínání R rozšiřuje rozsah bez ztráty rozlišení A/D převodníku.
- LCD přes I2C šetří GPIO, vhodné pro embedded systémy.
- Lineární stabilizátor LM7805 je jednoduchý, ale hřeje – pro prototyp je přijatelný.
- Deska dvouvrstvá, DRC v EasyEDA vylučuje chyby trasování.
— Editorial Team
Zatím žádné komentáře.