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

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

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

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

 

 

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

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

Рис. 1. Тестовый запуск осциллографа. Синусоида сгенерирована саунд бластером, от того ступенчатая.

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

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

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

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

"Частота развёртки" нашего осциллографа зависит от быстродействия АЦП. В STM32F103 разрядность АЦП фиксирована и равна 12. Это в полтора раза больше, чем нам нужно. В STM32F407, например, разрядность можно уменьшить, что сократит время измерений. АЦП STM32F407 можно перевести в режим triple interleaved mode и получить скорость измерений 7.2 MSPS (грубо рисовать сигналы до 1 MHz). Но F407 в три раза дороже F103, а плата с ним (development board) - раз в 6.

АЦП, встроенные в микроконтроллеры, обычно не отличаются высоким быстродействием, хотя есть, например, LPC4370 (12-bit at 80 MSPS). Очевидно, что когда нужна скорость, следует использовать специализированные микросхемы, например AD9283. Но быстро измерить сигнал недостаточно, полученные данные нужно успеть куда-то сохранить за время измерения. Те, у кого есть время и деньги, могут поэкспериментировать с AD9226 (65 MSPS) и STM32F103VCT6 + FPGA.

 

Схема

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

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

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

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

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

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

Последовательно с аккумуляторами имеет смысл поставить выключатель питания ПД9-1 или аналогичный.

Если есть желание увеличить размер своего импеданса, на вход можно добавить неинвертирующий повторитель на ОУ, что позволит достичь значения 1 MΩ и более. Питать ОУ следует непосредственно от аккумуляторов напряжением 4.8 - 5.4 В.

 

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

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

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

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

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

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

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

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

Как создать CooCox CoIDE проект
  1. Запускаем IDE. Из меню: Project > New Project
  2. Вводим имя, запоминаем где лежит проект.
  3. Выбираем "Board", жмём "Next >"
  4. STM32 > STM32F103x > STM32F103C8T6 Core Development Board
  5. В окне "Repository" выбираем вкладку "Peripherals", подключаем библиотеки (см. рис.)
  6. Чтобы Кокс не ругался на stdio.h, задаём: View > Configuration > Link > Library: "Use Base C Library".
  7. Распаковываем скачанные файлы в папку проекта.
  8. Жмём "F7".
  9. Ликуем.
  10. Чтобы автор порадовался вашему триумфу, переводим ему 50 рублей на пиво.

 

CooCox CoIDE - Подключение библиотек

 

Программатор-отладчик ST-Link V2

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

 

 

 

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

 

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

Микроконтроллеры   1999-2024 © Advanced Research