Простой USB осциллограф на PIC18F2550

Этот простой и дешёвый USB осциллограф был придуман и сделан просто ради развлечения. Давным давно довелось чинить какой-то мутный видеопроцессор, в котором спалили вход вплоть до АЦП. АЦП оказались доступными и недорогими, я купил на всякий случай парочку, один пошёл на замену, а другой остался. Недавно он попался мне на глаза и почитав документацию к нему я решил употребить его для чего-нибудь полезного в хозяйстве. В итоге получился вот такой приборчик. Обошёлся в копейки (ну рублей 1000 примерно), и пару выходных дней. При создании я постарался уменьшить количество деталей до минимума, при сохранении минимально необходимой для осциллографа функциональности. Сначала я решил, что получился какой-то уж больно несерьёзный аппарат, однако, сейчас я им постоянно пользуюсь, потому что он оказался весьма удобным - места на столе не занимает, легко помещается в карман (он размером с пачку сигарет) и обладает вполне приличными характеристиками:

- Максимальная частота дискретизации - 6 МГц;
- Полоса пропускания входного усилителя - 0-16 МГц;
- Входной делитель - от 0.01 В/дел до 10 В/дел;
- Входное сопротивление - 1 МОм;
- Разрешение - 8 бит.

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

Схема USB осциллографа

Кнопка S2 - это часть железа нужного для бутлоадера. Если при подключении осциллографа к USB держать её нажатой, то PIC заработает в режиме бутлоадера и можно будет обновить прошивку осциллографа при помощи соответствующей утилиты.

В качестве АЦП (IC3) была использована "телевизионная" микросхема - TDA8708A. Она вполне доступна во всяких "Чип и Дип"ах и прочих местах добычи деталей. На самом деле это не только АЦП для видеосигнала, но и коммутатор входов, выравниватель и ограничитель уровней белого - чёрного и т.д. Но все эти прелести в данной конструкции не используются. АЦП весьма шустр - частота дискретизации - 30 МГц. В схеме он работает на тактовой частоте 12 МГц - быстрее не нужно, потому что PIC18F2550 просто не сможет быстрее считывать данные. А чем выше частота - тем больше потребление АЦП. Вместо TDA8708A можно использовать любой другой быстродействующий АЦП с параллельным выводом данных, например TDA8703 или что-нибудь от Analog Devices.

Тактовую частоту для АЦП удалось хитрым образом извлечь из PIC'а - там запущен ШИМ с частотой 12 МГц и скважностью 0.25. Тактовый импульс положительной полярности проходит в цикле Q1 PIC'а так что при любом обращении к порту B, которое происходит в цикле Q2 данные АЦП будут уже готовы. Ядро PIC'а работает на частоте 48 МГц, получаемой через PLL от кварца 4 МГц. Команда копирования из регистра в регистр выполняется за 2 такта или 8 циклов. Таким образом, данные АЦП возможно сохранять в память с максимальной частотой 6 МГц при помощи непрерывной последовательности команд MOVFF PORTB, POSTINC0. Для буфера данных используется один банк RAM PIC18F2550 размером 256 байт.

Меньшие частоты дискретизации реализуются добавлением задержки между командами MOVFF. В прошивке реализована простейшая синхронизация по отрицательному или положительному фронту входного сигнала. Цикл сбора данных в буфер запускается командой от PC по USB, после чего можно эти данные по USB прочитать. В результате PC получает 256 8-битных отсчётов которые может, например, отобразить в виде изображения.

Входная цепь проста до безобразия. Делитель входного напряжения без всяких изысков сделан на поворотном переключателе. К сожалению не удалось придумать как передавать в PIC положение переключателя, поэтому в графической морде осциллографа есть только значения напряжения в относительных единицах - делениях шкалы. Усилитель входного сигнала (IC2B) работает с усилением в 10 раз, смещение нуля, необходимое для АЦП (он воспринимает сигнал в диапазоне от Vcc - 2.41В до Vcc - 1.41В) обеспечивается напряжением с программируемого генератора опорного напряжения PIC (CVREF IC1, R7,R9) и делителем от отрицательного напряжения питания (R6,R10, R8). Т.к. в корпусе ОУ был "лишний" усилитель (IC2A), я использовал его как повторитель напряжения смещения.

Не забудьте про емкостные цепочки для частотной компенсации входной ёмкости вашего ОУ и ограничивающих диодов, которые отсутствуют на схеме - нужно подобрать ёмкости параллельно резисторам делителя и резистору R1, иначе частотные характеристики входной цепи загубят всю полосу пропускания. С постоянным током всё просто - входное сопротивление ОУ и закрытых диодов на порядки выше сопротивления делителя, так что делитель можно просто посчитать не учитывая входное сопротивление ОУ. Для переменного тока иначе - входная ёмкость ОУ и диодов составляют значительную величину по сравнению с ёмкостью делителя. Из сопротивления делителя и входной ёмкости ОУ и диодов получается пассивный ФНЧ, который искажает входной сигнал.

Чтобы нейтрализовать этот эффект нужно сделать так, чтобы входная ёмкость ОУ и диодов стала значительно меньше ёмкости делителя. Это можно сделать соорудив емкостной делитель параллельно резистивному. Посчитать такой делитель сложно, т.к. неизвестна как входная ёмкость схемы, так и ёмкость монтажа. Проще его подобрать.

Способ подбора такой:

1. Поставить конденсатор ёмкостью примерно 1000 пФ параллельно R18.
2. Выбрать самый чувствительный предел, подать на вход прямоугольные импульсы с частотой 1 кГц и размахом в несколько делений шкалы и подобрать конденсатор параллельно R1 так, чтобы прямоугольники на экране выглядели прямоугольниками, без пиков или завалов на фронтах.
3. Повторить операцию для каждого следующего предела, подбирая конденсаторы параллельно каждому резистору делителя соответственно пределу.
4. Повторить процесс с начала, и убедиться, что на всех пределах всё в порядке ( может проявиться ёмкость монтажа конденсаторов ), и, если что-то не так, слегка подкорректировать ёмкости.

Сам ОУ - это Analog Devices AD823. Самая дорогая часть осциллографа. :) Но зато полоса 16 МГц - что весьма неплохо.А кроме того, это первое из шустрого, что попалось в розничной продаже за вменяемые деньги.

Конечно же этот сдвоенный ОУ без всяких переделок можно поменять на что-то типа LM2904, но тогда придётся ограничится сигналами звукового диапазона. Больше 20-30 кГц оно не потянет.

Ну и форму прямоугольных, например, сигналов будет слегка искажать. А вот если удастся найти что-то типа OPA2350 (38МГц) - то будет наоборот замечательно.

Источник отрицательного напряжения питания для ОУ сделан на хорошо известной charge-pump ICL7660. Минимум обвязки и никаких индуктивностей. Ток по выходу -5 В конечно у неё невелик, но нам много и не надо. Цепи питания аналоговой части изолированы от помех цифры индуктивностями и ёмкостями (L2, L3, C5, C6). Индуктивности попались номиналом 180 uГн, вот их и поставил. Никаких помех по питанию даже на самом чувствительном пределе.

Прошивка PIC заливается по USB с помощью бутлоадера который сидит с 0-го адреса в памяти программ и запускается если при включении удерживать нажатой кнопку S2. Так что прежде чем прошивать PIC - залейте туда сначала бутлоадер - будет проще менять прошивки.

Исходники драйвера осциллографа для ядер 2.6.X находятся в архиве с прошивкой. Там же есть консольная утилитка для проверки работоспособности осциллографа. Её исходники стоит посмотреть, чтобы разобраться как общаться с осциллографом, если хочется написать для него свой софт.

Программа для компьютера проста и аскетична. Подключить осциллограф к USB и запустить qoscilloscope. Требуется QT4.

Пила частотой около 100 кГц на экране компьютера

Что внутри осциллографа


Архив для статьи "Простой USB осциллограф на PIC18F2550"
Описание: Софт, исходники, прошивка, схема в формате Eagle
Размер файла: 3.76 MB Количество загрузок: 6 520 Скачать

Комментарии  

0 #1 nik-nik 04.11.2014 08:45
Здравствуйте !
Давно хотел сделать осциллограф.
Нашёл в интернете много различных вариантов и на USB и на LCD дисплеях , но они или очень примитивные или слишком сложные и дорогие детали.
Понравился этот вариант. Детали доступные и недорогие.
Решил собирать. Скачал архив.Но возникли вопросы.
В архиве несколько программ на компьютер для работы с осциллографом. Как они устанавливаются непонятно.
Нет не exe файла не другого установочного.
В статье написано :
Подключить осциллограф к USB и запустить qoscilloscope. Требуется QT4.
Что такое QT4 ?
Помогите кто знает. Напишите кто собирал.
Буду рад если ответит по всем вопросам автор.
Спасибо.
Сообщить модератору
+2 #2 AntonChip 04.11.2014 21:22
1. Необходимо скопировать все файлы из папки final_prog 2.0/System32 в папку windows/System32
2. Установить драйвера из папки final_prog 2.0/Driver
3. Запустить программу Project2.exe
Сообщить модератору
+1 #3 Александр Канда 10.03.2016 21:29
Добрый день. Собрал данную схему. Прошил пикоконтроллер. Сделал все как в инструкции
(1. Необходимо скопировать все файлы из папки final_prog 2.0/System32 в папку windows/System32
2. Установить драйвера из папки final_prog 2.0/Driver)
но при установке драйверов выдает ошибку - " сиситема обнаружила драйвера, но при попытке их установить произошла ошибка. не удается найти указанный файл".
в чесм может быть дело? или из-за windows7?
Сообщить модератору
+1 #4 AntonChip 11.03.2016 22:47
Пробовал на XP, дрова нормально встали, на семерке не пробовал, возможно вручную надо устанавливать
Сообщить модератору
0 #5 Александр Канда 12.03.2016 14:27
Еще один вопрос. Как подобрать значение подстроичных резисторов R6 и R7 для настройки опорной точки. Первый раз с этим сталкиваюсь, поэтому не знаю как быть
Сообщить модератору
0 #6 Artem 08.06.2016 12:37
Подскажите в чем может быть проблема, файлы из System32 скопировал, драйвер установил, пытаюсь запустить Project2.exe выдаёт что файл vcl60.bpl не найден, хотя я уже по нескольку раз перепроверял, этот файл есть в System32. Уже и от имени администратора пытался включить и антивирус отключал, толку нет. Попробовал тоже самое сделать на компьютере друга ( у него 10 винда) всё работает без проблем, у меня винда 8.1 и никак не хочет работать.
Сообщить модератору
0 #7 Juris 3D 03.12.2016 00:53
Докладываю, что программа осциллографа нормально запускаетса под Windows7 64-бит. Файлы из папки "System32" я копирую в основную папку самой программы, и всё нормально. Я в самое ближайшее время буду собирать железо, несмотря не нокоторую "старость" разработки. Просто я сейчас "запал" на разные DIY осцики, вот и этот попробую. Уважаемый Автор, если заглядываете сюда: скажите пожалуйста, какая версия программы "самая самая"? У моей в параметрах .exe вот так: 86.5KB, 2011.03.26. Хочу перепроверить, у меня самая актуальная, или может нет. Спасибо заранее!
Сообщить модератору
+2 #8 sergang 08.01.2017 10:37
сайт автора :http://www.stanson.ch/index.php?page=proj&proj=USB-oscope
обсуждение на форуме :http://www.microchip.su/archive/index.php/t-10440.html

РЕГУЛИРОВКА:

Так. Делать надо всё по-порядку.
1. Подать 3 В на вход АЦП. Убедиться что морда отображает это напряжение правильно - линия должна быть в пределах экрана и иметь шум в пределах 1 пикселя.
При изменении напряжения должна смещаться. Пока это не сделано - всё остальное не имеет смысла.
2. Если выполнен пункт 1, то нужно убедится, что на 4 ноге PIC присутствует напряжение отличное от 0 и 5В и оно изменяется при вращении крутилки X offset в морде.
Всё остальное тоже не имеет смысла, если не выполнен этот пункт.
3. Если выполнены пункты 1 и 2, то нужно проверить наличие напряжения питания +5 и -5 В на ОУ.
4. Если выполнены пункты 1, 2 и 3, то нужно выставить движок крутилки X offset в морде в среднее положение и резисторами R6 и R7 добиться напряжения -300мВ на ноге 3 ОУ.
5. Если выполнены пункты 1, 2, 3 и 4 то нужно измерить напряжение на 1 ноге ОУ и если оно слегка отличается от -300мВ то подстроить при помощи R6.
Если выходное напряжение сильно отличается от -300мВ, заменить ОУ.
6. Если выполнены пункты 1, 2, 3, 4 и 5 нужно замкнуть вход осциллографа на землю и резистором R5 установить напряжение 3В на выходе ОУ.
7. Если выполнены пункты 1, 2, 3, 4, 5 и 6, Настроить X offset так, чтобы в крайних положениях движка линия не выходила за пределы экрана.
Делать это проще всего вращая R7, при этом периодически подстраивая R6 чтобы в среднем положении линия оставалась в центре экрана.

Разумеется, всё вышеперечисленн ое имеет смысл только если монтаж выполнен правильно.


Версия морды осцилографа 0.1 работает под LINUX.
Версия морды осцилографа 0.2 работает под WIN XP.
Под WIN 7 исходные драйвера не устанавливаются .
Сообщить модератору
0 #9 Juris3D 22.01.2017 22:13
"Под WIN 7 исходные драйвера не устанавливаются ..." - да нет же, можно установить и работает. В таких случаях старых драйверов на новых ОС помогает утилита "zadig". Вот я тут прицепляю фотку запущенной программы с подключенным данным осциллографом на PIC18F2550. На снимке видно, что операционка Windows 7 64-bit, видно как в менеджере встал драйвер, и что делает сама программа. У меня ещё не подцеплен чип ADC, тут для проверки работоспособнос ти подаётса сигнал на старший цыфровой разряд (D7, ножка 28).
bildites.lv/.../...
Сообщить модератору
0 #10 sakamoto 22.04.2017 21:35
zadig устанавливает драйвера с другим пид
а винда не дает родные поставить пишет что там нет информации об оборудовании.. что делать
Сообщить модератору
0 #11 sunnygrin 17.02.2019 18:14
Проблема с установкой драйвера решается правкой PID и VID в файле ISC_Oscilloscope.inf.
У меня возникла такая проблема: когда подаю на вход АЦП 3 вольта, в программе график не помещается в окно,а при уменьшении напряжения, кривая также опускается,но она далека от прямой линии по форме. В чем может быть дело? Все напряжения питания в норме.
Сообщить модератору
+1 #12 fifty2 07.12.2019 15:03
Собрал сей девайс. Установил дрова и прогу на win7 64 . При попытке запуска прога пишет что не видит устройства. При переключении в режим анализатора, выскакивают бесконечно окна с ошибкой. Под win xp осцил работает, анализатор выдаёт тоже что и на win7.Кто может подсказать что делать, сам я в этом не очень разбираюсь?
Сообщить модератору
+2 #13 Soaron 15.06.2020 00:44
А вдруг кто прочитает.
Проект был собран и проверен. Работает.
Но захотелось улучшить.
Можно посмотреть здесь
github.com/Soaron/Oscill
Сообщить модератору