Самодельный осциллограф на avr

Содержание

Миниатюрный осциллограф на микроконтроллере AVR XMEGA с OLED дисплеем. Часть 1. Схемотехническое решение

Проект Xprotolab, разработанный компанией Gabotronics, являющийся миниатюрным измерительным прибором с богатым набором функций и возможностей, построен на микроконтроллере компании Atmel семейства AVR XMEGA. Для визуализации данных, организации пользовательского интерфейса и меню управления используется графический OLED дисплей с разрешением 128×64 точки с широким углом обзора. Все электронные компоненты и органы управления размещаются на двухсторонней печатной плате, размеры которой не превышают 25.4 мм × 40.64 мм. Кроме того, проект может использоваться в качестве отладочной платы для микроконтроллеров семейства AVR XMEGA.

Отличительные особенности устройства:

  • основа устройства – микроконтроллер ATXMEGA32A4:
    • Flash-память программ – 32 КБайт;
    • SRAM – 4 КБайт;
    • EEPROM – 1КБайт;
  • режимы работы:
    • осциллограф смешанных сигналов;
    • генератор сигналов произвольной формы;
    • 8-канальный логический анализатор;
    • анализатор спектра;
  • возможность одновременной работы генератора и осциллографа;
  • графический OLED дисплей, размер 0.96”, разрешение 128×64 точки;
  • PDI интерфейс для программирования и отладки;
  • управление с помощью 4-кнопочной клавиатуры;
  • USB коннектор для питания устройства (в дальнейшем программная реализация USB интерфейса).

Спецификация измерительного прибора:

  • осциллограф:
    • 2 аналоговых канала;
    • 8 цифровых каналов;
    • аналоговая полоса пропускания – 318 кГц;
    • максимальная скорость выборки – 2 Msps;
    • разрешение – 8 бит;
    • аналоговая синхронизация и внешняя цифровая синхронизация;
    • вертикальный и горизонтальный курсоры;
    • входное сопротивление – 1 МОм;
    • размер буфера для каждого канала – 256;
    • максимальное входное напряжение – ±10 В;
  • генератор сигналов произвольной формы:
    • 1 аналоговый канал;
    • максимальная скорость конвертирования – 1 Msps;
    • аналоговая полоса пропускания – 66 кГц;
    • разрешение – 8 бит;
    • низкое выходное сопротивление;
    • размер буфера – 256;
    • максимальное выходное напряжение – ±2 В.

Принципиальная схема прибора

Входные аналоговые каналы осциллографа, выходной канал генератора сигналов – выполнены на JFET операционном усилителе TL064 с низким потреблением. На таком же операционном усилителе выполнен источник опорного напряжения для встроенного аналого-цифрового преобразователя микроконтроллера.

Питание прибор получает от USB интерфейса, однако можно применить внешний источник напряжения 5 В, но следует быть внимательным и необходимо исключить возможность одновременного подключения внешнего источника и USB интерфейса. Напряжение питания микроконтроллера составляет 3.3 В, с этой целью установлен регулятор напряжения 3.3 В AP7333. Также, напряжение 3.3 В необходимо для питания контроллера дисплея.

Для питания операционных усилителей требуется двуполярный источник напряжения + 5 В и –5 В. Для получения отрицательного напряжения –5 В установлен интегральный DC/DC преобразователь TPS60403 (charge pump).

Графический OLED дисплей UG-2864HSWEG01 является монохромным и имеет встроенный контроллер SSD1306.

Источником тактовой частоты для микроконтроллера является внешний кварцевый резонатор 16 МГц.

Управление, навигация по меню, настройка параметров осуществляются с помощью клавиатуры K1-K4.

Для программирования (а также для отладки ПО) микроконтроллера используется 2-проводный интерфейс PDI. Данный интерфейс поддерживает высокоскоростное программирование всех пространств энергонезависимой памяти, в т.ч. Flash-память, EEPOM, Fuse-биты, Lock-биты и сигнатурный код пользователя. Программирование осуществляется путем доступа к контроллеру энергонезависимой памяти (NVM-контроллер) и выполнения NVM-контроллером команд.

Внешний вид печатной платы

Демонстрация работы прибора

Загрузки

Принципиальная схема (pdf) – скачать
Список компонентов (xls) – скачать
Расположение элементов на печатной плате (pdf) – скачать

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

Компания Gabotronics реализует все необходимые для сборки комплектующие, печатную плату, а также готовое к работе устройство.

Перевод: Vadim по заказу РадиоЛоцман

Как собрать осциллограф своими руками — 3 рабочие схемы, советы по монтажу, видео

  1. Осциллограф на PIC18F2550
  2. Цифровой осциллограф для ПК
  3. На AVR — инструкция по сборке, характеристики
  4. Видео

Рассмотрим 3 рабочие схемы осциллографов. Первый прибор собран на микроконтроллере PIC18F2550. Второй осциллограф — цифровой, в основе третьего — микроконтроллер AVR. Поговорим о каждом по порядку.

Осциллограф на PIC18F2550 своими руками — схема, инструкция по сборке

Осциллограф на PIC18F2550 измеряет среднее, максимальное, минимальное, пиковое напряжения и пересечение нулевого уровня. Осциллограф имеет встроенную функцию триггера, который может быть использован для остановки сигнала для его детального изучения. Масштаб времени для отображения может быть легко изменён функцией changeTimeDivision.

Осциллограф измеряет напряжение в пределах 0–5В, 0–2.5В и 0–1,25. Основным недостатком этого осциллографа является низкая частота дискретизации (

60 кГц), а также тот факт, что входы ограничены ограничениями АЦП микроконтроллера. Тем не менее, это очень хороший прибор и первым мы рассмотрим именно его схему.

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

Исходники и прошивку можно будет скачать ниже. Теперь давайте детальнее остановимся на каждом блоке схемы.

Напряжение поступает с 9-вольтовой батареи на интегральный стабилизатор напряжения TC1262-5.0V для обеспечения стабильных 5В для питания микроконтроллера и дисплея. На выходе стоит 1мкФ конденсатор.

Графический ЖК дисплей AGM1264F с разрешением 128х64 пикселей оснащен встроенными контроллером KS0108. Он имеет светодиодную подсветку и генератор отрицательного напряжения для управления.

Вывод A0 настроен на аналоговый вход. Обратите внимание, что сопротивление источника сигнала влияет на напряжение смещения на аналоговом входе. Максимально рекомендованное сопротивление составляет 2.5 кОм.

Микроконтроллер PIC18F2550 работает на частоте 48 МГц от внутреннего генератора. R1 представляет собой нагрузочный резистор, необходимый для работы. C1 является стабилизирующим конденсатором. Компонент пометкой «RES» является 20 MHz резонатором.

Выводы USART должны быть подсоединены к RS-232 конвертеру для подключения к ПК для обновления прошивки. После этого он может быть отключен.

Необходимые детали для сборки осциллографа на PIC18F2550 и прошивка

  • МК PIC 8-бит (IC1) — PIC18F2550
  • Линейный регулятор (IC2) — TC1264, 5 Вольт.
  • Конденсатор (С1) — 0.22 мкФ.
  • Электролитический конденсатор (С2) — 1 мкФ.
  • 2 резистора (R1, R3) — 3.3 кОм и 5 Ом соответственно.
  • Подстроечный резистор (R2) — 10 кОм.
  • Кварцевый резонатор (RES) — 20 МГц.
  • LCD-дисплей — AGM1264F.
  • Батарея питания (G1) — 9 В
  • 3 разъёма — JP1 для подключения дисплея, JP2 для обновления прошивки (RS-232) и JP3 для входа аналогового сигнала.

Микроконтроллер должен быть прошит файлом «SAC_tinybld18F2550usb _20MHz_115200_48MHz». Его можно скачать ниже.

Видео, как работает осциллограф на PIC18F2550:

Цифровой осциллограф RS232 для ПК

Рассмотрим простое решение для создания цифрового компьютерного осциллографа. Устройство построено на базе восьмиразрядного процессора PIC12F675.

Схема цифрового осциллографа для компьютера

Ниже представлена структурная схема осциллографа:

Процессор работает на частоте 20 МГц. Микроконтроллер непрерывно измеряет входное напряжение, преобразовывает его и отправляет цифровое значение на последовательный порт компьютера. Скорость передачи данных последовательного порта — 115кБит и, как показано на следующем рисунке, данные сканируются и отправляются с частотой около 7,5 кГц (134 мкс).

Вот принципиальная схема самого цифрового осциллографа:

Основа схемы — микроконтроллер PIC12F675 (микросхема U2), который работает с тактовой частотой 20 МГц кристалла Y1. J1 — стандартный разъем для подключения питания в 9–12 В, которое затем стабилизируется на U1 до 5 В для питания процессора.

  • Узнайте, как сделать щуп для осциллографа своими руками

После U2 в схему добавляется простой преобразователь TTL уровня с последовательным портом RS232 персонального компьютера. Он построен на базе транзистора BC337 (Q1) и резисторов R1 и R3. Вход 5 микроконтроллера ведет к переключателю S1. В своей основной позиции (1–2) прибор переключается в режим осциллографа постоянного тока (DC измерений), который способен отображать входной сигнал 0–5В. Во второй позиции — в режим осциллографа переменного тока. В этом положении максимальное напряжение — от -2,5 до +2,5 В. Конденсатор С6 подойдет керамический 22000nF, чтобы наблюдать низкие частоты без особых искажений.

При необходимости можно добавить дополнительные входной аттенюатор (сплиттер), или ОУ.

Необходимые радиоэлементы

  • Линейный регулятор (U1) — LM78L05.
  • МК PIC 8-бит (U2) — PIC12F675 (675-I/P).
  • Биполярный транзистор (Q1) — BC337.
  • 6 конденсаторов — С1, С2, С5 (3х0.1 мкФ); С3, С4 (2х22 пФ); С6 (22 мкФ)
  • 4 резистора — R1, R3 (2х1 кОм) и R2, R4 (2х270 кОм).
  • Кварцевый резонатор (Y1) — 20 МГц.
  • Переключатель (S1)
  • 3 разъема — J1 питания, J2 RS232, J3 входа сигнала.
Читайте также:  Механически прочный двухэлементный "волновой канал"

Программное обеспечение

Для управления на Windows доступна простая программа на Visual Basic. Её можно скачать в архиве ниже.

Программа запускается сразу и ожидает появления данных на последовательном порте COM1. Слева — четыре ползунка, используемые для измерения периода и напряжения сигнала. Затем идут вкл/выкл синхронизации, поля для масштабирования или изменения значений размера выборки.

Монтаж

При сборке можно не делать печатную плату, а смонтировать все в небольшой пластиковой коробке навесным монтажом. Корпус должен иметь отверстия для разъема RS232 переключателя, входного гнезда и гнезда питания.

Прошивку для процессора можно скачать в конце статьи. Биты конфигурации (fuse) в процессе программирования должны быть установлены следующим образом:

Вот фото готового прототипа цифрового осциллографа:

Ниже вы можете скачать исходник, прошивку и ПО для Windows.

Осциллограф своими руками на AVR — инструкция по сборке, характеристики

Характеристики осциллографа на AVR:

  1. Частота измерения: 10 Гц–7.7 кГц.
  2. Макс. входное напряжение: 24В AC/30В DC.
  3. Напряжение питания: 12В DC.
  4. Разрешение экрана: 128×64 пикселей.
  5. Область экрана осциллограммы: 100×64 пикселей.
  6. Информационная область экрана: 28×64 пикселей.
  7. Режим триггера: автоматический.

Рассмотрим проект осциллографа с использованием МК PIC18F2550 и графического LCD с контроллером KS0108. В качестве среды разработки здесь использована WinAVR, которая основывается на open source AVR-GNU компиляторе и прекрасно работает с AVR Studio 4. Графическую библиотека разработана специально для данного проекта.

При измерении прямоугольного сигнала, максимальная частота, при которой можно увидеть хорошую осциллограмму составляет около 5 кГц. Для других форм сигналов (синусоида или треугольный сигнал) максимальная частота составляет около 1 кГц.

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

Принципиальная схема AVR-осциллографа приведена ниже:

Напряжение питания схемы составляет 12 вольт постоянного тока. Из этого напряжения, в дальнейшем получается еще 2 напряжения: +8.2В для IC1 и +5В — для IC2, IC3.

  • Схема светодиодного осциллографического пробника

Устройство может измерять входное напряжение от +2.5В до -2.5В или от 0 до +5В, зависящее от позиции переключателя S1 (выбор типа входного тока: постоянный или переменный). При использовании пробника 1:10, входное напряжение соответственно может быть увеличено в 10 раз. Кроме того, переключателем S2 можно установить дополнительно деление напряжения на 2.

Необходимые радиоэлементы

  • Операционный усилитель (IC1) — LM358.
  • LCD-дисплей (IC2) — DEM128064A (128×64, контроллер KS0108).
  • МК AVR 8-бит (IC3) — ATmega32.
  • Линейный регулятор (IC4) — LM7805.
  • Стабилитрон (D1) — 1N4738A, 8.2В.
  • Выпрямительный диод (D2) — 1N4007.
  • 7 конденсаторов — C1 (470 нФ); C2 (27 пФ); C4, C7, C9 (3х100 нФ); C5, C6 (2х22 пФ).
  • 2 электролитических конденсатора — C3 (22 мкФ 16 В) и C8 (100 мкФ 25 В).
  • 7 резисторов — R1, R2, R4 (3х1 МОм); R3, R5 (2х390 кОм); R6 (56 Ом); R7 (220 Ом).
  • 2 подстроечных резистора (P1, P2) — 10 кОм и 22 кОм соответственно.
  • Кварц (X1) — 16 МГц.
  • 3 переключателя (S1, S2, S5).
  • 5 кнопок (S3, S4, S6–S8) — замыкающие.
  • 2 разъёма (K1, K2) — 2 контакта вход сигнала, 2 контакта питание.

Прошивка ATmega32 и настройка

Файл прошивки: AVR_oscilloscope.hex, можно будет скачать ниже. При выборе фьюзов необходимо указать использование внешнего кварца. После этого необходимо обязательно отключить JTAG интерфейс. Если этого не сделать, то на осциллографе будет отображаться экран инициализации, а после он будет уходить в перезагрузку.

Для настройки прибора нужно выполнить всего 2 вещи: настроить контрастность LCD при помощи подстроечного резистора Р2 и выставить центр осциллограммы при помощи подстроечного резистора Р1.

Использование

Вы можете перемещать луч осциллограммы вверх или вниз путем нажатия кнопок S8 и S4. Один квадрат на экране, соответствует 1В.

При помощи кнопок S7 и S3 можно увеличивать или уменьшать частоту измерений. Минимальная частота формы сигнала, которая может быть отображена на LCD составляет 460 Гц. Если необходимо посмотреть сигнал с более низкой частотой, например, 30 Гц, то необходимо нажать S7 для сжатия осциллограммы или S3 — для растяжения.

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

Фото готового AVR осциллографа:

Видео работы осциллографа на AVR:


Сообщества › Сделай Сам › Блог › Простой 4х канальный осциллограф для диагностики автомобиля.

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

1. Вид осциллографа – USB приставка к ноутбуку, ибо на большом экране смотреть удобно, можно сохранять для последующего анализа ну и т.д. и т.п.
2. Тип сигнала – Переменный, Постоянный, Положительная полярность. Работа с отрицательными напряжениями не нужна.
3. Кол-во каналов – 4, больше смысла не вижу, но с возможностью расширения до 8.
4. Максимальное входное напряжение — вольт 50, выше смысла нет.
5. Чувствительность — 1 милливольт, больше тоже не надо 🙂
6. Частота — до 20Кгц, для миллисекундных сигналов за глаза хватит, а других там нет 🙂
7. Удобная программная оболочка.

Начну с самого важного – Оболочки для автомобильного осциллографа. Да да, именно с оболочки. Ибо железо не сложно любое сделать, а вот удобная оболочка это реальный дефицит. Оболочки которые просто тупо показывают сигнал в реальном времени для автомобильного осциллографа крайне не удобны, ибо часто нужно анализировать сигнал продолжительное время и иметь возможность «отмотать» назад. По сему нужна оболочка типа Самописец-Осциллограф. И что б каналов было не менее 4х…

Долго лопатил просторы интернета на наличие удобной оболочки и в итоге нашел! Называется PowerGraph. Разработала эту прекрасную программу ООО «ДИСофт». На сайте у них есть платная и бесплатная версия. В принципе это софт для промышленного использования но он на все 100% подходит для моего осциллографа, работает в режиме самописца и в режиме чистого осциллографа. Эта программа предназначена для:
1. Сбор данных с различных измерительных устройств и приборов.
2. Регистрация, визуализация и обработка сигналов в режиме реального времени.
3. Редактирование, математическая обработка и анализ данных.
4. Хранение, импорт и экспорт данных.
Это малая часть того что она умеет 🙂 И самое главное есть бесплатная версия. Остановился на ней, в сравнении с другими, а я перепробовал более десятка, это просто идеал для автомобильного осциллографа.

Вот она какая, на мой взгляд, самая лучшая. Это не реклама, это факт 🙂 ИМХО конечно.

Ну вот, с софтом определился, теперь надо определится с интерфейсом, не буду грузить вас своими муками выбора, я остановился на СОМ порте. С ним работать просто, пропускной способности для поставленных задач с избытком, в выбранном софте есть драйвер вывода информации с СОМ пора.

Теперь железо, а точнее что использовать в роли АЦП. Железо должно быть доступное, стабильное, не дорогое и легко программироваться. Долго не думал, остановился на микроконтроллере АТмега 328р. Программируются эти микроконтроллеры банально на С++, точнее на упрощенном С++.
Очень удобно то что этот микроконтроллер можно купить уже распаянным на плате с минимально нужной обвязкой., Ардуино сее называется 🙂 То есть не надо самому плату разводить и паять, удобно. Всем параметрам, из моего ТЗ, АТмега 328р отвечает полностью, по сему использовать буду ее.

Для миниатюризации я вот такую взял. Она имеет 8 аналоговых входов, отвечающих всем требованиям ТЗ, имеет на борту эмулятор СОМ порта на СН340, питание берет напрямую с USB порта. В общем то что нужно. Ардуинку можно любую использовать на 328р

Вот схема этой платы. На ней стоит сам микроконтроллер АТмега 328р, банальный эмулятор СОМ порта на СН340, кварц и стабилизатор питания на ЛМке для запитки от внешнего источника, если надо, вот и все, ну пара лампочек и фильтров не в счет 🙂 То есть все то что нам нужно и ничего лишнего! Не зря говорят — Совершенство в простоте.

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

Вот скриншот того что должен выдавать микроконтроллер в СОМ порт для нашей программы PowerGraph.

Осциллограф у меня будет работать в 4х режимах — 1канал, 2канала, 3канала и 4 канала.
Переключение между каналами будет осуществляться по кругу нажатием на кнопку.
При включении канала будет загораться светодиод индикации работы канала.
Вот написал программку. Сам я не программист, по сему написал как смог, сильно не критикуйте, расстроюсь 🙂 Программа полностью рабочая и проверена не однократно в деле. Как заливать программу в плату рассказывать не буду, в инете на каждом углу это с картинками рассказано 🙂

Вот сама программа.

int regim=1;
int flag=0;
void setup()
<
digitalWrite(07, HIGH);
Serial.begin(128000);//скорость СОМ порта должна совпатать со скорость в драйвере
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
>
void loop()
<
if(digitalRead(07)==HIGH&&flag==0)//если кнопка нажата
// и перемення flag равна 0, то …
<
regim++;
flag=1;
if(regim>4)//ограничим количество режимов
<
regim=1;//так как мы используем только одну кнопку,
// то переключать режимы будем циклично
>
>
if(digitalRead(07)==LOW&&flag==1)//если кнопка НЕ нажата
//и переменная flag равна — 1, то …
<
flag=0;//обнуляем переменную “knopka”
>
if(regim==1)//первый режим
<
digitalWrite(2, HIGH);//включение светодиода
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
// читаем аналоговый вход pin 0:
int port0 = analogRead(A0);
//Преобразовываем аналоговые показания (которые идут от 0 до 1023) в напряжение (0 — 5 В)
float voltageport0 = port0 * (4.745 / 1023.000);//4.745 опорное напряжение, замеряется при калибровке на плате
// выводим значение напряжения в порт
Serial.println(voltageport0,3);// печатаем значение в порт и жмем энтер
//задержка для стабильности
delay(1);
>
if(regim==2)//второй режим
<
digitalWrite(2, HIGH);//включение светодиодов
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
int port0 = analogRead(A0);
int port1 = analogRead(A1);
float voltageport0 = port0 * (4.745 / 1023.000);
float voltageport1 = port1 * (4.745 / 1023.000);
Serial.print(voltageport0,3);// печатаем значение в порт
Serial.print(” “);// печатаем таб
Serial.println(voltageport1,3);// печатаем значение в порт и жмем энтер
delay(1);
>
if(regim==3)//Третий режим
<
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
int port0 = analogRead(A0);
int port1 = analogRead(A1);
int port2 = analogRead(A2);
float voltageport0 = port0 * (4.745 / 1023.000);
float voltageport1 = port1 * (4.745 / 1023.000);
float voltageport2 = port2 * (4.745 / 1023.000);
Serial.print(voltageport0,3);
Serial.print(” “);
Serial.print(voltageport1,3);
Serial.print(” “);
Serial.println(voltageport2,3);
delay(1);
>
if(regim==4)//Четвертый режим
<
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
int port0 = analogRead(A0);
int port1 = analogRead(A1);
int port2 = analogRead(A2);
int port3 = analogRead(A3);
float voltageport0 = port0 * (4.745 / 1023.000);
float voltageport1 = port1 * (4.745 / 1023.000);
float voltageport2 = port2 * (4.745 / 1023.000);
float voltageport3 = port3 * (4.745 / 1023.000);
Serial.print(voltageport0,3);
Serial.print(” “);
Serial.print(voltageport1,3);
Serial.print(” “);
Serial.print(voltageport2,3);
Serial.print(” “);
Serial.println(voltageport3,3);
delay(1);
>
>

Читайте также:  Многофункциональный кодовый замок

Программа закончена и отлажена.
Приступим к электронной части.

Схему приводил выше. Из нее видно что плата имеет 8 аналоговых входов, 14 цифровых входов/выходов. Вот и будем работать с ними.

Аналоговые № 0,1, 2, 3 будем использовать как входы осциллографа. Сделаем для них защиту и дополнительный вход через делитель 1х10, так как подавать на микроконтроллер максимум можно всего 5.2 вольта. С делителем можно будет работать с напряжениями до 50 вольт, что полностью перекрывает наши потребности.
Цифровые № 2,3,4,5 будем использовать для светодиодов, они будут индицировать включенные аналоговые входы.
Цифровой №7 будет подключен к кнопке которая будет переключать режимы моего осциллографа.
Еще будет кнопка Бут режима. Плата по умолчанию в бут режиме, но для работы это не удобно, ибо управление идет через RESET. При обращении к СОМ порту идет инициализация СОМ порта и чип эмулятор посылает резет на микроконтроллер. То есть при запуске программы плата ребутится и сбрасывает настройки которые выставили кнопкой, это не удобно. Для того что бы этого безобразия не было, я сее отключаю с помощью кнопки. Она подключает вход микроконтроллера «RESET» к электролитическому конденсатору 10Мкф, конденсатор сглаживает посылку на перезагрузку. Эта же цепь используется при заливке прошивки, по сему на момент программирования надо конденсатор отключать. Назвал эту кнопку Бут кнопкой 🙂

Ну вот, как подключать понятно, осталось воплотить в железе.

Начнем с защиты и делителя.
Защиту будет обеспечивать стабилитрон на 5.1в. А делитель будет обычный на резисторах.
Так как сигналы у нас будут низкочастотные, это сильно упрощает жизнь. В расчетах делителя не надо учитывать внутреннее сопротивление приемника, не надо согласовывать вход с делителем, не надо учитывать волновое сопротивление кабеля и разъемов.
Надо просто посмотреть в даташите на микроконтроллер на какое сопротивление выхода оптимизирован его АЦП, и сделать делитель с таким выходным сопротивлением. Так мы добьемся максимальной точности в 0.005 вольта. В даташите написано что он оптимизирован под 10Ком выходного сопротивления нагрузки. Внутреннее сопротивление АЦП 100Мом…

Простой UART Осциллограф.

Что то зацепил меня UART, да и давненько у нас не было си шарпа, поэтому решил сделать еще один примерчик. Суть — микроконтроллер измеряет и передает данные по юарту, а компьютер рисует графики, такой себе псевдоосциллограф.

Итак, если вы следили за предыдущими статьями, то с легкостью сможете создать форму в Visual C#, прицепить к ней кнопочки, вывести текст. В идеале вы в состоянии поймать байтик из юарта и вывести полученный текст на форму.

Если вы не знакомы с предыдущими статьями, то основные моменты: если вы хотите сделать что то, то это действие должно быть привязано некому другому действию. Например, хотим чтобы изменился текст надписи, значит изменение текста нужно привязать к щелчку по кнопке, поэтому именно в обработке щелчка по кнопке следует писать свой код. Хотите вывести полученный по UART байт на форму — поместите компонент serialPort на форму, ведь именно он отвечает за ком порт и при событии DataReceived (получение данных) изменяйте надпись.

Не забываем! Чтобы вывести текст — принимаете байты в массив, выводите в надпись. Передать переменную состоящую из нескольких байт за один раз нельзя — передаете по байтно, собираете в массив — выводите. Чтобы узнать что начали передаваться данные — используйте спецсимволы, означающие начало и конец передачи — не путать со старт и стоп битами!

Все это круто, кнопки на форме рисовать умеем, текст писать и выводить переменные умеем, теперь неплохо бы еще научиться рисовать. Для этого заюзаем GDI+, он вполне сгодится. Чтобы его использовать в WindowsForm существует класс Graphics из пространства имен System.Drawing. Он позволяет рисовать изображения, многоугольники, дуги, линии, заливки областей, в общем то что нужно.

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

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace plot

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

Вернемся к изначальной задаче. Допустим микроконтроллер измеряет с некой периодичностью и шлет нам байты по последовательному порту. Кидаем на форму компонент serialPort1, задаем скорость и номер порта(!), с которого будем считывать информацию. Для теста я взял два виртуальных порта 4 и 5, т.е. через com4 терминалом передаются байты, а com5 читается программой. В событиях serialPort1 ищем обработчик DataReceived — туда пишем код, который рисует линии. С каждым приходящим байтом наш график будет дорисовывать линию к предыдущей, со смещением 5(переменная х2).

private vo > 300) //если мы достигли края формы, то очищаем форму и < //обнуляем переменные gr.Clear(Color.WhiteSmoke); x2 = 0; y2 = 0; x1 = 0; y1 = 0; >gr.DrawLine(penc, x1, y1, x2, y2); //рисуем линию по координатам x1 = x2; //запоминаем конец линии y1 = y2; >

Не забываем, что перед использованием порт нужно открыть, а перед закрытием программы — закрыть. Теперь мы можем послать пару байтов, например при помощи терминала. Вроде работает.

Ну и на закуску — измеряем АЦП микроконтроллера, кидаем в юарт, смотрим на ПК. Только я внесем небольшое изменение в программу, чтобы график рисовался не от верхнего левого угла, а относительно центра. Для этого, нужно из половины высоты формы вычитать наш результат. И кнопку можно в принципе убрать с формы. В качестве схемы крутилка потенциометра. Прошивка микроконтроллера в комментариях думаю не нуждается — все есть в 8 и 10 уроках.

Протестировано — работает, такая вот приставка-осциллограф к компьютеру, всего на одном микроконтроллере и преобразователе usb-uart.

Проект Visual C#

Проект Atmel studio

Вопросы по прошивкам на форум, по статье в комменты.

Простой универсальный осциллограф

Технические характеристики:

Оцифровка аналогового сигнала:

Дискретизация до 153.9кГц.

Описание:

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

Осциллограф имеет 2 канала: аналоговый и цифровой. Оба канала отображаются на дисплее в виде временной диаграммы, аналоговый канал – синим цветом, цифровой – жёлтым. Синхронизация может осуществляться от обоих каналов. Также есть возможность переключения цифрового канала на выход и выдачи частоты от 20Гц до 533кГц с любой скважностью сигнала.

Управление осуществляется с помощью одной кнопки, которая выбирает задаваемый параметр, и потенциометра, с помощью которого изменяется выбранный параметр.

Интерфейс и управление

Информация на дисплее имеет следующий вид:

На канал 1(аналоговый вход) подана частота 50гц. Канал 2 включен в режим генератора и генерирует частоту 30Гц со скважностью 50%.

U 100 – это уровень синхронизации. Параметр влияет только когда синхронизация идёт от канала 1 (аналоговый вход).

T 025 – это смещение синхронизации по времени. 25 – четверть экрана. Таким образом, передний фронт смещён от левого края дисплея на 25 отчётов. Всего отчётов 100.

048мс – период развёртки. Между 2мя зелёными вертикальными полосками будет 48мс.

Стрелочка слева от цифры 048 – курсор, он указывает на текущий выбранный параметр.

Читайте также:  Расширение возможностей сду

/1 показывает режим синхронизации. Сейчас выбран передний фронт канала 1.Также может быть выбран задний, передний фронт любого из каналов или отключена синхронизация (символ “NO”).

30 – это частота генератора. Может быть значение частоты или значение IN – это указывает на то что канал 2 будет входным и частота не выдаётся.

Следующий параметр 000 указывает на скважность импульса. Он не выбран, поэтому скважность установлена по умолчанию – 50%.

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

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

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

Схема осциллографа составлена на основе контроллера ATTiny 43 U . Данный контроллер имеет встроенный DC – DC преобразователь, который позволяет питать схему от одной батарейки. Я применял элемент ААА. Встроенный DC-DC преобразователь поднимает напряжение батарейки (0.7В – 1.8В) до напряжения 3В., и питание ядра контроллера (и портов) происходит от 3В.

В качестве дисплея выбран дисплей от сотового телефона NOKIA6100, так как он цветной, имеет достаточно приличное разрешение 132х132 точек, управляется по протоколу SPI (для экономии портов) и уже имеет встроенную подсветку. К тому же он очень дешевый.

Также в схеме применён ещё один DC – DC преобразователь на основе микросхемы MC34063, он нужен для питания подсветки дисплея, поскольку на подсветку должно приходить примерно 6В с копейками.

В особой настройке схема не нуждается.

Программная часть:

Программа осциллографа написана на ассемблере в AVR Studio .

При реализации программы я столкнулся со следующими нюансами:

Поскольку дисплей имеет последовательный интерфейс, причём SPI с передачей 9 бит (подробно протокол работы с дисплеем описан в более ранней статье про БП), не получается реализовать передачу данных аппаратно. Поэтому обновление дисплея занимает длительное время. Полностью закрашивание дисплея происходит примерно около секунды (это нас никак не устраивает), поэтому при выводе на дисплей осциллограммы затирание происходит по предыдущему контуру совместно с прорисовкой новых данных. Это позволило ускорить процесс прорисовки осциллограммы почти в 100 раз. ОЗУ как раз хватило для хранения 2х буферов оцифрованных данных.

Для уменьшения объёма хранимой информации в ОЗУ данные обоих каналов хранятся в одном буфере, то есть в одном байте буфера хранятся значения состояний обоих каналов. Биты от 0 по 6 – это данные АЦП (поскольку нас вполне устраивает 7 бит оцифрованных данных) и бит 7 – это состояние канала 2.

Также для улучшения отображаемой картинки в программе рассчитываются промежуточные точки. Расчёт происходит как среднее арифметическое двух соседних значений АЦП, то есть при выводе текущей точки происходит вывод ещё одной точки в этом же ряду. Таким образом, происходит дополнение картинки и заполнения промежутков между отчётами.

Для устранения дребезга потенциометра применён метод накопления значений, расчёт значения потенциометра происходит вот по такой формуле:

A п= A п-Ап/256+АЦП, где Ап – это накопленное значение.

Таким образом, происходит как бы усреднение 256 значений потенциометра..

Про АЦП

По даташиту на чип частота дискретизации АЦП составляет 15кГц с максимальным разрешением при тактовой примерно 200кГц. Но допускается тактирование АЦП до 1Мгц. При частоте 1Мгц частота дискретизации получается 76кГц. А делителями можно задать гораздо больше. В ходе экспериментов тактированием АЦП получилось, что оно вполне себе работает при частоте 2МГц. Если больше, то уже увеличивается цикл измерения, и период измерений начинает гулять. В программе при изменении частоты дискретизации тактовая АЦП меняется от 62кГц до 2Мгц.

Автор: Сергей Меньшиков , e-mail для связи –

Самодельная цифровая приставка осциллограф к компьютеру своими руками

Осциллограф к ПК – это устройство, которое позволяет графически наблюдать электрический сигнал. Следуя данной инструкции, вы сможете сконструировать недорогой осциллограф своими руками.

Шаг 1: Используем контроллер Arduino Uno

В интернет-магазинах контроллер Arduino Uno стоит в пределах 20 долларов.

Шаг 2: Устанавливаем приложение Arduino >

Прежде всего, если у вас не установлена среда разработки Arduino, скачайте и установите ее с сайта Arduino.

Установите библиотеку «TimerOne.h» для Arduino IDE, следуя следующим инструкциям:

  1. В приложении Arduino выберите пункт меню «Sketch» (см. фото).
  2. Далее «Include Library».
  3. «Manage Libraries…».
  4. Выберите «all» в окне «Type» и «all» в окне «Topic». В пустое поле введите «TimerOne» (без кавычек).
  5. Ниже появится информация о библиотеке.
  6. Щелкните на этом тексте, и появится кнопка «Install».
  7. Нажмите кнопку «Install».
  8. Перезапустите программу.

Шаг 3: Скачиваем скетч и загружаем его в приложение Arduino

  1. Загрузите и разархивируйте скетч для Arduino: ((oscilloscope_arduino.ino)).
  2. Подключите контроллер Arduino к компьютеру через USB-порт.
  3. Запустите приложение Arduino >

Загрузите и распакуйте программу. Выберите файл для вашей операционной системы:

Запустите exe-файл (например, Windows 64 => oscilloscope_4ch.exe).

Важно: не удаляйте папку «lib» из директории с программой.

На компьютере должна быть установлена программа «Java» не ниже 8-й версии.

Шаг 5: Если oscilloscope_4ch.exe не работает…

Если, по какой-либо причине программа oscilloscope_4ch.exe не работает, выполните следующее:

    Установите утилиту Processing >

  1. Запустите программу «Oscilloscope»; контроллер Arduino подключите к компьютеру через USB-порт. Теперь вам нужно «подружить» их друг с другом через последовательный порт.
  2. В поле «Configurar Serial» (Настройка последовательного интерфейса) нажимайте на поле «select serial» до тех пор, пока не появится порт, к которому подключен Arduino (если он не появился, нажмите на кнопку «refresh» для обновления).
  3. Нажимайте кнопку «select speed» пока не появится скорость 115200.
  4. Нажмите кнопку «off»; надпись на ней изменится на «on».
  5. Если все правильно сделано, самодельный осциллограф покажет 4 канала [A0 (ch-0), A1 (ch-1), A2 (ch-2) и A3 (ch-3)].

Если подключение настроено неправильно, вы увидите на изображении «шум».

Шаг 7: Соединяем выход (

10) со входом (A0), а выход (

С помощью проводов, подключите цифровой выход 10 контроллера Arduino к его аналоговому входу A0, а выход 9 – к входу A1.

На экране появится сигнал, похожий на тот, который показан на фото. Сигналы на цифровых выходах 9 и 10 задаются блоком «Ger.Sinal» программы: на выходе 9 генерируется ШИМ-сигнал частотой 10 Гц (Т = 100 мс) при Ton = 25 %; на выходе 10 – сигнал, равный удвоенному периоду 2Т (200 мс).

Вы можете самостоятельно настроить значения в блоке «Ger.Sinal», перетаскивая ползунок или щелкая по элементу управления.

Шаг 8: Подсказки

  1. Поставьте галочку напротив параметра «Trigger» на Ch-0 (красный), чтобы стабилизировать сигнал.
  2. Чтобы удалить изображения сигналов Ch-2 и Ch-3, нажмите на заголовки «Ch-2» и «Ch-3».
  3. Чтобы наблюдать фигуры Лиссажу, нажмите на заголовок «XYZ».
  4. Чтобы определять частоты, поставьте галочку «detectar freq.» (обнаружить частоту).
  5. Чтобы измерить напряжение и время / частоту, нажмите «medir» (измерение).
  6. Для изменения значения шкалы регулировки, нажмите между вертикальными линиями или перетащите ползунок, обозначенный двумя треугольничками (см. рисунок).
  7. Программа имеет гораздо больше настроек. Исследуйте их самостоятельно.

Шаг 9: Определяем частоту вспышки фонарика

Вы можете узнать частоту мигания фонарика, используя фоторезистор (LDR) и обыкновенный резистор (см. рисунок).

Шаг 10: Определяем частоту вращения вентилятора

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

Подставив значение частоты из компьютерного осциллографа в формулу на рисунке, определите частоту вращения вентилятора.

Шаг 11: Анализируем сигнал от пульта дистанционного управления

Вы можете увидеть ИК-сигнал от пульта дистанционного управления с помощью фототранзистора TIL78.

Соберите схему по рисунку и следуйте следующим инструкциям:

  1. Установите значение «dt» равным 2 мс или 100 мкс.
  2. Включите «Trigger» канала Ch-0.
  3. Увеличьте уровень, перетащив ползунок (см. рисунок).
  4. Нажмите кнопку «UMA»: осцилограф перейдет в режим ожидания.
  5. Нажмите любую кнопку на пульте дистанционного управления, предварительно направив его на фототранзистор.
  6. Анализируйте график.

Шаг 12: Тестируем компоненты или устройства

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

В этом примере мы протестируем маленький джойстик для проектов Arduino.

  1. Соберите схему, показанную на рисунке.
  2. Синхронизируйте программу с контроллером Arduino.
  3. Нажмите «fluxo» (поток), чтобы Arduino отправлял каждое значение сразу после прочтения.
  4. Установите значение параметра «dt» равным 100 мс (для медленного чтения).
  5. Выключите «Ch-3», нажав на заголовок.
  6. Установите значение параметра «v/div» равным 5 (во время установки нажмите и держите клавишу «Shift», чтобы настроить все каналы одновременно).
  7. Переместите маленький треугольник слева канала «Ch-0» вверх (нажав клавишу «Shift»).
  8. Включите канал «XYZ» и перетащите ползунок параметра «v/div» до конца вправо.
  9. Перемещайте джойстик во все стороны и понажимайте кнопку несколько раз.
  10. Наблюдайте кривые.

Шаг 13: Определяем параметры резисторов и конденсаторов

Поле «medir res./cap.» предназначено для измерения значений резисторов и конденсаторов, но оно будет работать только при подключении схемы, изображенной на рисунке.

Данная функция может самостоятельно определять, какой из компонентов подключен: резистор или конденсатор и определить правильное значение параметра, используя 3 шкалы (низкие, средние или высокие значения).

Шаг 14: Хотите больше возможностей?

Скачайте полный проект с сайта GitHub.

Посмотрите видео на YouTube.

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector