Измерение положения сердечника в катушке индуктивности

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Alex19, 6 мар 2014.

  1. Alex19

    Alex19 Гуру

    Столкнулся с проблемой измерения положения сердечника в катушки индуктивности (обратно-пропорциональный клапан).

    Ход сердечника около 10мм. Необходимо получить положение сердечника процентах от 0 до 100%, с точностью 1%.

    Начал с того, что нашел пример на ардуине для измерения индуктивности.
    http://reibot.org/2011/07/19/measuring-inductance/

    Воспользовался данной схемой
    [​IMG]
    Код который предлагался.
    Код (Text):

    //13 is the input to the circuit (connects to 150ohm resistor), 11 is the comparator/op-amp output.
    //reibot.org for guide
    double pulse, frequency, capacitance, inductance;
    void setup(){
       Serial.begin(115200);
       pinMode(11, INPUT);
       pinMode(13, OUTPUT);
       Serial.println("Why hello!");
       delay(200);
    }

    void loop(){
       digitalWrite(13, HIGH);
       delay(5);//give some time to charge inductor.
       digitalWrite(13,LOW);
       delayMicroseconds(100); //make sure resination is measured
       pulse = pulseIn(11,HIGH,5000);//returns 0 if timeout
       if(pulse > 0.1){ //if a timeout did not occur and it took a reading:
            capacitance = 2.E-6; //insert capacitance here. Currently using 2uF
           frequency = 1.E6/(2*pulse);
           inductance = 1./(capacitance*frequency*frequency*4.*3.14159*3.14159);//one of my profs told me just do      squares like this
           inductance *= 1E6; //note that this is the same as saying inductance = inductance*1E6
           Serial.print("High for uS:");
           Serial.print( pulse );
           Serial.print("\tfrequency Hz:");
           Serial.print( frequency );
           Serial.print("\tinductance uH:");
           Serial.println( inductance );
           delay(20);
       }
    }
     
    Получил диапазон около 50 шагов, с плавающими показания до 9 шагов и иногда доходило до 12, но не успел зафиксировать.
    В 0 положении
    for uS:780.00 frequency Hz:641.03 inductance uH:30821.95
    for uS:771.00 frequency Hz:648.51 inductance uH:30114.78
    В максимальном положении
    for uS:717.00 frequency Hz:697.35 inductance uH:26044.10
    for uS:711.00 frequency Hz:703.23 inductance uH:25610.04

    Немного поменяв код
    Код (Text):

    //13 is the input to the circuit (connects to 150ohm resistor), 11 is the comparator/op-amp output.
    //reibot.org for guide
    double pulse, frequency, capacitance, inductance;
    void setup(){
       Serial.begin(115200);
       pinMode(11, INPUT);
       pinMode(13, OUTPUT);
       Serial.println("Why hello!");
       delay(200);
       
       analogWrite(8, 255);
    }

    void loop(){
       digitalWrite(13, HIGH);
       delay(5);//give some time to charge inductor.
       digitalWrite(13,LOW);
       delayMicroseconds(100); //make sure resination is measured
       pulse = pulseIn(11,LOW,5000);//returns 0 if timeout
       if(pulse > 0.1){ //if a timeout did not occur and it took a reading:
            capacitance = 2.E-6; //insert capacitance here. Currently using 2uF
           frequency = 1.E6/(2*pulse);
           inductance = 1./(capacitance*frequency*frequency*4.*3.14159*3.14159);//one of my profs told me just do      squares like this
           inductance *= 1E6; //note that this is the same as saying inductance = inductance*1E6
           Serial.print("High for uS:");
           Serial.print( pulse );
           Serial.print("\tfrequency Hz:");
           Serial.print( frequency );
           Serial.print("\tinductance uH:");
           Serial.println( inductance );
           delay(20);
       }
    }
     
    Получил диапазон около 130 шагов, с плавающими показания до 8 шагов.
    В 0 положении
    High for uS:968.00 frequency Hz:516.53 inductance uH:47470.27
    High for uS:960.00 frequency Hz:520.83 inductance uH:46688.88
    В максимальном положении
    for uS:842.00 frequency Hz:593.82 inductance uH:35916.59
    for uS:835.00 frequency Hz:598.80 inductance uH:35321.89

    Увы поставить там, что-то другое, для отслеживания положения сердечника, не возможно.
    Вопросы в следующем.

    Правильной ли дорогой иду?
    Если моя дорога правильная, как мне получить стабильные значения в pulseIn?
     
  2. Alex19

    Alex19 Гуру

    После долгих праздников вернулся к вопросу:).

    Узнал индуктивность катушки около 4мГ, со вставленным сердечником около 44мГ.
    Пока пришел к выводу, что идея не верна. Так как пытаюсь измерить затухающий сигнал, подсказали еще 1 идею буду пробовать.

    Если удастся обязательно отпишу
     
  3. Alex19

    Alex19 Гуру

    Удалось получить результаты намного стабильнее. Пока воюю с диапазоном сейчас 160 шагов, но это на полном штоке, а не 10мм. Завтра буду пробовать расширить диапазон и проверить на длине 10мм.

    Есть еще мысль установить более мощный ЦАП, как вариант. Чтобы расширить диапазон измеряемого напряжения.

    Все это с помощью колебательного контура. Использую схему последовательного колебательного контура.
    http://www.radioradar.net/hand_book/documentation/contur.html
    http://www.radioingener.ru/category/vse-o-kolebatelnyx-konturax/
    Сам плохо разбираюсь в этом, мне подсказали. Пишу вдруг у кого-то будет аналогичная задача. Хотя лучше таких вещей избегать:), по крайней мере любителям таким как я.
     
    Последнее редактирование: 13 мар 2014
  4. embed

    embed Нерд

  5. Alex19

    Alex19 Гуру

    Большое спасибо!

    Внимательно изучу, пока получил не понятный результат. Голова дымится:), поэтому на выходных. Сейчас нужно получить результат, хоть промежуточный, чтобы проект не стоял.

    А дальше буду пробовать Ваше предложение, в конечном проекте важна именно точность.
     
  6. Alex19

    Alex19 Гуру

    Катушки для меня темный лес.

    UPD. Все разобрался, общий принцип тот же. Убрал вопросы.

    Когда читал, прочел, что трудно сделать температурно-независимы датчик.
    Что-то я об этом не подумал. Там масло с ростом температуры до 70 градусов, конечно не прямой контакт, но все же.
     
    Последнее редактирование: 14 мар 2014
  7. embed

    embed Нерд

    Если нужно точно мерять еще и в широком диапазоне температур - потребуется датчик температуры и достаточно сложные расчеты. Я не знаю что за конструкция катушки и какой там сердечник, но предполагаю феррит. Феррит сильно нелинейный материал, магнитная проницаемость может зависеть от температуры на единицы-десятки процентов.
     
  8. Alex19

    Alex19 Гуру

    Все затрудняет отсутствия описание на изделие и уровень знаний электроники.
    Если гидравлическая часть понятна. То вот по датчику увы ни чего нет. Тоже предполагаю, что феррит.

    Датчики температуры их навалом, а вот сложные расчеты меня пугают.

    Сейчас задумался уйти от катушек и переделать этот клапан, оставив шток (на нем можно закрепить, все, что угодно). Поставив туда какой нибудь датчик, в идеале готовый, чтобы ловить это перемещение. Вот сейчас пытаюсь понять, чем можно.

    Сразу не хотел это делать, чтобы не потерять совместимость. Но совместимость, это попытка все сделать идеально.

    UPD. Или найти готовые датчики, для индуктивных перемещений с аналоговым выходом.

    UPD 2. Что-то вроде этого
    http://www.sensoren.ru/induktivnie_...perl_fuchs_pmi_f112_s_analogovim_vihodom.html

    UPD 3. Через пару дней получу на тесты аналогичный датчик, дадут на пробу в дружественной компании.

    Большое спасибо embed, за интерес к теме. Вы помогли мне понять, что не по Сеньке шапка.

    Увы мои познания не позволяют сделать такое. Когда на схеме катушка, для меня это мертвая схема. А знакомых специалистов электронщиков, которые сделали бы это нет.

    UPD 4. Получил датчик Balluff BAW002J. Он не совсем такой как мне надо, ход меньше. А цена немного дороже, чем предполагал. Но попробую найти, других брендов.
     
    Последнее редактирование: 18 мар 2014
  9. Alex19

    Alex19 Гуру

    К счастью появилось время вернутся к ардуине.

    До датчика не добрался, валяется на полке:(.

    Сделал систему на штангеле, не самое лучшее решение, но не плохое. Еще надо провести тесты по температурным режимам у меня от 30 до 80 градусов (без монитора). Но в общем и целом доволен.
    Скорее всего будет смещение показаний.

    Взято было с
    http://habrahabr.ru/post/133088/
    http://www.instructables.com/id/Reading-Digital-Callipers-with-an-Arduino-USB/?ALLSTEPS

    Протоколы
    http://www.shumatech.com/support/chinese_scales.htm#Chinese Scale Protocol
    http://pcbheaven.com/exppages/Digital_Caliper_Protocol/
    Есть еще Digimatic Protocol, но к китайским как я понял, он не имеет отношения.

    Штангель с AVR
    http://avrdevices.ru/podklyutchaem-tsifrovoy-shtangentsirkuly-k-kompu/

    С последней ссылки взял, логический усилитель.
    [​IMG]

    В прищепке, выделенная схема логического усилителя. Для тех, кто как я слабо понимают в электроники. Данная схема логического уровня инвертирует сигнал.

    Получилось увы не сразу, первый штангель, взятый с работы не работал. Не шел сигнал с лини Data. После покупки нового все данные пошли.

    У кого нет осциллографа, чтобы посмотреть идут ли сигналы, вот код проверки
    Код (Text):

    int countL = 0;
    int countH = 0;

    void setup() {            
      attachInterrupt(0, changePin, CHANGE);

      Serial.begin(9600);
    }

    void loop() {
      Serial.print("L - ");
      Serial.print(countL);
      Serial.print(" H - ");
      Serial.println(countH);

      delay(200);
    }

    void changePin()
    {
      if (digitalRead(2))
      {
        countH++;
      }
      else
      {
        countL++;
      }
    }
     
    Сначала подключаем выход Data на 2 пин (attachInterrupt(0)), запускаем код и смотрим, значения в сериал мониторе должны расти.
    Затем выход Clock, в сериал мониторе значения тоже должны расти.

    Если все нормально, можно запустить этот код, взятый от сюда
    http://www.instructables.com/id/Reading-Digital-Callipers-with-an-Arduino-USB/?ALLSTEPS
    Код (Text):

    //Simple Digital Calliper Reader
    //See http://j44industries.blogspot.com/

    // Pin Declarations
    int dataIn = 11;
    int clockIn = 12;

    // Variables
    int clock = 1;
    int lastClock = 1;
    unsigned long time = 0;
    unsigned long timeStart = 0;
    int out = 0;


    void setup() {
      // Pin Set Up
      pinMode(dataIn, INPUT);
      pinMode(clockIn, INPUT);


      Serial.begin(115200);
      Serial.println("Ready: ");
    }


    void loop(){

      lastClock = clock;
      clock = digitalRead(clockIn);

      if (lastClock == 1 && clock == 0){
        out = digitalRead(dataIn)+digitalRead(dataIn)+digitalRead(dataIn); // Tripple sampling to remove glitches
        if((micros() - time) > 800){
          Serial.println(" ");
        }
        else if((micros() - time) > 400){
          Serial.print("  ");
        }

        if (out > 1){
          Serial.print("1");
        }
        else{
          Serial.print("0");
        }
        Serial.print(",");
        time = micros();
      }
    }
     
    Значения для проверки
    Если данные инвертированы, то нужен этот код
    В коментах этой страницы,
    http://www.instructables.com/id/Reading-Digital-Callipers-with-an-Arduino-USB/?ALLSTEPS
    Видимо и в этой схеме есть инвертирование выходов или штангели разные (Китайцы народ изобретательный:)), плохо понимаю. Но нужно пробовать оба варианта.
     

    Вложения:

    • cxema2.jpg
      cxema2.jpg
      Размер файла:
      78 КБ
      Просмотров:
      1.248
  10. Alex19

    Alex19 Гуру

    После этого можно попробовать, готовые коды.
    Если инвертирования сигнала нет, то должен подойти данный код.
    http://habrahabr.ru/post/133088/

    У меня он инвертирован, вот мой
    Код (Text):

    //CyberKot (он же... я же! Shadow)
    //Скетч Arduino, выводящий данные с циркуля в COM-порт
    //Версия для хабра
    int dataIn = 8; //шина данных, можно менять
    int clockIn = 2; //шина clock, не трогать, так надо (читайте про attachInterrupt)

    int isin = 0; //д=1 мм=0
    int isfs = 0; //минус
    int index; //счётчик битов

    unsigned long xData, oData; //новые показания и старые (потом будет понятно зачем)

    int ledPin = 13; //мигалка на 13й вход (встроенная, чтоб понятно было, что ничего не повисло)
    int ledState = LOW; //статус мигалки
    long previousMillis = 0; //когда последний раз мигали
    long interval = 500; // интервал мигания

    long previousGetMillis = 0;
    long Timeout = 8; //таймаут чтения битов в мс

    float stringOne; //временные переменные для вывода
    char charBuf[5];
    char charBuf2[8];

    void setup(){
    digitalWrite (dataIn, 1);
    digitalWrite (clockIn, 1);
    pinMode (dataIn, INPUT); //привязываем шину данных на dataIn
    pinMode (clockIn, INPUT); //и clock на 2й вход
    attachInterrupt(0,getBit,RISING); //и аттачим clock также на 2й вход

    Serial.begin(9600);
    delay(500);

    index = 0;
    xData = 0;
    oData = 999;
    }

    void loop(){
    if ((index !=0) && (millis() - previousGetMillis > Timeout) ) { //обнуление по превышению таймаута
      index = 0;
      xData = 0;
    };

    if (index >23) { //если слово считано полностью
      if (oData !=xData) {
        /* Этот вариант более изящен, по моему мнению, но съедает лишний килобайт
        if (isin==1){ //дюймы
          Serial.print("inch: ");
          stringOne =xData*5/10000.00000;
          stringOne *=pow(-1,isfs);
          Serial.println(floatToString(charBuf2,stringOne,5,5));
        }else { //мм
          Serial.print("mm: ");
          stringOne =xData/100.00;
          stringOne *=pow(-1,isfs);
          Serial.println(floatToString(charBuf,stringOne,2,5));
        }; */
        if (isin==1){ //дюймы
          if (isfs==1){ //минус
            Serial.print("inch: -");
          }else {
            Serial.print("inch: ");
          }
          stringOne =xData*5/10000.00000;
          Serial.println(floatToString(charBuf2,stringOne,5,5));
        }else { //мм
          if (isfs==1){ //минус
            Serial.print("mm: -");
          }else {
            Serial.print("mm: ");
          }
          stringOne =xData/100.00/2;
          Serial.println(floatToString(charBuf,stringOne,2,5));
        };
      };
      oData =xData;
      index=0;
      xData=0;
    };

    if (millis() - previousMillis > interval) { //мигалка
      previousMillis = millis();
      if (ledState == LOW)
        ledState = HIGH;
      else
        ledState = LOW;
      digitalWrite(ledPin, ledState);
      }
    }

    void getBit(){ //чтение битов и флаги
    previousGetMillis=millis();
    if(index < 20){
      if(!digitalRead(dataIn)==1){
        xData|= 1<<index;
      }
    } else {
      if (index==20) //минус
      isfs=!digitalRead(dataIn);

      if (index==23) //дюймы
      isin=!digitalRead(dataIn);
    };

    index++;
    }

    //функция для безгеморойного конверта переменной типа float в строку
    char * floatToString(char * outstr, double val, byte precision, byte widthp){ //буфер под результат, число, точность (после запятой), минимальная длина
      char temp[16];
      byte i;

      //обсчёт округления
      double roundingFactor = 0.5;
      unsigned long mult = 1;
      for (i = 0; i < precision; i++)
      {
        roundingFactor /= 10.0;
        mult *= 10;
      }

      temp[0]='\0';
      outstr[0]='\0';

      if(val < 0.0){
        strcpy(outstr,"-\0");
        val = -val;
      }

      val += roundingFactor;

      strcat(outstr, itoa(int(val),temp,10));  // целая часть
      if( precision > 0) {
        strcat(outstr, ".\0"); // дробная
        unsigned long frac;
        unsigned long mult = 1;
        byte padding = precision -1;
        while(precision--)
          mult *=10;

        if(val >= 0)
          frac = (val - int(val)) * mult;
        else
          frac = (int(val)- val ) * mult;
        unsigned long frac1 = frac;

        while(frac1 /= 10)
          padding--;

        while(padding--)
          strcat(outstr,"0\0");

        strcat(outstr,itoa(frac,temp,10));
      }

      // пробелы (для форматирования)
      if ((widthp != 0)&&(widthp >= strlen(outstr))){
        byte J=0;
        J = widthp - strlen(outstr);
     
        for (i=0; i< J; i++) {
          temp[i] = ' ';
        }

        temp[i++] = '\0';
        strcat(temp,outstr);
        strcpy(outstr,temp);
      }

      return outstr;
    }
     
    Разница лишь, в !digitalRead(dataIn).

    И в строке
    stringOne =xData/100.00/2;
    В оригинале
    stringOne =xData/100.00;
    Без нее у меня значения были увеличенные ровно на 2, пока не разбирался.

    В общем и целом хорошее решение для измерения, точность плавает от 0,01 до 0,03 в зависимости от размера объекта. Кроме того, как мне объяснили, при помощи системы рычагов можно получить значения 0,001 - 0,003.

    Те кто задумается приобретать штангель для этих целей обратите внимание на следующие нюансы.
    1. Почти все выключаются после определенного времени без действия, как правило 5 мин (пока решил вопрос включением выключением штангеля перед работой гид. клапана).
    2. Есть штангели, которые после выключения, включаются сами при движении (изменении значений).
    3. Если они включаются сами при движении (изменении значений), они могут помнить положение до выключения. Тогда вы получаете корректный размер.

    Эти пункты советую проверить перед покупкой.

    Надеюсь кому-нибудь будет полезно.

    P.S. Идею сделать на катушке еще не отмел, но нашел электронщиков, которые надеюсь сделают это за меня за денежку. Если у них получится опубликую.

    UPD. Увы ни одна компания из ради мастерских не взялась, когда объяснял по телефону, все были готовы. Когда принес клапан, отказывались, даже не уточняя цену:(.
     
    Последнее редактирование: 15 апр 2014
  11. Alex19

    Alex19 Гуру

    Как я уже писал. Пришлось отбросить идею создать собственный датчик, слишком много нюансов и т.д., отсутствие знаний и т.д.

    Вот мои поиски, возможно кому-то будет полезно.
    1. Штангель.
    Минусы для меня.
    a. Частота ответа, он отвечает по таймеру, а не по запросу.
    Скорость ответа 3Гц или 50Гц, быстрый режим, о переводе в данный режим можно почитать здесь http://www.shumatech.com/support/chinese_scales.htm#Chinese Scale Protocol, в конце страницы.
    b. Не понятный температурный режим.
    В руководстве написано следующие рабочая температура от 5 до 40 градусов. Возможно это касается только монитора. Мне хватило пункта a. поэтому не изучал температурные погрешности.
    с. Забирается одно прерывание, впрочем можно сделать его на основании таймера.
    d. Не понятен ресурс, время наработки на отказ.

    Моя ошибка, в том, что я принял максимальную скорость перемещения в 1,5м/с в возможность получения информации со штангеля.

    2. Индуктивные датчики линейных перемещения (аналоговые).
    Как я понял, они делятся на 2 типа, метрические и не метрические (это не точная терминология:)).
    Вот пример метрического Pepperl Fuchs PMI F112 и т.д. Особенно не разбирался, сложно достать, цены очень не приятные.

    Не метрические Balluff BAW002J, СКБ Индукция ИДА38 и еще пару фирм производящих их в России (всегда приятно покупать отечественное).

    Имеют только один явный минус.
    a. Они не обладают 100% линейностью, если сделать пару массивов в коде, проблема решается. Может, быть есть еще подводные камни. Увы приобрести на пробу Российские не удалось, но хотелось бы, для тестов.
    b. Частота 250Гц-500Гц. Не уверен, что ее будет достаточно, тут надо проверять.

    Плюсы для меня.
    a. Отличные температурные режимы есть от -25 до 75.
    b. Выдерживают высоко скоростные перемещения, до 40м/с.
    с. Корпуса в IP67, IP55 и т.д.

    Ресурс их не понятен, но навряд ли маленький, так как там просто нет особо чему ломаться.

    3. Остановились на датчиках линейного положения (потенциометрический).
    Типичные представители Novotechnick TLH. Цена не очень приятная, но это не единственная фирма которая выпускает такие датчики, можно найти китайские Novotechnick и т.д.

    Сильных минусов для меня нет.
    a. Размеры
    b. Механическое соединение

    Плюсы для меня.
    a. Линейность 0,1% повторяемость 0,01мм.
    b. Отличные температурные режимы есть от -30 до 100.
    c. Выдерживают высоко скоростные перемещения, до 10м/с.
    d. Корпуса в IP67, IP55 и т.д.
    f. Ресурс 100 мл. перемещений.

    Сейчас актуальность моего проекта упала, но академический интерес к нему остался:). Буду делать по мере сил, для развития.
     
  12. Alexanderdog

    Alexanderdog Нуб

    Может быть я ошибаюсь, а если снимать показания тока с катушки ? Не вариант?
     
  13. Alex19

    Alex19 Гуру

    Увы нет, бесполезно. Проверили первым делом когда, решили делать.
     
  14. Алекс, я правильно понял, что вы имеете клапан с пропорциональным управлением и обратной связью, но отсутствующей заводской схемой управления?

    Спрашиваю, так как в данный момент занимаюсь похожим вопросом. Как вариант могу предложить еще микросхемку для измерения индуктивности - LDC1000 c SPI-интерфейсом (от Texas Instruments). Сам пока не пробовал. Нахожусь еще на стадии взвешивания вариантов. Да и пока до конца не решил, а надо ли мне вообще знать положение золотника ;)
     
  15. Alex19

    Alex19 Гуру

    Да стоит на рабочих станках, но схем нет и толковых электронщиков чтобы разобраться. К тому же там тьма не понятных программируемых микросхем на каждой номер версии прошивки и т.д.

    Спасибо, за микросхему, положу в закладки.

    Пока увы проект потерял свою актуальность и был полностью заморожен. Сейчас уже другие проекты;).

    Остановились на датчиках линейного положения, по всем параметрам меня устроили. Точно такие стоят на станках, скорости плит смыкания до 1м/с, температура, вибрации и т.д. работают годы. Единственный минус мех. соединение. Так, что если вернемся к проекту, обязательно попробую данную микросхему.
     
  16. Ясно. А у меня вот распределители старенькие болгарские. Никаких штоков не вылазит, да и в моем случае, думаю, правильнее будет контролировать по давлению...
     
  17. Alex19

    Alex19 Гуру

    Увы в гидравлике не силен.

    Мы планировали контролировать давление и поток, но все равно почему-то использовались обратно пропорциональные клапаны с пид регулированием.

    UPD. Все просто, давно было, запамятовал. Самый древний станок 1 мотор, 2 насоса мотор крутится на постоянной скорости. Схема управления в процентах, от открытия клапанов.

    Датчики давления и потока, чтобы зафиксировать значения и в дальнейшем отталкиваться от них. Старые карты настроек не менять, чтобы как и прежде оператор забил эти значения в процентах. Обратно пропорциональный клапан, чтобы контролировать износ и отклонения значений.
     
    Последнее редактирование: 14 янв 2015
  18. Alex19

    Alex19 Гуру

    В сети с ходу не нашел подключение и код для LDC1000. Придется разбираться с даташитом.
    Лишь одно упоминание здесь http://e2e.ti.com/support/sensor/inductive-sensing/f/938/p/350383/1295198

    Человек пишет, что получилось.

    И пару упоминай тут, если решите использовать может будет полезно.
     
  19. REm

    REm Гик

    Не совсем в тему, но может кому пригодится
    измерение индуктивности

    Код (C++):
    long t_1 = 0; // переменная для хранения времении работы программы в мкс
    long t_2 = 0; // переменная для хранения времении работы программы в мкс
    int R = 9900; // сопротивление резистора в Омах
    float L = 0; // вычесленное значение индуктивности в мкГн

    void setup()
    {
    pinMode(13, OUTPUT); // установка выхода 13 на выход
    Serial.begin(9600); // будем записывать в COM-порт
    }

    void loop()
    {
      // блок контроля нулевого тока через резистор
      digitalWrite(13, LOW);
      while (analogRead (0) != 0 )
      {
      }

      // собственно сам блок вычисления индуктивности в мкГн
      digitalWrite(13, HIGH);  // +5В вольт на ножку 13
      t_1 = micros(); // чтение времении от начала работы программы в мкс
      while ( analogRead (0) < 647 ) // пустой цикл работает когда напряжение на ножке 0 менее 3,16 В (63,2% от 5В.)
      {
      }
      t_2 = micros(); // чтение времении от начала работы программы в мкс
     
      L = float(t_2 - t_1)* R/1000000; // вычисление индуктивности L.
      Serial.print("Induktivnosti katuski: ");
      Serial.print(L); // вывод значения индуктивности на экран
      Serial.print (" mkGn");
      Serial.println();
    }
     
    на днях проверю на индуктивностях из набора, у них погрешность 10%
    схема включения
     

    Вложения:

  20. 9xA59kK

    9xA59kK Гик

    А использовать датчики холла не пробовали с аналоговым выходом(например SS49)?? Если есть шток достаточно маленький магнитик приклеить , установить датчик и мерить выход с него довольно линейный и точность достаточная. У меня на работе такие на положение исполнительных устройств используется(не везде правда), в основном дифтрансформаторная схема.
    ps\ Диапазон механических перемещений в пределах ~ 0-10мм-15мм, можно и больше если использовать всякие рычаги и т.п? . Датчики холла по чувствительности разные бывают.
     
    Последнее редактирование: 30 июл 2016