Карманный осциллограф "Лори" на микроконтроллере STM32F103

Максим Керимов
Декабрь 2016 г.

Постановка задачи

Сделать простейший карманный осциллограф с минимальными затратами времени и средств.

Список компонентов

Карманный осциллограф на микроконтроллере STM32F103 - Внешний вид

Характеристики

7 диапазонов с ценой деления (клетки): 7 µS, 28 µS, 113 µS, 559 µS, 2 mS, 10 mS, 20 mS.
Чувствительность: 0.25 и 1.0 В/дел.
Максимальная амплитуда входного сигнала: 6 В.
Входное сопротивление: 200 (20) кОм.
Питание: 4 аккумулятора АА.
Потребляемый ток: 80 mA.

Сигнал какой частоты можно увидеть?

Теоретически можно увидеть 477 кГц. Отличить меандр от пилы, теоретически, можно на частотах 350 кГц и ниже. Практически же, более-менее комфортно можно наблюдать сигналы до 200 кГц. Размер клетки: 20 x 20 px.

"Частота развёртки" нашего осциллографа зависит от быстродействия АЦП. В STM32F103 разрядность АЦП фиксирована и равна 12. Это в полтора раза больше, чем нам нужно. В STM32F407, например, разрядность можно уменьшить, что сократит время измерений. Но это уже другая история с другим бюджетом.

Карманный осциллограф на микроконтроллере STM32F103 - Схема подключения дисплея
STM32F103 - Входы и выходы

Рис. 2. Подключение дисплея.

Кнопка — на землю. Кратковременное нажатие переключает диапазоны по кругу. Долгое нажатие меняет чувствительность.

Карманный осциллограф на микроконтроллере STM32F103 - Входная цепь и питание

Рис. 3. Питание и входная цепь.

Часть схемы, обведённую красным, можно выкинуть, но если есть желание увеличить размер своего импеданса, то лучше оставить. Можно даже поставить входные резисторы (R3, R4) по 500 kΩ.

Внешний регулятор напряжения (рис. 3) нужен не всегда. На плате есть свой регулятор 3.3 В 100 мА. Если питать дисплей от него, будет греться. На платах другого типа (с большим разъёмом JTAG) стоит как раз AMS1117, для них внешний не нужен. На некоторых дисплеях тоже есть AMS1117 (и перемычка). Решайте сами.

Делитель напряжения, подключенный к A0, нужен для контроля уровня заряда аккумуляторов. В правом верхнем углу экрана — пиктограмма батарейки, как на мобильном телефоне (на фото отсутствует).

 

Принцип действия

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

АЦП производит серию непрерывных последовательных измерений уровня сигнала. Полученные значения складываются в память средствами DMA. Каждый раз мы засекаем время и определяем продолжительность серии замеров. Так мы узнаём цену деления оси времени.

Анализируя записанные значения уровня сигнала, ищем первый экстремум, после чего рисуем сигнал на экране. Так мы пытаемся сделать подобие синхронизации. Она неплохо работает на гладких сигналах и практически бесполезна на широкополосных.

Даём пользователю насладиться картинкой в течение одной секунды, сами в это время опрашиваем кнопку. Если кнопка нажата — меняем режимы. Затем всё повторяется.

Текст программы (некоторые называют его "скетч")

  • main.c
  • lcd7735.h — Дисплей и SPI. Инициализация и функции.
  • delay.h — Счётчик: инициализация, функции пауз.
  • ADC.h — АЦП и DMA.
  • font7x15.h — Шрифт.
Скачать исходный код

Для компиляции я использую среду CooCox CoIDE. Не выложил сюда Кокс-проект, поскольку он содержит абсолютные пути к файлам. Проще создать новый, чем править все пути. После создания проекта не забудьте подключить библиотеки: RCC, GPIO, DMA, SPI, TIM, ADC.

Прошивал при помощи программатора-отладчика ST-Link V2. Старики говорят, что можно и без него, через USB-Serial адаптер.

 

 

Использованы материалы:
Проект шотландского мастера Pingumacpenguin
Adafruit Display
STM32 Сохранение данных АЦП с помощью DMA

 

Если у вас есть комментарий по существу, дополнение, которое поможет сделать проект лучше — присылайте.

Микроконтроллеры   1999-2017 © Advertising and Research