Свежие обсуждения
Прочее

Осциллограф-приставка к ПК

1 4 8
В Радио была где-то схема аналога эквивалента нагрузки на мощном транзисторе. Всё хочу её найти и сделать универсальную нагрузку. Что-бы при ремонте Импульсных блоков питания не обвешивать их лампочками. И лень кажый раз побеждает ! Такую штуку можно и к аккумулятору. На мощном полевике.  
Сначала ответы:

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

Насчет метода измерения уровня - измеряется не пиковое, а среднее значение модуля входного сигнала за определенный интервал (100 мс).

В общем, аппаратную часть я собрал - все работает нормально, по крайней мере у меня на компе. Заодно программу немного подправил. Все лежит в архиве:

http://sirdvm.narod.ru/mdm.rar (120 кБ)

Некоторые комментарии к содержимому архива:

M_DM.EXE - собственно программа. После первого запуска создаст файл для хранения настроек (M_DM.INI), в той же папке. Для работы программы никаких дополнительных файлов не требуется.

README.HTML - написал краткий мануал. Скорее всего, бестолковый.

SCH.GIF - схема модулятора.
На контакт PAD7 подается напряжение питания 5..9В, потребляемый ток порядка 10мА. На контакт PAD5 - напряжение с аккумулятора. Контакты PAD1,2,3,4 - к переключателю, который коммутирует PAD1 на PAD2, PAD3 или PAD4. Соответствующие режимы - установка нуля, измерение, калибровка. J1 - выход на звуковую карту. Уровень выходного сигнала зависит от номинала R4, при настройке лучше поставить подстроечный или переменный.

PCB.JPG - скан готовой платы. В центре - переключатель, хотя он немного похож на корпус TO-220.

Папка EAGLE - схема и печатная плата в формате EAGLE 4.11.

Папка SOURCE - исходники. Программа написана на Си/WinAPI, файл проекта M_DM.DSP - для Visual C++ 6.0.

Все вопросы - сюда, на форум.

 
DVM, если я правильно понял, у устройства есть область нечувствительности 0...(примерно)0,5 В? Т.е определяется минимальным рабочим напряжением транзистора?  
IDiod, 0.5В - это очень примерно Скажем, при входном напряжении 0.5В и напряжении питания 6В ток базы примерно 50 мкА, ток коллектора 100 мкА. Напряжение насыщения в таком случае < 0.05В (при комнатной температуре). Если и это не устраивает, можно заменить ключ на биполярном транзисторе на что-то другое.

И пара картинок по теме: график зависимости напряжения насыщения маломощного транзистора (условно можно считать аналогом КТ3102) от тока коллектора и разрядная кривая Varta Longlife (это не щелочной элемент!) на нагрузку 11 ом:

http://sirdvm.narod.ru/varta/varta.html

Напряжение на графике в начале и конце разряда соответствует показаниям цифрового мультиметра с точностью 0.01В - это к вопросу о линейности.

И еще: если кто-то скачивал программу примерно до 16:00 (сегодня, 21 января), скачайте еще раз. Там исправлен небольшой баг, который появился в результате вчерашних "улучшизмов" - шкала времени могла исчезать, если минимальное отображаемое на графике напряжение <> 0В. Как известно, каждая найденная в программе ошибка предпоследняя

 
Принимается (а вопрос о градуировке по двум точкам снимается)

Я тут немного покопался в исходникаах. Но не до конца, а только в том модуле (wave.c), где происходит ввод выборок и их "усреднение".
Там же есть подсчет "смещения нуля", значение которого почему-то не используется (вместо этого проводится ручная операция "коррекция нуля").
С чем это оказалось связано?

 
При наличии входного сигнала от модулятора результат вычисления смещения нуля довольно существенно плавает. Это связано в том числе с тем, что в начале и конце выборок присутствуют "обрывки" меандра. Поэтому было принято решение запонинать смещение нуля, когда вход звуковой карты замкнут на землю -- предусмотрена соответствующая кнопка в окне калибровки.

Что касается результата вычисления смещения, то он на самом деле используется - запоминается в глобальной переменной _last_dc_offset. Ее значение используется для установки _dc_adj после того, как юзер нажмет кнопку "<<".

Вообще же логика работы - в фоновом режиме висит поток получения выборок, который периодически обновляет ряд переменных (пиковое и среднее значение в последней выборке, смещение нуля). Эти значения могут быть получены в любой момент времени, с оглядкой на объект синхронизации.

Что касается программы вообще - писалась она исключительно для собственного потребления и практически без оглядки на возможности оптимизации. Более того, алгоритм работы придумывался в процессе кодирования, что конечно плохо, но для таких простых программок еще прокатывает.

 
В общем, желающие могут сами...

... добавить второй канал (все-таки зв.карта имеет стерео вход);
... модернизировать программу (меня волнует проблема -- а не уплывёт ли за сутки и более однократно выставленная "коррекция нуля" в суровом температурном режиме системного блока? Непрерывный мониторинг смещения нуля, мне кажется, -- правильный путь, а чтобы меандр не "рвался", надо все-таки вводить "двойную буферизацию" для режима непрерывной оцифровки)

 
Эх, не пора ли вводить деление на страницы?!  
Насчет смещения нуля: само собой, оно имеет некоторую температурную и временную нестабильность. Непрерывный мониторинг не повредит, тем более можно избавится от лишнего элемента пользовательского интерфейса -- но надо поэкспериментировать. Оцифровка и так непрерывная, просто смещение нуля тупо вычисляется для каждой выборки. Раз уж этот проект всплыл, софт можно немного доработать.

Замечу, что желающим и, главное, могущим модернизировать программу скорее всего проще написать ее с нуля, чем разбираться примерно в 1400 строчках чужого кода практически без комментариев.

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

 
...а чтобы меандр не "рвался", надо все-таки вводить "двойную буферизацию" для режима непрерывной оцифровки)
Чтобы меандр не рвался, надо выборку умножить на сглаживающую функцию (т.н. функцию окна).
Лучшее разрешение по амплитуде дает функция окна Blackman/Harris.
http://www.tektronix.com/Measurement/cgi-bin/framed.pl?Document=/Measurement/App...
В Вашем случае окно прямоугольное, что для измерения уровня не есть хорошо.