РадиоКот :: Осваиваем STM32 или ESR-метр на быстром ADC
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Измерительная техника >

Теги статьи: Добавить тег

Осваиваем STM32 или ESR-метр на быстром ADC

Автор: Поскряков Дмитрий, balmer@inbox.ru
Опубликовано 14.08.2013
Создано при помощи КотоРед.

Начало

Доброго всем здоровья. Расскажу о своем переходе с ATmega8 на STM32, и немного затрону теорию и практику измерения ESR. Радиолюбитель я с одной стороны с давней историей,  а с другой стороны начинающий. Потому как в молодости занимался паянием схемок всяких. Потом учеба, кризис. И вот год назад мне таки стало интересно, почему многие из схем в детстве не работали. И понеслось все по новой. Пока занимаюсь измерением разных параметров катушек индуктивности и конденсаторов. Сделал несколько схемок, спасибо этому сайту и замечательной статье Измеритель ESR/L/C/F/P/t на PIC16F876A.

Сравниваем

Перво наперво руководствуясь заветами этой стати сделал измеритель ESR и LC. Правда вместо PIC16 поставил ATmega8, вместо MCP6022 поставил LM328, а вместо TL431 поставил стабилитрон на 3.3 v. Результаты получились не очень. Прибор безбожно врал на емкостях меньше 10 микрофарад. И если емкость он еще измерял правильно, то веры в ESR для маленьких конденсаторов не было никакой. Впрочем результат закономерен. LM328 тормоз еще тот. ADC ATMega8 имеет максимальную частоту в 10 кГц. Всего 10 КИЛОГЕРЦ!!!Почертыхавшись на такие параметры и потихоньку изучая современую базу увидел микроконтроллеры фирмы STM.
Вот возьмем STM32F102CBT6 который купил за 120 руб/шт. Это сравнимо с ценой Atmega8. Смотрим характеристики:

  • ATMega8 - 2 кб RAM, 8 кб FLASH, 10 кгц 10 бит ADC. Частота ядра 16 Мгц
  • STM32F102CBT6 - 16 кб RAM, 128 кб FLASH, 500 кгц 12 бит ADC и хардварный USB. Частота ядра 48 Мгц

Сначала не поверил такому. Может быть в наших краях нельзя купить? Может плату нельзя вытравить под него? Может ADC гавно хоть и быстрое? Может программировать эту штуку настолько сложно, что документацию пол года читать надо? Оказалось, что все хорошо и никаких проблемм нет.

Травим

Травим платку. Обычный ЛУТ. Фотки составляющих успеха.
Cif чистит, но не царапает.
Бумага от самоклейки - тонер полностью переводится. Ничего отмывать не надо.
Ламинатор. Пропускаем пару раз через него платку с самоклейкой.
Платка после ламинатора. Принтер конечно не особо ровно тонер ложит, поэтому при травлении главное не передержать, чтобы дыр не было ненужных.
Персульфат аммония, нагреть до 40 градусов. За 5-10 минут все травися.
Получившийся после травления результат.
Окончательный результат. Конечно транзисторы запаяны кривовато, но паял их уже после того как было все припаянно, буквально на весу.

Схема


Схема довольно простая. STM32 процессор по центру. Слева-сверху инвертор напряжения на ICL7660. Слева-посредине USB разъем чтобы к компьютеру подключать. Справа-сверху аналоговая часть, быстрый операционный усилитель AD825 , несколько pullup резисторов и один pull-down транзистор. Сравним с Измеритель ESR/L/C/F/P/t на PIC16F876A. Там два каскада усиления, у меня один. Два каскада усиления не стал делать, потому как понимаю - таких маленьких шумов не смогу обеспечить.  С одним каскадом улиления в 10 раз уже получается 300 милливольт на входе, делим на 4096, получаем младший разряд 100 микровольт. Источник тока тоже не стал делать, потому как стабилитроны отнюдь не предназначенны на работы на высоких частотах, а 400 килогерц это уже довольно приличная частота и стабилитрон, особенно составной вроде TL431 может попортить нам картину на начале графика. pull-down транзистор взял маломощный, чтобы лишней емкости и утечек не было на входе.


Логика работы программы

Сначала хотел припаять LCD дисплей, но потом понял - от лукавого это все. Схемка ведь чисто для обучения и тестирования свойств STM32. Поэтому сливаем все данные по USB. По хардварному USB 2.0 full speed! Принцип работы очень простой - сначала разряжаем pull down транзистором, потом заряжаем через резистор 220 ом, 10 ком или 470 ком. Сохраняем 1024 сэмпла, и передаем их на компьютер. Математика очень простая. Берем метод наименьших квадратов и подгоняем коэффициэнты функции по минимуму среднеквадратичной ошибки. Изменение тока при разном напряжении компенсируем математикой


Результаты


Начнем с простого, с измерения резистора 1 ом. Используем 220 ом pullup резистор.

Синий график, что намеряли. Красный график - апроксиммация. Тут никаких неожиданностей. Есть лишь небольшой шум в последних двух битах ADC амплитудой порядка 200-300 микровольт. Замкнем щупы и присмотримся к ним тщательнее.

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

Конденсатор емкостью 2200 мкф. Так как график крайне линейный, то сомневаться в достоверности данных не приходится. А метод наименьших квадратов в данном случае позволяет обойтись лишь одним циклом измерения. Обратите внимание - на измерение емкости конденсатора достаточно ДВУХ милисекунд времени.

Конденсатор емкостью 100 мкф - это вообще идеальный случай, так как и ESR у него достаточно высок чтобы не было особых ошибок измерения и емкость достаточна мала, чтобы он устел зарядиться до 300 милливольт за 2 милисекунды.

Конденсатор 1 мкф уже не получается измерить по нормальному с резистором 220 ом, слишком быстро он заряжается до 300 mV. ESR полностью зафейлился, емкость показало заниженную. Как показали дальнейшие тесты  - заниженная емкость это не ошибка измерения. Электролитический конденсатор 1 мкф на частоте порядка 100 кгц действительно теряет половину своей емкости. Чтож включаем тогда pullup резистор на 10 ком.

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

Конденсатор 100 nf еще можно измерять с резистором 10 ком, но для более мелких конденсаторов включим pullup 470 ком. Обратите внимание - вначале достаточно приличное время идет нулевое плато. В реальности там немного отрицательное напряжение. Это каойто косяк в схемотехнике у меня, но к сожалению не до конца понимаю какой.

Для более мелких емкостей уже существенна входная емкость схемы. Всетаки pulldown полевой транзистор обладает большой внутренней емкостью. Запускаем измерять емкость просто разомкнув щупы.

Получаем отличный ровный график входной емкости. Тут мы уже подходим к краю точности прибора. Поэтому точность результата 740pf+-10pf. Начинают уже вовсю сказываться внешние помехи, скорости ADC начинает не хватать. Чтож, измеряем далее.

Конденсатор емкостью 910 pf. Здесь мы уже вычли 750 pf собственной емкости.

Конденсатор емкостью 15 pf. Здесь уже точность никакущая, может показать как 10 так и 25 пикофарад. Врочем сам факт измерения такой маленькой емкости напрямую при помощи ADC уже радует.

Плюсы



Результатами доволен. ADC встроенное в STM32 отличнейшее. Правда есть одно но. Низкое входное сопротивление. Более того - низкое входное ЕМКОСТНОЕ сопротивление от конденсаторов которые не полностью разрядились. Поэтому если подключить щупы осциллографа ко входу работающего ADC получится примерно такая картина.

Результаты взяты со входа ADC работающего на частоте 500 кгц и подключенного к земле через резистор в 1 ком. Выбросы в 20 mV. Так что если вы вдруг увидите на просторах интернета схему USB осциллографа на STM32 без входного операционного усилителя - знайте, измеряет она хрен знает что да еще и шумы на измеряемую схему дает. 

На сладкое - попробовал использовать сей девайс в качестве USB звукового входа. Поставил резистор чтобы было смещение на 150 mV, разделительный конденсатор и подключил к плееру. Получилась читать поток лишь 44100 8 бит, дальше идет гдето затык по скорости передачи USB. Но результаты все равно неплохие (оцифрованный кусочек музыки в аттаче).  Шумов на 8 бит совершенно нет, так как они в последних двух битах. Пробовал сливать и все 12 бит точности - если слушать тишину, то шум слышен, но ооочень тихо.

Недостатки и проблеммы.

Выше описывал все в достаточно положительном ключе, теперь опишу проблеммы. Как практические так и теоретические. Когда выключаем все pullup и pulldown резисторы - на входе образуется немного отрицательного напряжения. Порядка 300 микровольт. Так и не смог понять причину - возможно плату надо отмывать лучше, возможно в схемотехнике косяк. Это достаточно сильно влияет на результаты при использовании резистора в 470 ком.

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

Смотрим на начало графика.

Расхождение на начальном этапе связано с тем, что емкость электролитического конденсатора зависит от частоты. Для сравнения ниже график металлокерамического конденсатора 0.47 мкф 275V.

Как видим аппроксимирующая функция идеально совпадает с измеренной. Но вернемся к графику резистора 1 мкф. При такой аппроксимации получается ESR порядка 20 ом, но если мы напрямую возмем значение с синего графика - то полуается ESR порядка 10 ом. Конечно эту проблемму можно "замести под ковер", но проблемма остается - емкость электролитов зависит от частоты и это не учитывается в формулах.

Плата и код.

 

Тадиционно в аттаче исходники программы для микроконтроллера. Также схема и плата для Eagle. И скрипты на питоне, которые принимают данные на стороне комптютера. Так-же приложил данные, считанные для разных конденсаторов. При запуске скрипта qt4_plot.py их можно загрузить и посмотреть графики во всех деталях.  Код для микроконтроллера был переделан из стандартного сэмплика STM32, и написанный мной код в файлах hw_config.c, voltage.c, sound.c.




Файлы:
Схема и печатная плата в формате Eagle
Все одним архивом, печатная плата, программа и скрипты.
Оцифрованный кусочек музыки 44 кгц 8 бит


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

43 6 2