Появилась идея соорудить таймер заряда конденсатора. Никак не могу сделать. Помогите. Код (Text): int sensorPin = A0; int powerPin = 2; int time = 0; int groundPin = 8; void setup() { pinMode(powerPin, OUTPUT); pinMode(groundPin, OUTPUT); Serial.begin(9600); } void loop(){ delay(5000); Serial.println ("Hit a key to start"); Serial.flush(); while(Serial.available() == 0){} delay(500); Serial.print("Discharge Capacitor..."); digitalWrite(groundPin, HIGH); delay(500); digitalWrite(groundPin, LOW); delay(1000); if (analogRead(sensorPin) != 0) Serial.println("FAIL"); else Serial.println("complete"); Serial.println("Test Started..."); Serial.println("Send Power Signal..."); digitalWrite(powerPin, HIGH); time = micros(); while (analogRead(sensorPin) > 1020){} time = micros() - time; Serial.print("Time to Charge is : "); Serial.print(time); Serial.println(" microseconds"); Serial.println("Restart in 2 seconds"); delay(2000); }
Сейчас 116 микросекунд в любом случае, даже если конденсатор удалить из схемы. Хочется понять правильно ли я в целом это делаю или нет? Какие мысли у гуру по поводу способа измерения этой величины?
Если гуру придёт на форум, он наверняка ответит. Я пока выскажу свои мысли. 116 микросекунд — похоже на время для того, чтобы провернуть вызов analogRead, сравнить с 1020 и выйти из него. И в силу того, что там уже оказывается 1024 на этот момент, всё так и происходит. Чтобы зарядить кондей цепь должна быть замкнута. То есть пока на анод идёт питание со 2-го пина, с другой стороны, для катода земля должна быть открыта. То есть 8-й пин тоже должен быть HIGH. Судя по коду всё делается наоборот. Мне до конца не понятен замысел с землёй через транзистор, я бы просто отправил катод конденсатора в землю, а зарядку и разрядку провоцировал бы только через powerPin. Если предположить, что вы используете кондей на 10 мкФ, а сопротивления в контуре с ним нет, остаётся только сопротивление проводов. Допустим это 1 Ом. Тогда расчётное время зарядки: t ~ 4×R×C = 10 мкс. Его едва ли можно замерить из-за пункта (1). Подключите последовательно резистор на, скажем, 1 кОм, тогда время зарядки и разрядки станет гораздо более измеримым. Чтобы невилировать погрешность от пункта (1), я бы воспользовался аппаратными прерываниями вместо цикла while.