![]() |
![]() |
||||||||||||
Осваиваем STM32 или ESR-метр на быстром ADC
Автор: Поскряков Дмитрий, balmer@inbox.ru Начало Доброго всем здоровья. Расскажу о своем переходе с 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.
Сначала не поверил такому. Может быть в наших краях нельзя купить? Может плату нельзя вытравить под него? Может ADC гавно хоть и быстрое? Может программировать эту штуку настолько сложно, что документацию пол года читать надо? Оказалось, что все хорошо и никаких проблемм нет. Травим Травим платку. Обычный ЛУТ. Фотки составляющих успеха.![]() ![]() ![]() ![]() ![]() ![]() ![]() Схема ![]() Схема довольно простая. 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 мкф. Так как график крайне линейный, то сомневаться в достоверности данных не приходится. А метод наименьших квадратов в данном случае позволяет обойтись лишь одним циклом измерения. Обратите внимание - на измерение емкости конденсатора достаточно ДВУХ милисекунд времени. Конденсатор 1 мкф уже не получается измерить по нормальному с резистором 220 ом, слишком быстро он заряжается до 300 mV. ESR полностью зафейлился, емкость показало заниженную. Как показали дальнейшие тесты - заниженная емкость это не ошибка измерения. Электролитический конденсатор 1 мкф на частоте порядка 100 кгц действительно теряет половину своей емкости. Чтож включаем тогда pullup резистор на 10 ком. Конденсатор 100 nf еще можно измерять с резистором 10 ком, но для более мелких конденсаторов включим pullup 470 ком. Обратите внимание - вначале достаточно приличное время идет нулевое плато. В реальности там немного отрицательное напряжение. Это каойто косяк в схемотехнике у меня, но к сожалению не до конца понимаю какой. Плюсы Результатами доволен. ADC встроенное в STM32 отличнейшее. Правда есть одно но. Низкое входное сопротивление. Более того - низкое входное ЕМКОСТНОЕ сопротивление от конденсаторов которые не полностью разрядились. Поэтому если подключить щупы осциллографа ко входу работающего ADC получится примерно такая картина. ![]() Результаты взяты со входа ADC работающего на частоте 500 кгц и подключенного к земле через резистор в 1 ком. Выбросы в 20 mV. Так что если вы вдруг увидите на просторах интернета схему USB осциллографа на STM32 без входного операционного усилителя - знайте, измеряет она хрен знает что да еще и шумы на измеряемую схему дает. Недостатки и проблеммы. Выше описывал все в достаточно положительном ключе, теперь опишу проблеммы. Как практические так и теоретические. Когда выключаем все pullup и pulldown резисторы - на входе образуется немного отрицательного напряжения. Порядка 300 микровольт. Так и не смог понять причину - возможно плату надо отмывать лучше, возможно в схемотехнике косяк. Это достаточно сильно влияет на результаты при использовании резистора в 470 ком. Плата и код.
Тадиционно в аттаче исходники программы для микроконтроллера. Также схема и плата для Eagle. И скрипты на питоне, которые принимают данные на стороне комптютера. Так-же приложил данные, считанные для разных конденсаторов. При запуске скрипта qt4_plot.py их можно загрузить и посмотреть графики во всех деталях. Код для микроконтроллера был переделан из стандартного сэмплика STM32, и написанный мной код в файлах hw_config.c, voltage.c, sound.c.
Файлы: Все вопросы в Форум.
|
|
||||||||||||
![]() |
![]() |


![]() |
![]() |
|||
|
||||
![]() |
![]() |