У вас когда-нибудь было такое, что есть элемент с двумя выводами по типу таких…



… но вы не понимаете:
  • Что это?
  • Оно рабочее?
  • Какие у него параметры?

У меня бывало, а вчера случилось много…

Идея строить ВАХ при помощи МК появилась давно, а реализовать руки дошли только что.

Из чего делать?


В качестве контроллера выбрал Arduino Nano потому что:
  1. Есть USB и, что не менее важно, чтобы его использовать не надо его изучать;
  2. Удобная, маленькая, не очень дорогая;
  3. Требований к скорости тут никаких, поэтому STM32 не нужен;
  4. Очень легко программировать;
  5. Выходные напряжения 5 В.

Схема измерительной части:



На In1 и In2 подаём напряжение и в результате должны построить график зависимости тока через UD (Unknown Device) = (UOutС — UOut2) / R1 от напряжения на нём = UOut1 — UOutС

Т.к. схема у нас на 5 В, то для упрощения ограничимся ВАХ в диапазоне от -5 до 5 В, чтобы не усложнять конструкции.
ЦАП в комплекте нет, поэтому входные сигналы можно формировать либо при помощи ШИМ + ФНЧ либо при помощи цифрового потенциометра/внешнего ЦАП. Я для начала сделал 1-й вариант.

Итоговая схема получилась такая:



Программа для Arduino настолько маленькая, что приведу её прямо тут:
Программа
void setup() {    
  Serial.begin(115200);
  analogReference(EXTERNAL);  // не забудьте подключить Aref к 5 В
  DDRD |= (1 << 2) | (1 << 3);  
  TCCR2B |= (0 << CS22)|(0 << CS21)|(1 << CS20); // prescaler = 1. Переполнение каждые 13 мкс
  TIMSK2 |= (1 << TOIE2)|(1 << OCIE2A); // включаем прерывания
  TCCR2A &= ~(3); //  WGM20 = 0, WGM21 = 0
  TCCR2B &= ~(1 << 3); // WGM22 = 0
  OCR2A = 128;
  sei();
}

ISR(TIMER2_OVF_vect)
{
  PORTD |= 1 << 2;
  PORTD &= ~(1 << 3);
}

ISR(TIMER2_COMPA_vect)
{
  PORTD |= 1 << 3;
  PORTD &= ~(1 << 2);
}

int analogAVG(int channel){
  uint32_t summ;
  uint16_t count = 50;
  for(uint8_t i = 0; i < count; i++)
    summ += analogRead(channel);
  return summ / count;
}

void loop() {
  OCR2A += 1;
  if(!OCR2A) // ждём пока перезарядятся конденсаторы
    delay(100);
  Serial.print(OCR2A);
  Serial.print(":");
  Serial.print(analogAVG(0));
  Serial.print(":");
  Serial.print(analogAVG(1));
  Serial.print(":");
  Serial.println(analogAVG(2));
}



Рисовалку ВАХ сделал на C# частично скопировав код из предыдущего проекта.

Несколько ВАХ полученные при помощи устройства
Яркие вертикальные линии каждый 1В, яркие горизонтальные линии каждые 100 мкА.
Самые яркие вертикальные и горизонтальные линии — нули.

Диод 1N4148:



Диод 1N5817:



Видите, как при нулевом напряжении ток положительный? Как думаете, почему?

Ответ
ШИМ даёт колебания напряжения. При измерении напряжения они усредняются и получается 0, а ток выпрямляется диодом и после выпрямления и усреднения получается уже значимо больше нуля.


Неизвестный светодиод:



Резистор 680 Ом:




Итог


Не претендуя на точность устройство из Arduino Nano, 2-х конденсаторов и 3-х резисторов позволяет сравнивать ВАХ различных двухполюсников. Из недостатков можно отметить:
  1. Малый диапазон напряжений. Если расширять диапазон, то количество элементов возрастает в разы.
  2. Шум ШИМ. Можно устранять увеличением емкости конденсаторов, увеличением номиналов резисторов и установкой дополнительных каскадов фильтра или отказом от ШИМ в пользу отдельного ЦАП или цифрового потенциометра.
  3. Не видно малых токов, таких как обратные токи диодов. Тоже устранимый недостаток.


Фото аппаратной части:

Поделиться с друзьями
-->

Комментарии (31)


  1. DryominG
    15.07.2016 20:10

    del


  1. tormozedison
    15.07.2016 20:11
    +12

    Оказывается, успешно изготовить характериограф можно, не зная что он так называется.


    1. tzlom
      15.07.2016 23:01
      +7

      А как вы думали появился первый характериограф?


  1. nerudo
    15.07.2016 21:45
    +2

    Отлично, первый уровень вы прошли. Следующий — стройте АЧХ :)


    1. vitalvas
      16.07.2016 02:41

      Я бы с удовольствием почитал о ХЕЗКОР или ЧЭЗХ


    1. xedas
      16.07.2016 07:54

      Есть ещё полуторный уровень — всякие зависимости токов коллектора от напряжения коллектор-эмитер при разных токах базы у транзисторов и зависимости напряжения стабилизации от потребляемого тока и входного напряжения стабилизаторов напряжения.


  1. kiruha87
    15.07.2016 22:31
    +1

    А что будет если не усреднять напряжения при усреднений? Шума будет дольше, но зато ток не будет положительным при нулевом напряжении.


    1. xedas
      15.07.2016 22:36
      +1


      Это объединение графиков за несколько проходов.


      1. xedas
        15.07.2016 22:48
        +1

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


      1. kiruha87
        15.07.2016 23:06

        Спасибо за ответ. Все-таки глядя на это хочется воткнуть конденсаторы побольше.


        1. xedas
          16.07.2016 09:12

          Да, надо больше или второй каскад. Поставил дополнительно 100 мкФ электролиты, теперь без усреднения:

          Тут по несколько проходов по 1N5817 и 1N4148.

          А с усреднением в нуле теперь нормальный нуль тока.


          1. LSDtrip
            16.07.2016 23:47

            А если ещё ШИМ до мегагерца довести и АЦП в регистрах расписать (чтоб раз в 50 быстрее было), то шумов ещё меньше будет.


            1. xedas
              16.07.2016 23:52

              ШИМ в 1 МГц при частоте МК в 16 МГц даст всего 16 возможных вариантов напряжения.
              Увеличение скорости АЦП на шумы не повлияет.


              1. Meklon
                16.07.2016 23:54

                Может недорогой ЦАП взять? Что-нибудь через i2c управляющееся.


              1. Meklon
                17.07.2016 00:43

                MCP4725, например?


                1. xedas
                  17.07.2016 09:44

                  Шумы ШИМ после установки 100uF конденсаторов больше не напрягают. Если что допиливать — то это увеличение диапазона по напряжениям и добавлять возможность управлять третьим электродом, чтобы строить вот такие графики для транзисторов:


              1. LSDtrip
                17.07.2016 00:52

                это как так 16 вариантов? 2 в 16 теоретический предел, но в атмеге328 только 10 битный АЦП, в принципе хватит и 8 бит. Вот они на мегагерце и будут без шумов от разгона АЦП. Хотя мегагерц оно не возьмет при 16 МГц на МК, АЦП только на 8 МГц завести можно, где-то 400 kSPS получится с учётом всех задержек, но всё равно в разы больше, чем analogRead.
                STM32F030T4P6 (стоит 40 центов) может 12 битный АЦП при 7 MSPS без помех использовать (100 МГц на МК), а отладочная плата за 2 бакса на STM32F103С8T6 может в два-три раза быстрее в попеременном режиме двух АЦП (при 120-160 МГц на МК).


                1. xedas
                  17.07.2016 09:59

                  это как так 16 вариантов? 2 в 16 теоретический предел

                  Чтобы получить 1 МГц ШИМ при 16 МГц МК таймер должен считать всего до 16 — и вариантов выходных напряжений всего 16. Откуда 2^16?

                  АЦП только на 8 МГц завести можно, где-то 400 kSPS

                  У AVR предел скорости АЦП в районе 15 kSPS, 400 никак не получится, но это и не нужно. Скорость работы АЦП в данной схеме не важна.

                  Что такое STM32F030T4P6 даже нагуглить не смог.


                  1. LSDtrip
                    17.07.2016 11:09

                    Так пусть будет плавающая частота. 0.5 мкс включен, и переменное время выключен. В итоге значений будет куда больше, чем 16, на таймер повесить АЦП, а сам шим в основном потоке.

                    У атмеги328 заявлено максимально 1 МГц АЦП максимум (теоретически это 100 kSPS), но без проблем можно разогнать до CLK/2. На 14 МГц нормально работает, хотя последний бит шумит дико. 600 kSPS лично получал на arduino nano c кварцем на 28 МГц.


                    1. xedas
                      17.07.2016 11:30

                      0.5 мкс включен, и переменное время выключен

                      Тогда для длины импульса в 1/10 периода получим уже 5 мкс периода и всего 200 кГц частоты, а при длине импульса в 9/10 периода паузу надо отмерять в 0,05 мкс, что меньше одного такта (кварц 16 МГц).

                      У атмеги328 заявлено максимально 1 МГц АЦП максимум (теоретически это 100 kSPS)

                      В даташите написано: Up to 76.9kSPS (Up to 15kSPS at Maximum Resolution). Верю, что можно разогнать, только зачем в этом случае? Тут же мы сами выбираем скорость и можем тратить на измерение каждой точки столько времени, сколько нужно.


                      1. LSDtrip
                        17.07.2016 15:16

                        Ну всё равно на ровном месте ускорить можно простым дефайном функции.

                        int16_t val = 0;
                        #define areadSet(p) ADMUX = p | B01000000;  _delay_us(20);
                        #define areadStart() ADCSRA = B11000010;  while (ADCSRA & B01000000);  val = ADCL + (ADCH << 8);
                        
                        uint8_t valFast = 0;
                        #define areadSetFast(p) ADMUX = p | B01100000;  _delay_us(20);
                        #define areadStartFast() ADCSRA = B11000010;  while (ADCSRA & B01000000);  valFast = ADCH;
                        

                        7 и 8 биты в ADMUX отвечают за источник опорного напряжения, первые 3 бита в ADCSRA отвечают за частоту, в данном примере получается 300 kSPS (27 МГц на ядре). Оно без потери точности в разы быстрее analogRead (для максимальной чтоности выставить ADCSRA = B11000111; но оно без этоно нормально 10 бит измеряет. Можно попробовать выставитьс ADCSRA = B11000001; но сейчас почему-то не получилось на 500 kSPS запустить, постоянно максимальное значение выдаёт, может от удачности экзепляра зависит.


                  1. LSDtrip
                    17.07.2016 11:15

                    Что такое STM32F030T4P6 даже нагуглить не смог.

                    Немного название перепутал, не T4, а F4.
                    http://ru.aliexpress.com/item/Free-shipping-10pcs-STM32F030F4P6-Value-line-ARM-based-32-bit-MCU-STM32F030F4P6/32399890554.html
                    вот. Дешевый МК в разы производительние атмеги. В местных магазинах стоит всего раза в полтора дороже, чем в китае. И это поштучно.


  1. Incidence
    15.07.2016 23:43

    Автор так многообещающе начал "но вы не понимаете: Что это?", а потом терзал одни только диоды.
    Мне, как человеку далёкому от электроники, кажется это нечестным, т.к. я уже начал представлять себе волшебный чёрный ящик, который определяет тип любой радиодетали. Вот что если туда резистор воткнуть? (я резистор от диода не сразу отличу на глаз).


    1. 15432
      16.07.2016 00:41
      +2

      Есть такие. Не всё, но многое определяют
      http://s.aliexpress.com/riaAVVJb


      1. WST
        17.07.2016 01:57

        Согласен, очень хорошая в хозяйстве штука. У меня есть такой, но работает не без проблем. К примеру, если в нём садится батарейка, он начинает выпендриваться и приписывать транзисторам заоблачные коэффициенты усиления (более миллиона), что навевает на мысль, что прибор должен поддерживать тестирование составных транзисторов, но нет, подключение дарлингтонов просто сводит прибор с ума.

        Недавно ещё обнаружил для себя, что полевики 2N7000, хорошо известные тем, что их очень легко спалить, могут выходить из строя таким огромным множеством способов, что просто глаза разбегаются: раз, два, три. Для сравнения вот тест нормального экземпляра.


    1. xedas
      16.07.2016 07:46

      Втыкал резистор, даже в статье есть. Воткнул туда стабилитрон 2с147а:


      Так что стабилитроны тоже хорошо определяются, хотя с напряжением стабилизации только до 5 В.


  1. Moog_Prodigy
    16.07.2016 11:27
    +1

    Советую погуглить «осциллограф — ваш помощник». Там были простейшие приставки к осциллографу, позволяющие проверять очень многое — конденсаторы, резисторы, стабилитроны, динисторы, тиристоры и, кажется, даже электронные лампы. Графики в реальном времени рисовал обычный осциллограф, не цифровой.


    1. xirahai
      16.07.2016 12:18
      +1

      В мой старенький аналоговый Hameg HM303-6 подобная приставка встроена с завода. Действительно очень полезная штука, до появления этого осцилла была классическая приставка из книжки к С1-55.






  1. ARD8S
    16.07.2016 11:43
    +1

    «У вас когда-нибудь было...»
    Было и не раз. Решалось так: смотрим визуальное повреждение или какие-либо следы вокруг, ставим метки на плате «как оно было установлено», выпаиваем, прозваниваем, смотрим обозначение на плате, гуглим обозначение, гуглим сервис мануал, если после выкуривания справочников и сервис мануала «дзен» не постигнут (деталь остаётся неизвестной и в магазинах радиодеталей точно таких же нет), то прикидываем зачем оно вообще может быть нужно, смотрим как идут дорожки через деталь (звоним дорожки после выпайки), действуем по обстоятельствам. Может оказаться так, что этот элемент неисправен, но установлен параллельно остальным дорожкам и по сути особой роли (кроме как фильтра (etc), например) не играет, то собирем и тестируем.


  1. andrrrrr
    16.07.2016 18:29

    Что это? -если оно нерабочее то только по маркировке и справочнику(гуглю), или по принципиальной схеме(если она есть) узнать что это.
    Оно рабочее? — опять же нужно сначала узнать что это, и сравнить параметры с теми которые должны быть.
    Какие у него параметры? — тестером, как самый простой и доступный вариант, пока не купил вот это:
    http://ali.pub/uazbx
    из минусов, ВАХ не строит, хотя и есть экран на котором это возможно сделать.(этот ВАХ реально нужен для проверки детали?)
    в остальном сплошные плюсы. определит практически любую 2-х, 3-х ножечную деталь,(3х выводную микросхему ессесно не отпределит),
    основные параметры покажет, цена меньше чем у более-менее приличного тестера, и уж тем более осциллографа.

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


  1. fuxx
    21.07.2016 02:56

    ошибка в analogAVG. summ не инициализируется в 0