… но вы не понимаете:
- Что это?
- Оно рабочее?
- Какие у него параметры?
У меня бывало, а вчера случилось много…
Идея строить ВАХ при помощи МК появилась давно, а реализовать руки дошли только что.
Из чего делать?
В качестве контроллера выбрал Arduino Nano потому что:
- Есть USB и, что не менее важно, чтобы его использовать не надо его изучать;
- Удобная, маленькая, не очень дорогая;
- Требований к скорости тут никаких, поэтому STM32 не нужен;
- Очень легко программировать;
- Выходные напряжения 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# частично скопировав код из предыдущего проекта.
Самые яркие вертикальные и горизонтальные линии — нули.
Диод 1N4148:
Диод 1N5817:
Видите, как при нулевом напряжении ток положительный? Как думаете, почему?
Неизвестный светодиод:
Резистор 680 Ом:
Итог
Не претендуя на точность устройство из Arduino Nano, 2-х конденсаторов и 3-х резисторов позволяет сравнивать ВАХ различных двухполюсников. Из недостатков можно отметить:
- Малый диапазон напряжений. Если расширять диапазон, то количество элементов возрастает в разы.
- Шум ШИМ. Можно устранять увеличением емкости конденсаторов, увеличением номиналов резисторов и установкой дополнительных каскадов фильтра или отказом от ШИМ в пользу отдельного ЦАП или цифрового потенциометра.
- Не видно малых токов, таких как обратные токи диодов. Тоже устранимый недостаток.
Фото аппаратной части:
Комментарии (31)
tormozedison
15.07.2016 20:11+12Оказывается, успешно изготовить характериограф можно, не зная что он так называется.
nerudo
15.07.2016 21:45+2Отлично, первый уровень вы прошли. Следующий — стройте АЧХ :)
xedas
16.07.2016 07:54Есть ещё полуторный уровень — всякие зависимости токов коллектора от напряжения коллектор-эмитер при разных токах базы у транзисторов и зависимости напряжения стабилизации от потребляемого тока и входного напряжения стабилизаторов напряжения.
kiruha87
15.07.2016 22:31+1А что будет если не усреднять напряжения при усреднений? Шума будет дольше, но зато ток не будет положительным при нулевом напряжении.
xedas
15.07.2016 22:36+1
Это объединение графиков за несколько проходов.xedas
15.07.2016 22:48+1Вблизи нулевого напряжения получаются моменты с открытым и закрытым диодом. Те, что с открытым дают положительный вклад в ток, а с закрытым не дают вклада, в результате ток в среднем положительный.
kiruha87
15.07.2016 23:06Спасибо за ответ. Все-таки глядя на это хочется воткнуть конденсаторы побольше.
xedas
16.07.2016 09:12Да, надо больше или второй каскад. Поставил дополнительно 100 мкФ электролиты, теперь без усреднения:
Тут по несколько проходов по 1N5817 и 1N4148.
А с усреднением в нуле теперь нормальный нуль тока.LSDtrip
16.07.2016 23:47А если ещё ШИМ до мегагерца довести и АЦП в регистрах расписать (чтоб раз в 50 быстрее было), то шумов ещё меньше будет.
xedas
16.07.2016 23:52ШИМ в 1 МГц при частоте МК в 16 МГц даст всего 16 возможных вариантов напряжения.
Увеличение скорости АЦП на шумы не повлияет.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 МГц на МК).xedas
17.07.2016 09:59это как так 16 вариантов? 2 в 16 теоретический предел
Чтобы получить 1 МГц ШИМ при 16 МГц МК таймер должен считать всего до 16 — и вариантов выходных напряжений всего 16. Откуда 2^16?
АЦП только на 8 МГц завести можно, где-то 400 kSPS
У AVR предел скорости АЦП в районе 15 kSPS, 400 никак не получится, но это и не нужно. Скорость работы АЦП в данной схеме не важна.
Что такое STM32F030T4P6 даже нагуглить не смог.LSDtrip
17.07.2016 11:09Так пусть будет плавающая частота. 0.5 мкс включен, и переменное время выключен. В итоге значений будет куда больше, чем 16, на таймер повесить АЦП, а сам шим в основном потоке.
У атмеги328 заявлено максимально 1 МГц АЦП максимум (теоретически это 100 kSPS), но без проблем можно разогнать до CLK/2. На 14 МГц нормально работает, хотя последний бит шумит дико. 600 kSPS лично получал на arduino nano c кварцем на 28 МГц.xedas
17.07.2016 11:300.5 мкс включен, и переменное время выключен
Тогда для длины импульса в 1/10 периода получим уже 5 мкс периода и всего 200 кГц частоты, а при длине импульса в 9/10 периода паузу надо отмерять в 0,05 мкс, что меньше одного такта (кварц 16 МГц).
У атмеги328 заявлено максимально 1 МГц АЦП максимум (теоретически это 100 kSPS)
В даташите написано: Up to 76.9kSPS (Up to 15kSPS at Maximum Resolution). Верю, что можно разогнать, только зачем в этом случае? Тут же мы сами выбираем скорость и можем тратить на измерение каждой точки столько времени, сколько нужно.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 запустить, постоянно максимальное значение выдаёт, может от удачности экзепляра зависит.
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
вот. Дешевый МК в разы производительние атмеги. В местных магазинах стоит всего раза в полтора дороже, чем в китае. И это поштучно.
Incidence
15.07.2016 23:43Автор так многообещающе начал "но вы не понимаете: Что это?", а потом терзал одни только диоды.
Мне, как человеку далёкому от электроники, кажется это нечестным, т.к. я уже начал представлять себе волшебный чёрный ящик, который определяет тип любой радиодетали. Вот что если туда резистор воткнуть? (я резистор от диода не сразу отличу на глаз).15432
16.07.2016 00:41+2Есть такие. Не всё, но многое определяют
http://s.aliexpress.com/riaAVVJbWST
17.07.2016 01:57Согласен, очень хорошая в хозяйстве штука. У меня есть такой, но работает не без проблем. К примеру, если в нём садится батарейка, он начинает выпендриваться и приписывать транзисторам заоблачные коэффициенты усиления (более миллиона), что навевает на мысль, что прибор должен поддерживать тестирование составных транзисторов, но нет, подключение дарлингтонов просто сводит прибор с ума.
Недавно ещё обнаружил для себя, что полевики 2N7000, хорошо известные тем, что их очень легко спалить, могут выходить из строя таким огромным множеством способов, что просто глаза разбегаются: раз, два, три. Для сравнения вот тест нормального экземпляра.
xedas
16.07.2016 07:46Втыкал резистор, даже в статье есть. Воткнул туда стабилитрон 2с147а:
Так что стабилитроны тоже хорошо определяются, хотя с напряжением стабилизации только до 5 В.
Moog_Prodigy
16.07.2016 11:27+1Советую погуглить «осциллограф — ваш помощник». Там были простейшие приставки к осциллографу, позволяющие проверять очень многое — конденсаторы, резисторы, стабилитроны, динисторы, тиристоры и, кажется, даже электронные лампы. Графики в реальном времени рисовал обычный осциллограф, не цифровой.
xirahai
16.07.2016 12:18+1В мой старенький аналоговый Hameg HM303-6 подобная приставка встроена с завода. Действительно очень полезная штука, до появления этого осцилла была классическая приставка из книжки к С1-55.
ARD8S
16.07.2016 11:43+1«У вас когда-нибудь было...»
Было и не раз. Решалось так: смотрим визуальное повреждение или какие-либо следы вокруг, ставим метки на плате «как оно было установлено», выпаиваем, прозваниваем, смотрим обозначение на плате, гуглим обозначение, гуглим сервис мануал, если после выкуривания справочников и сервис мануала «дзен» не постигнут (деталь остаётся неизвестной и в магазинах радиодеталей точно таких же нет), то прикидываем зачем оно вообще может быть нужно, смотрим как идут дорожки через деталь (звоним дорожки после выпайки), действуем по обстоятельствам. Может оказаться так, что этот элемент неисправен, но установлен параллельно остальным дорожкам и по сути особой роли (кроме как фильтра (etc), например) не играет, то собирем и тестируем.
andrrrrr
16.07.2016 18:29Что это? -если оно нерабочее то только по маркировке и справочнику(гуглю), или по принципиальной схеме(если она есть) узнать что это.
Оно рабочее? — опять же нужно сначала узнать что это, и сравнить параметры с теми которые должны быть.
Какие у него параметры? — тестером, как самый простой и доступный вариант, пока не купил вот это:
http://ali.pub/uazbx
из минусов, ВАХ не строит, хотя и есть экран на котором это возможно сделать.(этот ВАХ реально нужен для проверки детали?)
в остальном сплошные плюсы. определит практически любую 2-х, 3-х ножечную деталь,(3х выводную микросхему ессесно не отпределит),
основные параметры покажет, цена меньше чем у более-менее приличного тестера, и уж тем более осциллографа.
и в очередной раз убедился, что если хочется чего нибудь срукодельничать, то нужно сначала поискать в китайском магазине, есть 95% шанс что китайцы это уже сделали и цена будет меньше чем собирать самому из деталей.
DryominG
del