Простой TTL генератор на stm32f030f4p6

Генератор в лаборатории радиолюбителя один из полезных инструментов, а зачастую и жизненно необходимый. Но не все могут обзавестись таким прибором. Так же для некоторых задач, особенно в цифровой техники, достаточно генератора только одних прямоугольных импульсов — ТТЛ (ШИМ) генератора.

Простой TTL генератор на stm32f030f4p6
Простой TTL генератор на stm32f030f4p6

Предлагаю конструкцию компактного и простого ТТЛ генератора на базе микроконтроллера stm32f030f4p6. Простого в виду функционала, т.к. он позволяет генерировать меандр с частотой от 0.1Гц до 200кГц с изменяемой величиной заполнения и фиксированной амплитудой.

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

Примеры применения:

  • формирования управляющего сигнала для схем с ШИМ управлением: LED драйверы, драйверы двигателей, сервоприводы, сервомашинки;
  • настройка фильтров, схем с резонирующими контурами;
  • источник базовой частоты для сброса AVR микроконтроллера, после некорректной прошивки fuse бит.

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

Количество выходов 1
Частота рабочая 0,1Гц-100кГц
Частота максимальная до 1МГц
Заполнение 0.1 — 100%
Шаг скважности От 0.1 до 50%, зависит от рабочей частоты
Напряжение питания 3.5-12В
Выходное напряжение = входному-0.3В
Потребление генератором тока ~20мА
Максимальный коммутационный ток 100мА к (+ питания)
2.5мА к (общему при питании от 5В)

Схема

Схема
Схема

Генератор построен на микроконтроллере U1 stm32f030f4p6 в tssop20 корпусе. Вывод картинки производится на oled дисплей 0.91″ 128×32 на контроллере SSD1306 по i2c шине. Дисплей припаивается 14 контактным шлейфом LCD1 прямо на плату. Управление производится по 4-х позиционному джойстику с центральной кнопкой S1 от сотового nokia N73 шириной 7.5мм, шагом выводов 2мм, точную марку не знаю, так же подходят другие схожие джойстики. Питание схемы осуществляется или через miniUSB разъём X2 или через дополнительный разъём питания X1 на PLS штырях. Для защиты от переполюсовки и превышение тока входное напряжение поступает через диоды D1-D2 BAT54HT1 током до 200мА в корпусе SOD323. Далее напряжение через чип-танталовый конденсатор C1 10мкФ 25В типоразмера A поступает на линейный стабилизатор U2 LP2985AIM3.3 на 3.3В с низким падением напряжения, максимальным входным напряжением 16В, возможно замена LP2980, LP2981. Низкое падение напряжение на стабилизаторе позволяет питать конструкцию от одной банки li-ion аккумулятора. Для дополнительной фильтрации помех по питанию применён LC фильтр на индуктивности L1 1-10мкГн в корпусе 1206 и на танталовом конденсатора C8 22-47мкФ типоразмера A, который ещё выполняет роль основного фильтра по питанию. В обвязке стабилизатора U2 используются 0603 конденсаторы C3, C5, C6 на 0.1мкФ напряжением 25В. В схему заложена возможность измерения входного напряжения, для этого напряжения после защитных диодов D1-D2 через делитель выполненный на резисторах R7 и R8 на 20К и 3.3К и через защитную диодную сборку D3 BAT54S поступает на вход ADC микроконтроллера. В схему заложен quick charge триггер на 12В, выполненный на резисторах R1-R4 сопротивлением 10К и 2.2К. В первой версии прошивки QC триггер и контроль напряжения не реализованы. На стабилизаторе U3 LP2980AIM5-3.0 (схожие аналоги LP2985, LP2981, LP3985) формируется 3В для питания OLED дисплея. Обвязка стабилизатора конденсаторы C9, C11, C12 на 0.1мкФ. В обвязке дисплея применены конденсаторы C13 на 1мкФ напряжением от 6В; C16, C17 на 1мкФ напряжением не менее 25В; C18 на 22нФ; C14 и C19 на 4.7мкФ 25В; резистор R15 на 820К. На R17 10К и C15 0.1мкФ собрана цепочка задержки, для сброса дисплея после подачи питания, некоторым OLED дисплеям она необходима, другие работают без этой цепочки. На резисторах R10 и R11 осуществляется подтяжка линий i2c дисплея к 3.3В, а резисторы R13 и R14 на 1К выполняют гасящую функцию, т.к. дисплей питается от 3В. Генератор можно использовать без установки кварца Y1 на 16МГц в корпусе 5032 (5032 — размер 5х3.2мм при желании можно поставить 3225 — 3.2х2.5мм), тогда контроллер будет работать от встроенной RC цепочки на 8МГц, но точность установки частоты и его стабильность будут снижены. В обвязке кварца используются два конденсатора на 12пФ C7 и C10. В обвязке микроконтроллера установлены два блокировочных конденсатора C2 и C4 по входам питания на 0.1мкФ. Резистор R9 служит для подтяжки входа выбора загрузки микроконтроллера BOOT0 к общему проводу, что выбирает стандартный режим работы, перемычку W1 устанавливать не нужно. Выходной ШИМ сигнал генератора формируется на выводе PA7 (13) и поступает через цифровые транзисторы Q1 bcr108 на светодиодный индикатор LED1 с токоограничивающим резистором R12 на 470-1К и ещё через один транзистор Q2 bcr108 на полевой P канальный транзит Q3 IRLML5103 с обвязкой из токоограничивающего резистора R16 на 200Ом и закрывающего R18 на 2К. Транзистор Q3 коммутирует выход генератора к напряжению питания Vin, формируя высокий уровень на выходе генератора, когда Q3 закрыт через резистор R19 сопротивлением в 2К на выходе формируется низкий уровень. Данное решение является не самым опциональным, т.к. ограничивает выходной ток и режет максимальную частоту генератора, но является наиболее простым. Так же по выходу установлена защитная диодная сборка D4 BAT54S.

Перечень компонентов:

Компонент
Позиционное обозначение
Корпус
Количество
Микросхемы
STM32F030F4P6 U1 TSSOP20 1
LP2985AIM3.3 U2 SOT23-5 1
LP2980AIM5-3.0 U3 SOT23-6 1
Индикация
Oled SSD1306 0.91″ LCD1 1
LED Red LED1 LED0603 1
Полупроводники
bcr108 Q1, Q2 SOT-23 2
IRLML5103 Q3 sot-23 1
BAT54HT1 D1, D2 SOD323 2
BAT54SLT1 D3, D4 SOT-23 2
Резисторы
220 R16 RES-0603 1
470 R12 RES-0603 1
1K R5, R6, R13, R14 RES-0603 4
2K R18 RES-0603 1
2.2K R2, R4 RES-0603 2
3.3K R8 RES-0603 1
10K R1, R3, R9, R10, R11, R17 RES-0603 6
20K R7 RES-0603 1
820K R15 RES-0603 1
2K R19 RES-0805 1
Конденасаторы
12pF C7, C10 CAP-0603 2
22nF 25V C18 CAP-0603 1
0.1uF 25V C2, C3, C4, C5, C6, C9, C11, C12, C15 CAP-0603 9
1uF 25V C13, C16, C17 CAP-0603 3
4.7uF 25V C14, C19 CAP-0805 2
10uF 25V C1 Tantal A 1
22uF C8 Tantal A 1
Установочные
16MHz Y1 5032 1
Индуктивности
4.7uH L1 1206 1
Переключатели
Joystick N73 S1 JOYSTICK_N73 1
Соединители
POWER X1 PLS2 1
miniUSB X2 miniUSB 1
RTVG X3 PLS4 1
OUT X5 PLS3 1

Схема
Сборочный рисунок

Размер платы 70х20мм. Диаметр крепежных отверстий 2.5мм.
Вид печатной платы:

Вид платы генератора
Вид платы генератора

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

Прошивка контроллера

Прошить контроллер можно двумя способами. Через разъём X4 SWD. Если в прошивке задействована функция quick charge то у программатора должен корректно работать аппаратный сброс по линии RST.

Второй способ прошивки через UART. Для этого можно применить USB-UART преобразователь, например на cp2102 или ft232. Прошивка осуществляется через разъём X3 UART (RTVG — Rx Tx Vdd Gng). Для этого нужно попасть в UART Bootloder, который есть штатно во всех stm32. Нужно на время прошивки замкнуть (запаять) перемычку W1, что переведет вход BOOT0 контроллера в высокий уровень.

Управление

Управление генератором производится с помощью 4-х позиционного джойстика с центральной кнопкой. Влево и вправо — производится перемещение между разрядами частоты и заполнения, вверх и вниз изменение значения. Центральная кнопка включает и отключает генерацию ШИМ сигнала. Если изменяемый самый старший разряд числа уменьшается с 1 на 0, то изменение автоматически переключается на следующий меньший разряд.

Если производится манипуляция с частотой менее 1000Гц, на дисплее отображается единица измерения частоты — Hz и между значением и единицей измерения добавляется дополнительный разряд десятых частей герца. Если частота выше 1кГц, то между тысячным и сотым разрядом отображается точка, а единица измерения частоты отображается в kHz. Аналогично для частоты больше 1МГц, разделитель между миллионным и сто тысячными знаками, а единица измерения MHz. Заполнение регулируется в % с шагом 0.1%.

Экраны управления генератором
Экраны управления генератором

Новое значение частоты и заполнения применяется сразу после изменения разряда. Само изменение производится не плавно, генерация при каждом применение (изменении значения) начинается сначала.

Значение установленной амплитуды и малых частот можно наблюдать с помощью светодиода LED1 в верхнем правом углу.

Генератор не сохраняет последнее установленное значение, а начинает каждый раз работу с 1кГц 50% ВЫКЛ. Сохранение значений потребует выделение 1КБ из 16КБ драгоценной flash памяти контроллера, что будет расточительно, а так же постоянная перезапись будет уменьшать ресурс выделенного сегмента.

Точность и разрешение

В первой версии прошивки реализован минимально необходимый функционал:
генератор ШИМ с частотой от 0.1Гц до 8МГц, с шагом 0.1Гц на диапазоне до 1кГц и 1Гц на остальном диапазоне. Регулировка заполнения ШИМ сигнала о 0 до 100% с шагом 0.1%. Но стоит отметить, что регулировка с шагом в 1Гц и 1% осуществляется не на всё диапазоне, с повышением частоты дискретность уменьшается. Это связанно с тем, что для генерации используется не специализированные микросхемы генераторов, не ПЛИС, а штатные средства генерации ШИМ stm32. Контроллер работает на максимальной тактовой частоте 40МГц, а выставляемая частота и заполнение формируются с помощью деления тактовой частоты контроллера, а это деление целочисленное и чем частота больше, тем шаг переключения увеличивается.

Частота
Шаг частоты
Шаг заполнения
До 100Гц 0.1Гц 0.1%
До 5кГц 1Гц 0.1%
До 10кГц 2Гц 0.1%
20кГц 10Гц 0.1%
40кГц 40Гц 0.1%
50кГц 62Гц 0.125%
100кГц 250Гц 0.25%
200кГц 1кГц 0.5%
500кГц 6.3кГц 1.25%
1МГц 25.6кГц 2.5%
2МГц 105кГц 5%
4МГц 444кГц 10%
8МГц 20%

Так же искажения вносит простая схемотехника, особенно существенно это становится заметно с повышением частоты. На частоте в 500КГц меандр превращается в пилу, а свыше 1МГц затухает. Переключающие процессы и емкости вносят задержки.

1кГц 0.1% 1кГц 50% 1кГц 99%
1кГц 0.1% 50% 99%

10кГц 0.1% 10кГц 50% 10кГц 90%
10кГц 0.1% 50% 90%

100кГц 10% 100кГц 50% 100кГц 77%
100кГц 10% 50% 77%

500кГц 5% 1МГц 7% 2МГц 7%
500кГц 5% 1МГц 7% 2МГц 7%

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

Дальнейшие планы развития

Если дальше развивать проект, можно произвести следующие доработки проекта:

  1. измерение входного напряжения и добавления quick charge 12В триггера;
  2. замена шага изменение значений генератора с 1Гц и 0.1% на фактическую величина шага соответствующей текущей выходной частоте;
  3. добавления узла регулировки выходной амплитуды;
  4. замена одного выходного P-канального ключа на полумост или на другое решение;
  5. дополнительные меню и режимы работы, например сервотестера;
  6. печать корпуса с возможностью установки li-ion аккумулятора;
  7. добавление варианта с упрощенной схемотехникой, для более простого повторения, за счёт применения oled дисплея не с шлейфом, а готового модуля с PLS штырями, возможна замена джойстика на энкодер.

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

Заключение

Простая версия ТТЛ (или ШИМ) генератора получилась. Генератор получилось реализовать на базе нишевого микроконтроллера. Устройство работает, с поставленными задачи справляется. Простота питания от 3.5 до 12В, возможность питания от USB, li-ion аккумулятора. Мобильность. Если у Вас нет другого генератора и для ваших задач будет достаточно одного меандра, то он может быть полезен.

Скачать файлы проекта

Содержимое архива:

altium\
ttl_generator.PcbDoc PCB, Altium Designer
сam\
CAM_drill.Cam CAM сверловка
CAM_gerber.Cam CAM gerber
gerber\
pcb.drl сверловка
pcb.gbl медь, низ
pcb.gbs маска, низ
pcb.gbo шелкография, низ
pcb.gko контур
pcb.gtl медь, верх
pcb.gto шелкография, верх
pcb.gts маска, верх
hex\
simple TTL generator.bin прошивка bin
simple TTL generator.hex прошивка hex
assembled.pdf сборочный рисунок
scheme.pdf принципиальная схема

Параметры gerber файла: единицы измерения мм, точность 3:3, удалены незначащие нули вначале чисел.

6 комментариев на « Простой TTL генератор на stm32f030f4p6»

  1. Вячеслав пишет 08.07.2020 в 03:12 #

    Добрый день!

    Все, несомненно прнкоаснр но готовый dds генератор на Али стоит что-то там около 200р, с экраном (намного большим чем этот) и частотой от 1 ГЦ до сотен кГц.
    Тоже в виде платки с экраном и кгопками. Я взял себе несколькл штук их и активно применяю, отлично работают.

    Зачем изобретать велосипед, не понятно. Выйдет дольше и дороже.

  2. Вячеслав пишет 08.07.2020 в 03:14 #

    Хмм, а редактирования нет что-ли? Очепятки поправить, пишу с телефона…

  3. Alex_EXE пишет 08.07.2020 в 15:50 #

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

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

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

    Высылайте повторно отредактированный комментарий, заменю.

  4. r0mik пишет 08.05.2021 в 10:08 #

    > Зачем изобретать велосипед, не понятно. Выйдет дольше и дороже.

    терпеть не могу комментаторов подобного типа.
    в комментариях к любому проекту обязательно вынернет подобный умник со своим «ненужно».
    смысл? ну например такой смысл, что подобный проект я повторю за пару дней неспешной сборки в свободное время… это если вырезать плату на станке, а если на макетке делать, то и вовсе за пару часов повторю. а ты будешь ждать своего чудесного уст-ва с алиэкспресса две-три недели, а потом окажется что оно не работает.
    а если с сынишкой собрать подобное для самоообразования?
    ты вообще в жизни своей хоть что-то разработал «для фана», а не что бы напарить кому-то?

  5. Александр пишет 06.12.2022 в 12:40 #

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

  6. Александр пишет 06.12.2022 в 12:40 #

    P.s.
    Именно под stm32

Комментарии RSS

Оставьте отзыв