Простой 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МГц затухает. Переключающие процессы и емкости вносят задержки.
Программная корректировка выставляемой частоты и заполнения может быть проведена в следующих прошивках.
Дальнейшие планы развития
Если дальше развивать проект, можно произвести следующие доработки проекта:
- измерение входного напряжения и добавления quick charge 12В триггера;
- замена шага изменение значений генератора с 1Гц и 0.1% на фактическую величина шага соответствующей текущей выходной частоте;
- добавления узла регулировки выходной амплитуды;
- замена одного выходного P-канального ключа на полумост или на другое решение;
- дополнительные меню и режимы работы, например сервотестера;
- печать корпуса с возможностью установки li-ion аккумулятора;
- добавление варианта с упрощенной схемотехникой, для более простого повторения, за счёт применения 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, удалены незначащие нули вначале чисел.
Скачать исходник проекта C под CooCox v007
Проект написанный на C для среды CooCox CoIDE 1.7.6.
Добавлен C исходник проекта 22.10.2024
Alex_EXE | 30.06.2020 | Инструменты |
Вячеслав пишет 08.07.2020 в 03:12 #
Добрый день!
Все, несомненно прнкоаснр но готовый dds генератор на Али стоит что-то там около 200р, с экраном (намного большим чем этот) и частотой от 1 ГЦ до сотен кГц.
Тоже в виде платки с экраном и кгопками. Я взял себе несколькл штук их и активно применяю, отлично работают.
Зачем изобретать велосипед, не понятно. Выйдет дольше и дороже.
Вячеслав пишет 08.07.2020 в 03:14 #
Хмм, а редактирования нет что-ли? Очепятки поправить, пишу с телефона…
Alex_EXE пишет 08.07.2020 в 15:50 #
А смысл делать вообще что-либо? Ведь уже давно всё сделано до нас и всё что угодно можно купить в китае, а если не сделано то это или нам не нужно, или нужно немного подождать и это появится. А потом когда получаем китайский прибор то сразу разгораются форумы, то это не так, то что-то не то и сразу начинают пилить энтузиасты зачем-то прошивки. Вот и сделал сразу под себя.
Данный проект делал не только ради генератора, а на его основе отработал пару вещей. Например если присмотреться, то можно заметить, что печатная плата на фото отличается от сборочного рисунка.
И сам проект мне в общем понравился и пару раз меня выручил, т.к. дома у меня генератора нет. Хоть заработало не всё что задумал.
Если бы проект получился сразу то выложил бы его в конце 2018 года. А так пока некоторые недочёты решил, к примеру долго ждал новых дисплеев из разных магазинов. Пока понял, что минимальный функционал работает и дальше развивать проект желания уже нет…
Высылайте повторно отредактированный комментарий, заменю.
r0mik пишет 08.05.2021 в 10:08 #
> Зачем изобретать велосипед, не понятно. Выйдет дольше и дороже.
терпеть не могу комментаторов подобного типа.
в комментариях к любому проекту обязательно вынернет подобный умник со своим «ненужно».
смысл? ну например такой смысл, что подобный проект я повторю за пару дней неспешной сборки в свободное время… это если вырезать плату на станке, а если на макетке делать, то и вовсе за пару часов повторю. а ты будешь ждать своего чудесного уст-ва с алиэкспресса две-три недели, а потом окажется что оно не работает.
а если с сынишкой собрать подобное для самоообразования?
ты вообще в жизни своей хоть что-то разработал «для фана», а не что бы напарить кому-то?
Александр пишет 06.12.2022 в 12:40 #
Было бы классно, если хотя бы обрезанный не компилированный код был бы приложен.
Это для того, что я например начинающий, и реально не могу найти нормального примера для этого экрана, как на нем сделать несколько страниц или меню.
Думал хоть здесь посмотреть пример как реализовано.
Александр пишет 06.12.2022 в 12:40 #
P.s.
Именно под stm32
Alex_EXE пишет 22.10.2024 в 12:07 #
Добавил исходный код, как он есть в сыром виде.