Arduino.ru
Регистрация новых пользователей и создание новых тем теперь только на новом форуме https://forum.arduino.ru
forum.arduino.ru
Transistor Tester for Arduino
Transistor Tester for Arduino
Как-то знакомый электронщик показал мне прибор под названием «транзистор тестер», который измеряет параметры радиоэлектронных компонентов. На данном форуме он обсуждался здесь:
http://arduino.ru/forum/proekty/tester-radiodetalei-na-arduino
Меня же заинтересовало, что данный прибор сделан на чипе ATmega328p, то есть почти на Arduino. Так и появился данный проект.
Ссылки в Интернете быстро привели к разработчикам данного прибора:
http://www.mikrocontroller.net/articles/AVR_Transistortester
http://www.mikrocontroller.net/svnbrowser/transistortester/
Язык программирования у них Си, что тоже подходит для Arduino. Глобальное же отличие заключается в том, что их код рассчитан на полную прошивку чипов, а в Arduino используется загрузчик и скетчи.
Автор сайта pighixxx.com на основании кода от Markus разрабатывал Arduino-версию прибора (под названием Ardutester), но почему-то её забросил.
Рассмотрение схемы прибора привело к выводу, что для измерений к Arduino нужно добавить лишь 6 резисторов (что и было реализовано).
Так как нулевой пост нельзя править, то ссылки и описания будут выложены в следующих постах, чтобы можно было поправить в случае ошибок.
В комплекте к скетчу прилагаются:
— документация к прибору от авторов на английском и русском языках;
— исходные коды от авторов (папка source);
— картинки схемы подключения и фото макетной платы (папка images);
— последняя версия скетча от Pighixxx.
Для переработки в скетч была взята версия 1.08k от Karl-Heinz Kubbeler. По аналогии с авторами она получила общий номер 1.08a, а номер версии соответственно 1.08.001.
Версия 1.08.002 в посте #18
Версия 1.08.003 в посте #265
Версия 1.08.004 в посте #298
Схема получившегося тестера транзисторов практически совпадает с картинкой Pighixxx (поэтому не стал рисовать свою):
Есть только маленькие отличия:
— не припаян конденсатор на AREF, так как по описанию разработчиков он иногда мешает при переключении на внутренний источник опорного напряжения Arduino 1,1 вольт;
— добавлен к кнопке подтягивающий резистор к питанию на 100 кОм, так как в коде может применяться команда, отключающая внутреннюю подтяжку к питанию всех пинов.
Дисплей подключен по стандартной схеме:
Дисплей подключается к пинам D2-D7, пины D0 и D1 свободны для Serial port, пины A4 и A5 свободны для I2C.
На макетной плате собрал разборную конструкцию на основе Arduino Nano 328 и LCD 1602:
На фотографии видны 6 резисторов, необходимых для измерений. Справа распаян разъём для подключения по I2C, и ещё маленький разъём для подключения внешнего питания (от Кроны например).
Провода специально проложил сверху, чтобы было видно к каким пинам они идут. Снизу макетку не стал фотографировать, чтобы не позориться из-за напаянных там комков (программирую я лучше чем паяю).
На Arduino Nano пришлось удалить светодиод на 13-м пине (точнее был удален токоограничительный резистор).
Схему можно собрать и без дисплея, так как результаты через Serial port могут передаваться в Serial monitor Arduino IDE.
Как в коде реализован процесс измерения сильно не вникал, лишь преобразовал код авторов в скетч для Arduino. Компилировал на Arduino IDE версии 1.0.5.
Основные изменения в коде (из того что вспомнил):
— все исходные файлы объединены в один скетч, границы файлов можно увидеть по разделителям типа /* -=- -=- -=- */;
— программный код приведён к «читабельному виду» (у авторов в коде часто не хватает отступов);
— разумеется функция main() была разделена на setup() и loop();
— отключено энергосбережение, автоотключение и Watchdog;
— функции для дисплея переделаны для использования через стандартные библиотеки LiquidCrystal — так лучше для смены дисплея;
— обмен через серийный порт у авторов планировался через пин A3, поэтому их UART в скетче отключен, но маска TXD_MSK (задаваемая там) используется для отделения других аналоговых портов от измерительных A0-A2;
— функции для задержек от авторов через макросы заменены на стандартные ардуиновские;
— немецкие слова к коде заменены на английские (например: Ausgabe на Output);
— из языков оставил только английский и немецкий;
— некоторые куски кода закомментировал, но оставил — могут кому-нибудь пригодится при модификации кода;
— в функции GetESR() для задержек требовалась точность в 0,5 мкс, поэтому написал функцию us500delay(), которая равносильна delayMicroseconds(), но на 500 нс работает дольше.
Замеченные ошибки:
— при получении результатов через Serial monitor после «testing. » в порт попадает какой-то мусор, но дальнейшему выводу он не мешает, поэтому не стал разбираться;
— в функции uart_putc() пришлось добавить задержку на 2 мс, так как при скорости 9600 серийный порт не успевал выталкивать данные.
Что можно ещё сделать:
— у Arduino Nano остались свободные аналоговые пины A6 и A7 — можно на них завести дополнительные проверки (например для внешнего питания);
— в начале loop() кнопка сначала проверяется на нажатие — после этого на дисплей можно вывести какую-нибудь полезную информацию (например о напряжении внешнего питания), затем идёт проверка на отпускание кнопки и запускается тестирование;
— вместо кнопки можно сделать запуск тестирования через серийный порт.
Автоматический определитель электронных компонентов
Очень интересное и несложное устройство, которое позволит измерить сопротивление, ёмкость и индуктивность любого элемента за несколько секунд.
Для этого потребуется совсем немного деталей, которые обычно есть у каждого начинающего ардуинщика: микроконтроллер ATMEGA, двухстрочный дисплей и несколько резисторов.
Разработал это устройство Маркус Фрейек (финальная версия проекта на немецком), а затем, и по сей день дорабатывает Карл-Хайнц Куббелер (текущая страница проекта на немецком).
Несмотря на то, что этот проект позиционируется как тестер транзисторов, мне гораздо больше интересна его способность быстро измерять двухвыводные компоненты, отсюда и название статьи.
Его можно купить как собранное устройство или как конструктор для сборки, но самое интересное — можно собрать самому на макетной плате за полчаса из деталей, которые часто уже есть под рукой.
Максимально упрощенная схема для быстрой сборки:
Самая свежая прошивка на текущий момент лежит здесь. Нужно только выбрать подкаталог для конкретной модели микроконтроллера.
К сожалению, если использовать ATMEGA8A, то будет или завышаться измерение сопротивлений в 1.5 раза, или занижаться измерение ёмкости в 1.5 раза, и будет нужна прошивка специально для 8A, найти её можно здесь, файл ATmega8A_Engl.zip. А лучше сразу найти и использовать ATMEGA328P.
Детальная техническая документация на русском языке доступна здесь. В каталоге нужно выбрать файл ttester.pdf. (Внизу страницы жмём «Download GNU tarball», архив распаковываем и находим нужный PDF.)
Выглядит, конечно, неопрятно, зато уже работает.
Точность измерения пока невысока, но даже в таком виде это просто замечательный прибор, который я обязательно сделаю в корпусе и поселю у себя на столе.
Для улучшения точности измерений планирую приближаться к эталонной схеме следующими шагами:
- Поменять измерительные резисторы на более точные с отклонением в 1%.
- Добавить кварц на 8 МГц.
- Поставить ИОН
- Перенести на паяную плату с минимальной длиной проводников.
- Перейти на ATMEGA328.
Эти компоненты пока в пути, по прибытию обновлю статью с результатами.
Приехали компоненты, заменил ATMEGA8A на ATMEGA328P, стали определяться индуктивности и ESR у конденсаторов. Обновил КДПВ.
После замены МК измерения стали производиться гораздо дольше, после измерения стало появляться сообщение TimeOut! и экран выключался через пару секунд. Согласно инструкции, подключил резистор 10К от питания к выводу 13, всё стало работать нормально.
Заменил резисторы на 1%, (к сожалению купить 0.1%, как рекомендуется в инструкции, мне не удалось). Определение резисторов улучшилось, но всё равно грубовато.
Нашел 1% резисторы разных номиналов и измерил их.
Вот номиналы, результаты замера мультиметром DT-838 (заявленная точность измерений 1%) и собранной схемой (после рекомендуемой калибровки):
82.5 ом — 92.3 ом — 96.8 ом
392 ом — 390 ом — 426 ом
649 ом — 640 ом — 693 ом
499 ом — 497 ом — 510 ом
1к — 1001 ом — 987 ом
4.27к — 4.27к — 4.274 ом
4.75к — 4.75к — 4707 ом
13.3к — 13.28к — 13.04к
22.6к — 22.5к — 22.1к
1.65к — 1698 ом — 1620 ом
1м — 1014к — 996 к
10м — out of range — 8783к
20м — out of range — 17.83м
Радует возможность определения таких огромных сопротивлений.
ArduTester
ТехнарьКто
Транзистортестер на Arduino Nano и I2C LCD1602 дисплее. В скетче любой может подставить адрес своего I2C дисплея и легко собрать ArduTester. Схема простая, только надо отпаять резистор идущий к светодиоду на 13-м пине, иначе при пустых щупах будет показывать емкость в несколько микрофарад.
Определение элемента с указанием порядка подключенных выводов.
NPN транзисторы
PNP транзисторы
N-канальные-обогащенные MOSFET — N-E-MOS
P-канальные-обогащенные MOSFET- P-E-MOS
N-канальные-обедненные MOSFET — N-D-MOS
P-канальные-обедненные MOSFET — P-D-MOS
N-канальные JFET
P-канальные JFET
Тиристоры маломощьные
Симисторы маломощьные
Диоды
Стабилитроны низковольтные
Двухкатодные сборки диодов
Двуханодные сборки диодов
Два последовательно соединенных диода
Диоды симметричные
Резисторы
Переменные резисторы
Конденсаторы (емкость, ESR ЭПС, Vloss утечки)
Индуктивности
Авторы изначального проекта : Markus Frejek,Karl-Heinz Kubbeler,Markus Reschke. Все продаваемые китайцами транзистортестеры — это копии проекта немецких радиолюбителей. Автор с сайта pighixxx.com на основании ассемблерного кода от Markus-а разработал скетч для Arduino UNO. Автор скетча arduinec с сайта arduino.ru воодушевившись этим тоже сделал скетч одной из версий транзистор тестера, и как водиться, оба автора забросили поддержку ардуино скетчей. Автор plouc68000 с сайта arduino.cc сделал скетч на практически самую новую версию ардуино тестера. В общем, все скетчи хороши, выбирай на вкус. Скетч под новую версию транзистортестера очень сложный, а прибор слишком хорош для макетной платы. А если делать все по правильному, то теряется смысл скетча для Arduino. Проще сделать прошивку из исходников немецких радиолюбителей написанных на асемблере и прибор сделать по их же схеме. Почему хороший скетч хуже более старого, в случае макетирования и ардуино? Да потому, что на С++ код будет больше и функций в приборе будет меньше, а те функции которые поместятся, обладают избыточным качеством при повторении на макетной плате. Новый прибор может измерять доли пикофарад и доли ома, а соединения на макетной плате дают изменяющиеся величины сопротивления в пределах пары Ом, что сводит на нет все достоинства нового прибора изготовленного на макетной плате. Длинные провода дают изменяющуюся величину емкости в десяток пикофарад, следовательно диапазон измерения единиц пикофарадов, теряет весь смысл. Длинные провода — это удобно. Измерение от десятков пикофарад и от единиц ом обеспечивает и старый скетч. Зато перечисленные выше недостатки для сборки на макетной плате, уже не так важны. Единственное, что авторы скетчей для arduino так и не разобрались с появляющимися ошибками у некоторых пользователей, которые пытались повторять проекты. Старый скетч «устал» от изменений в новых версиях Arduino IDE и перестал компилироваться. Изучив работу прибора от Karl-Heinz Kubbeler, посмотрев скетчи от plouc68000, остановился на наработках автора arduinec. Привинтил к самому простому скетчу LCD1602 I2C дисплей и заствил скетч компилироваться в новых версиях Arduino IDE. В скетче мной добавлена возможность подставить адрес имеющегося у Вас I2C дисплея в первой строке кода. Разбирая ошибки при повторении проектов с показаниями в несколько микрофарад при пустом щупе, решение найдено еще arduinec. Надо удалить цепочку на ноге микропроцессора участвующей в измерении. Это резистор и светодиод на 13-м пине. Вторая и последняя из замеченых мной ошибок, завышение емкости электролитов, ровно в два раза. Мной из документации от «Markus..» вычитана причина. Необходимые изменения, мной внесены в схему ardutestera. В итоге получился работоспособный транзистортестер на Arduino Nano с I2C LCD1602 дисплеем который легко собрать даже на макетной плате.
Информация от arduinec переделавшего код транзистортестера в скетч для ардуино.
«Исходные файлы объединены в один скетч, границы файлов можно увидеть по разделителям типа /* -=- -=- -=-*/.
Функция main() разделена на setup() и loop(). Отключено энергосбережение, автоотключение и Watchdog.
Функции для дисплея переделаны для использования через стандартные библиотеки LiquidCrystal.
Функции для задержек заменены на ардуиновские. Немецкие слова к коде заменены на английские.
Из языков только английский и язык авторов программы — немецкий.
Для функции GetESR() использована функция us500delay(), которая равносильна delayMicroseconds().
Ошибки:
При получении результатов через Serial monitor после «testing. » в порт попадает какой-то мусор, но дальнейшему выводу он не мешает, поэтому все на это забили. В функции uart_putc() добавлена задержка на 2 мс, так как при скорости 9600 серийный порт не успевал выталкивать данные.
Что ещё есть:
у Arduino Nano остались свободные аналоговые пины A6 и A7. В начале loop() кнопка сначала проверяется на нажатие — после этого на дисплей можно вывести полезную информацию (например о напряжении внешнего питания), затем идёт проверка на отпускание кнопки и запускается тестирование.»
Скетчей два с окончанием old и new. По функционалу оба скетча идентичны. Old — старый, условно для более старых Arduino IDE под WindowsXP проверял на «arduinoIDE-v1.6.9-windows_32bit». New — условно для новых Arduino IDE (новый на момент написания этого текста, март 2021 года). Проверял на «arduinoIDE-v1.8.12-windows7_64bit» и «arduinoIDE-v1.8.13-windows7_64bit».