Конденсаторы Таймер Заряда-Разряда

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем MasterX2, 21 янв 2012.

  1. MasterX2

    MasterX2 Нерд

    Появилась идея соорудить таймер заряда конденсатора. Никак не могу сделать. Помогите.

    Код (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);
    }
     
    [​IMG]
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    А чем всё сейчас заканчивается, в чём камень преткновения?
     
  3. MasterX2

    MasterX2 Нерд

    Сейчас 116 микросекунд в любом случае, даже если конденсатор удалить из схемы. Хочется понять правильно ли я в целом это делаю или нет? Какие мысли у гуру по поводу способа измерения этой величины?
     
  4. nailxx

    nailxx Официальный Нерд Администратор

    Если гуру придёт на форум, он наверняка ответит. Я пока выскажу свои мысли.
    1. 116 микросекунд — похоже на время для того, чтобы провернуть вызов analogRead, сравнить с 1020 и выйти из него. И в силу того, что там уже оказывается 1024 на этот момент, всё так и происходит.
    2. Чтобы зарядить кондей цепь должна быть замкнута. То есть пока на анод идёт питание со 2-го пина, с другой стороны, для катода земля должна быть открыта. То есть 8-й пин тоже должен быть HIGH. Судя по коду всё делается наоборот. Мне до конца не понятен замысел с землёй через транзистор, я бы просто отправил катод конденсатора в землю, а зарядку и разрядку провоцировал бы только через powerPin.
    3. Если предположить, что вы используете кондей на 10 мкФ, а сопротивления в контуре с ним нет, остаётся только сопротивление проводов. Допустим это 1 Ом. Тогда расчётное время зарядки: t ~ 4×R×C = 10 мкс. Его едва ли можно замерить из-за пункта (1). Подключите последовательно резистор на, скажем, 1 кОм, тогда время зарядки и разрядки станет гораздо более измеримым.
    4. Чтобы невилировать погрешность от пункта (1), я бы воспользовался аппаратными прерываниями вместо цикла while.