Tester

Тема в разделе "Arduino & Shields", создана пользователем Salk, 11 июн 2016.

  1. Salk

    Salk Гик

    Добрый день, надумал собрать тестер для ЭРЭ, на подобии китай-кит наборов, коих до кучи.
    Но столкнулся с досадной незадачей, никак не могу понять, как найти исследуемое сопротивление.
    Схема подключения взята от сюда, конечно за исключением схемы питания и кнопки включения, это будет своё. Итого 3 аналоговых порта + 6 цифровых. Подобные проекты на чисто - Arduino коде найти не смог, поэтому решил писать с нуля, плюс под свои нужды, т.к. проект совмещенный ещё с одним.
    В данном коде используется только два аналоговых порта и цифровых, пытаюсь научится мерить сопротивления, а уже потом все остальное.
    Код (C++):

    float Voltag1; // напряжение на А0
    float Voltag2; // напряжение на А1
    //float Resistvalue;

    void setup()
    {
      Serial.begin(9600);
      pinMode(A0, INPUT); // вход
      pinMode(A1, INPUT); // вход
      pinMode(8, OUTPUT);
      pinMode(10, OUTPUT);
      digitalWrite(8, HIGH); //"+5В"; 680 Ом
      digitalWrite(10, LOW); //"gnd"; 680 Ом
    }

    void loop()
    {
      Voltag1 = ((float)analogRead(A0) / 1024) * 5; // находим напряжение на первом аналговом порте, без коррекции ±10%
      Voltag2 = ((float)analogRead(A1) / 1024) * 5; // находим напряжение на первом аналговом порте, без коррекции ±10%

      Serial.print("A0: ");
      Serial.print(analogRead(A0));
      Serial.print(" = ");
      Serial.print(Voltag1); // примерное напряжение
      Serial.print("V");
      Serial.print("  --  ");
      Serial.print("A1: ");
      Serial.print(analogRead(A1));
      Serial.print(" = ");
      Serial.print(Voltag2); // примерное напряжение
      Serial.println("V");
      delay(500);
    }
     
    Резистор 500 Ом :
    Безымянный.jpg
    В итоге я знаю напряжения на обоих аналоговых портах, соответственно знаю падение напряжения на "тестовом" резисторе, но не зная ток, как мне его найти?

    Можно конечно поставить токовый шунт на <0.1 Ом, усилить падение напряжение на нем и измерить ток всей схемы, потом вычесть примерный ток потребления самого МК, но ведь как то в схеме, которую я привел, реализовано по другому? Что я не учел?
    Пытался вычислить ток на резисторе 680 Ом, который стоит в цепи A2 на схеме, тем самым как бы узнав ток в цепи, но погрешность дикая...
    Ещё пытался мапировать (map) значения, т.е. если 0 Ом (тестовый резистор), то напряжение половина питания (2.5 В), а если максимум сопротивления (его ещё не вычислил), то на одном аналоговом порте 5V, а на другом соответственно 0V, и тем самым вычислять промежуточные значения и мапировать (map) их в сопротивление... тоже не помогло.
    Код (C++):
    Resistvalue = map(analogRead(A0), 461, 1023, 0, 1000000);
    Идеи пока закончились, подтолкните пожалуйста, понять сам принцип измерения. Спасибо!
     
  2. Salk

    Salk Гик

    Дошло...
    Код (C++):
      Voltag1 = ((float)analogRead(A0) / 1024) * 5.08; // находим напряжение на первом аналоговом порте, без коррекции напряжения питания; ±20%
      Voltag2 = ((float)analogRead(A1) / 1024) * 5.08; // находим напряжение на первом аналоговом порте, без коррекции напряжения питания; ±20%
      Resistvalue = (Voltag1 - Voltag2) / (Voltag2 / 507); // 507 - нижний резистор, тем самым находим ток, протекающий через всю цепочку резисторов
    Осталось только повысить точность.
    Резистор на 3.3 Ом
    upload_2016-6-12_12-18-20.png