Частотомер на stm32 своими руками

Обновлено: 02.07.2024

Решил написать книгу …
… про реальную разработку устройств на stm32. Поэтому думаю обновления если и будут, то нерегулярным и в основном в виде кусочков из книги.
Что бы не было скучно, вот вам малюсенький кусочек, можно сказать бета-версия про кварцевые резонаторы и вообще частоты.

Сами по себе микроконтроллеры работать не умеют. Им нужны всякие сопутствующие элементы. Вот к примеру, STM32L05 умеет работать с USB без всяких внешних кварцевых резонаторов, а STM32L152 — нет. Если мы планируем использовать более-менее точное время в наших проектах, то нам жизненно необходим внешний часовой кварцевый резонатор. Без него уход времени на 5-10 минут в сутки станет совершенно нормальным. И более того, он будет не постоянным и зависеть от температуры, напряжения питания и кучи других вещей.

В общем, время брать и читать описание микроконтроллера. Что ему надо, когда надо и зачем. Описание (или даташит как калька с datasheet) ищется легко прямо в интернете по коду микроконтроллера.

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

Клоки, тайминги и шины

Одна из самых распространенных причин неработоспособности чего-либо — неправильная конфигурация частот и всего, что с этим связано. Наступило время раскрытия еще одной вкладки в кубе — Clock configuration. Я открыл новый проект, взял выбранный микроконтроллер, и включил rtc, usb и пару uart. Просто для примера. Открываем вкладку и видим примерно следующее

Давайте начнем слева. У stm32 могут быть источники тактовых сигналов высокой (HS) и низкой (LS) частоты. Они могут быть внутренними (I) или внешними (E). Те, что сейчас в работе — подсвечиваются синим. Например, сейчас используется два источника — на 37 килогерц и на 16 мегагерц.

Ок, идем на первую вкладку и около RCC видим такую картину

Аббревиатура ppm означает parts per million или количество миллионных частей от основной частоты. Говоря иначе, погрешность 100 ppm для 100 МГц означает уход частоты на 100/1000000 часть от 100 МГц. Таким образом, частота может уйти на 100000000 * 100 / 1000000 = 10000 Гц (10 кГц, или 0.01 МГц), то есть финальная частота может быть любой в диапазоне 99.99 . 100.01 МГц. Или говоря другими словами чем меньше ppm, тем лучше. Итак, смотрим в даташит и находим следующую табличку

Нашли? А теперь смотрим уже в даташит на кварцевый резонатор и ищем там параметр нагрузочная емкость. А потом снова в даташит, но уже процессора.

Если кратко, то там есть следующая схема

и вот такая вот сложная формула

Cs — это паразитная емкость на плате. Обычно берут в диапазоне 3-5pF.
СL — это берем из даташита на резонатор. У меня 16

Воспользовавшись знаниями математики за 5 класс среднеобразовательной школы (хотя могу и ошибаться), решим это сложнейшее уравнение:
16 = (Х*X)/(X+X)+3
16-3=X*X/2*X
13=X/2
X=26
Итак, ответ ответ – конденсаторы CL1/2 должны быть 26pf. Таких в природе нет, зато есть 27pF, что нам более чем подходит.
Теперь надо подсчитать, запустится ли генератор. Там чуть дальше есть формула

Считаем
G=4*60*(2*3.14*(8*(10^6))^2*((7+16)*10^(-12))^2)
Возведение в степень я обозначил как ^, её же использует и excel.
Запутаться очень легко, поэтому я сделал простую считалку в excel (файл называется resonator)

Как видим, везде все стало хорошо и микроконтроллер будет работать на максимальной для него частоте — 32 мегагерца.

А проверить?

Но вот гложет меня, правильно ли я подсчитал все. Надо провериться. Достаю описание на stm32l-discovery и открываю там схему. Нахожу часть с резонатором

Как видим, около резонатора стоят конденсаторы по 20pF. Как видно, инженеры из ST решили перестраховаться и взяли паразитную емкость платы в 5pF. Если взглянуть на плату, то вроде да, кварцевый резонатор довольно (относительно конечно) далеко от ножек. На некоторых платах он часто его чуть ли не на ножки кладут. Но в общем и целом надо будет учесть этот момент в дальнейшем.

Примеры постоянно дополняются и корректируются. Иногда не синхронно с выходом новых статей о STM32.

Крайняя редакция: 15.02.2017

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

Example_First_Programm - GPIO. Первая программа. Мигание светодиодом

Example_GPIO - GPIO. Пример работы с входами и выходами

Example_StepMotor - GPIO. Пример работы с шаговым двигателем 28BYJ-48

Example_Nokia5110 - GPIO. Remap. Пример работы с выходами

Example_WG12864A - GPIO. Пример работы с LCD дисплеем WG12864A (KS0108/KS0107)

Example_ADC - ADC. Простой пример работы с АЦП

Example_ADC_DMA - ADC. Работа с АЦП с использованием DMA

Example_ADC_Injected - ADC. Работа с АЦП с настройкой Injected каналов

Example_ADC_Temperature - ADC. Использование встроенного термометра

Example_ADC_Watchdog - ADC. Аналоговый Watchdog

Example_Sonar - EXTI. Пример работы с сонаром HC-SR04

Example_USART1 - USART. Пример простого терминала

Example_USART_DMA - USART. Отправка данных через последовательный порт с помощью DMA

Example_DFPlayerMini - USART. Пример работы с MP3 плеером DFPlayer Mini. Функция произнесения числа

Example_SysTick - Таймер. Системный таймер SysTick. Задержка на SysTick

Example_TIM_CLK - Таймер. Генерирование прерывания через равные промежутки времени

Example_TIM_Time - Таймер. Измерение времени между двумя событиями

Example_PPM - Таймер. Захват сигнала

Example_Encoder - Таймер. Работа с энкодером

Example_Encoder_IT - Таймер. Работа с энкодером

Example_PWM_LED - Таймер. PWM. Управление яркостью светодиода

Example_PWM_RGB - Таймер. PWM. Управление цветом RGB светодиода

Example_PWM_Servo - Таймер. PWM. Управление сервоприводом

Example_PWM_Sound - Таймер. PWM. Генерирование звука

Example_RTC - RTC. Пример работы с часами реального времени

Example_BKP - BKP. Пример работы с регистрами Backup registers

Example_FLASH - FLASH. Пример сохранения настроек во FLASH память

Example_Watchdog - Watchdogs. Пример использование IWDG и WWDG

Example_I2C_Master - I 2 C. Работа с шиной I 2 C на примере датчика атмосферного давления BMP280

Example_I2C_Slave - I 2 C. Работа с шиной I 2 C в качестве Slave устройства

Example_BMP280 - I 2 C. Пример работы с датчиком атмосферного давления BMP280

Example_MS5611 - I 2 C. Пример работы с датчиком атмосферного давление MS5611

Example_USB_Virtual_Com_Port - USB. Пример работы с USB. Виртуальный последовательный порт

Example_USB_Keyboard - USB. Пример работы с USB. Эмуляция клавиатуры и мышки

Example_USB_Mass_Storage - USB. Пример работы с USB. STM32F103 в качестве Mass Storage Device

Example_PWR_Sleep - PWR. Использование энергосберегающего режима SLEEP

Example_PWR_Stop - PWR. Использование энергосберегающего режима STOP

Example_PWR_Standby - PWR. Энергосберегающий режим Standby. Пробуждение от Wake Up Pin

Example_PWR_Standby_RTC - PWR. Энергосберегающий режим Standby. Пробуждение от RTC

Example_Bootloader - Bootloader. Пример собственного загрузчика

Example_BLDC - Управление бесколлекторным двигателем с датчиками Холла (Sensored Brushless)

Example_PMSM - Управление PMSM с датчиками Холла с помощью STM32

Спасибо! Здесь все описано в доступной форме. Я надеюсь, что будет примером для управления бездатчиковом BLDC с этим STM32, как это было sdelano с ATmega168.

У меня есть пару-тройку полезные статии на интересные разработки для управления бездатчиковом BLDC, я даю та, которая обещают closed loop после 3-4 оборотов в минуту. A ето уже интересно. Применили опер. усилитель, точка 10.2.1, документ: ST AN1946 "SENSORLESS BLDC MOTOR CONTROL AND BEMF SAMPLING METHODS WITH ST7MC".
Извините мой gTranslate русскии, а украинский я вовсе не понимаю.

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

Генераторы очень часто встречаются в схемах. Это приемники и передатчики, часы и частотомеры, металлоискатели и различные автоматы световых эффектов…

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

Один из таких несложных наборов я недорого приобрёл на сайте одного китайского магазина.

Частотомер на PIC16F628 своими руками

Набор содержит:

  • 1 x PCB board (печатная плата);
  • 1 x микроконтроллер PIC16F628A;
  • 9 x 1 кОм резистор;
  • 2 x 10 кОм резистор;
  • 1 x 100 кОм резистор;
  • 4 x диоды;
  • 3 x транзисторы S9014, 7550, S9018;
  • 4 x конденсаторы;
  • 1 x переменный конденсатор;
  • 1 x кнопка;
  • 1 x DC разъём;
  • 1 x 20МГц кварц;
  • 5 x цифровые индикаторы.

Описание частотомера

  • Диапазон измеряемых частот: от 1 Гц до 50 МГц;
  • Позволяет измерять частоты кварцевых резонаторов;
  • Точность разрешение 5 (например 0,0050 кГц; 4,5765 МГц; 11,059 МГц);
  • Автоматическое переключение диапазонов измерения частоты;
  • Режим энергосбережения (если нет изменения показаний частоты — автоматически выключается дисплей и на короткое время включается;
  • Для питания Вы можете использовать интерфейс USB или внешний источник питания от 5 до 9 В;
  • Потребляемый ток в режиме ожидания — 11 мА

Схема содержит небольшое количество элементов. Установка проста — все компоненты впаиваются согласно надписям на печатной плате.

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

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

Частотомер на PIC16F628 своими руками

Напряжение на выводах микроконтроллера

Генератор для проверки кварцев

Частотомер на PIC16F628 своими руками

Приступаем к сборке

Высыпаем на стол содержимое пакета. Внутри находятся печатная плата, сопротивления, конденсаторы, диоды, транзисторы, разъемы, микросхема с панелькой и индикаторы.

Частотомер на PIC16F628 своими руками

Ну и вид на весь набор в полностью разложенном виде.

Частотомер на PIC16F628 своими руками

Теперь можно перейти к собственно сборке данного конструктора, а заодно попробовать разобраться, на сколько это сложно.

Я начинал сборку с установки пассивных элементов: резисторов, конденсаторов и разъёмов. При монтаже резисторов следует немного узнать об их цветовой маркировке из предыдущей статьи. Дело в том, что резисторы очень мелкие, а при таких размерах цветовая маркировка очень плохо читается (чем меньше площадь закрашенного участка, тем сложнее определить цвет) и поэтому также посоветую просто измерить сопротивление резисторов при помощи мультиметра. И результат будем знать и за одно его исправность.

Конденсаторы маркируются также как и резисторы.
Первые две цифры — число, третья цифра — количество нулей после числа.
Получившийся результат равен емкости в пикофарадах.
Но на этой плате есть конденсаторы, не попадающие под эту маркировку, это номиналы 1, 3 и 22 пФ.
Они маркируются просто указанием емкости так как емкость меньше 100 пФ, т.е. меньше трехзначного числа.

Резисторы и керамические конденсаторы можно впаивать любой стороной — здесь полярности нет.

Частотомер на PIC16F628 своими руками

Выводы резисторов и конденсаторов я загибал, чтобы компонент не выпал, лишнее откусывал, а затем опаивал паяльником.

Частотомер на PIC16F628 своими руками

Немного рассмотрим такой компонент, как — подстроечный конденсатор. Это конденсатор, ёмкость которого можно изменять в небольших пределах (обычно 10-50пФ). Это элемент тоже неполярный, но иногда имеет значение как его впаивать. Конденсатор содержит шлиц под отвертку (типа головки маленького винтика), который имеет электрическое соединение с одним из выводов. Чтобы было меньше влияния отвертки на параметры цепи, надо впаивать его так, чтобы вывод соединенный со шлицом, соединялся с общей шиной платы.

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

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

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

Длительность пайки каждой ножки не должна превышать 2 сек! Между пайками ножек должно пройти не менее 3 сек на остывание.

Частотомер на PIC16F628 своими руками

Ну вот собственно и всё!

Частотомер на PIC16F628 своими руками

Теперь осталось смыть остатки канифоли щёткой со спиртом.

Частотомер на PIC16F628 своими руками

Питание должно быть В пределах от 5 до 9 В — постоянное стабилизированное без пульсаций. (В схеме нет ни одного эл.конденсатора по питанию.)

Не забудьте у микросхемы есть с торца ключ — он располагается у вывода №1! Не следует полагаться на надпись названия микросхемы — она может быть написана и к верх ногами.

При подключении питания и отсутствия сигнала на входе высвечивается 0.

Частотомер на PIC16F628 своими руками

Первым делом нашёл кучу кварцев и начал проверять. Следует отметить, что частота кварца, например 32,768 кГц не может быть измерена, т.к. измерение ограничивается в диапазоне от 1 МГц.

Можно измерить, например 48 МГц, но следует иметь ввиду, что будет измерены гармонические колебания кварцевого генератора. Так 48 МГц будет измерена основная частота 16 МГц.

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

Частотомер на PIC16F628 своими руками

Режим программирования частотомера позволяет вычесть четыре основные запрограммированные ПЧ частоты 455 кГц; 3,9990 МГц; 4,1943 МГц; 4,4336 МГц; 10,700 Гц, а также любую собственную частоту.

Таблица алгоритма програмирования

Частотомер на PIC16F628 своими руками

Чтобы войти в режим программирования (Prog) нужно нажать и удерживать кнопку в течении 1-2 сек.

Затем нажимаем кнопку и поочередно пролистываем меню:

Интересный обучающий конструктор. Собрать частотомер под силу даже начинающему радиолюбителю.

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

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

Доработка частотомера

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

Можно спаять один из предложенных ниже.

Частотомер на PIC16F628 своими руками

Сопротивление R6 на верхней и R9 на нижней схеме подбирается в зависимости от напряжения питания и устанавливается на его левом выводе 5 В. При питании 5 В сопротивление можно не ставить.

Частотомер на PIC16F628 своими руками

… или простой, на одном транзисторе:


Номиналы сопротивлений указаны при питании 5В. Если у Вас питание усилителя другим напряжением, то подберите номинал R2,3 чтобы на коллекторе транзистора было половина питания.

Схема похожего частотомера с входным каскадом усилителя.

Частотомер на PIC16F628 своими руками

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

Частотомер на PIC16F628 своими руками
Частотомер на PIC16F628 своими руками
Частотомер на PIC16F628 своими руками

Надеюсь, что обзор данного конструктора-частотомера был интересен и полезен. Удачи!

А.В.Зотов, Волгоградская обл.

Кто заинтересовался набором можете пройти на сайт магазина МастерОк

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

Купить на Aliexpress

Схема электрическая принципиальная

В общем-то она не поменялась с того времени, ток чутка подправил.

Печатная плата

Немного переработана с учетом возможности использования компонентов сквозного монтажа.


Была выписана из Китая, подробнее в статье о заказе плат в китайских конторах.


А вот так это должно выглядеть:


Компоненты


Новая крутая плата. Известная синяя пилюля ( Blue Pill ), но теперь с разъемом USB Type-C, как вы это любите (очевидно вдохновением была MiniF4 STM32F411CE6).


Стоит она дороже, но это того стоит.


Гнездо BNC (bayonet Neill-Concelman) самое простое (говённое кстати ).


Миниатюрные диоды поверхностного монтажа можно найти платах люминесцентных ламп.


Получившаяся приставка


Подключение прошло успешно

Раньше это выглядело не очень, а теперь просто класс :


Подключать и отключать удобно:


Прошивка

С помощью программатора-отладчика ST-LINK V2

Его можно сделать, но проще приобрести. Используется программы STM32CubeProgrammer:


Далее распаковать архив в любую папку.

2) Подключить STLINK к синей пилюле и его через USB к ПК или телефону:


Если была ранее произведена прошивка, то перед подключением зажать кнопку сброса ( NRST) и после подключения отпустить. Нажать Connect, подключение должно пройти успешно (в случае необходимости обновить прошивку стлинка)


3) Нажать Open File и выбрать нужную прошивку.


4) Всё завершено:


С помощью USB-TTL преобразователя

Многим будет проще прошить МК использую обычный USB-COM преобразователь и телефон.

1) Подключить преобразователь так:

RX PA9
TX PA10
5V 5V
GND GND


2) Перед подачей питания на плате установить перемычки так, а если кнопка, то зажать BOOT перед подключением питания.



Ещё фото


Подключение к телефону и калибровка

Теперь благодаря использованию разъема USB Type-C


можно подключать осциллограф к телефону напрямую с помощью кабеля USB-C—USB-C без всяких переходников!


Необходимо приложение HScope, урезанная демонстрационная версия бесплатна, для каждого осциллографа своя лицензия, например, HS101 стояло 7$.


Теперь можно удобно подключать щупы:


но для используемого гнезда BNC не все подошли (средний не втыкается):


Сначала желательно провести калибровку нуля. Просто замыкаем контакты щупов и в разделе Calibration жмём Calib Zero Lvl -> Continue:


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


Использование щупов с делителем


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


Теперь с делителем можно подавать до 200 В:


Проверка работы

Сначала опыт с LC-контуром:


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


Также подал прямоугольный сигнал 1 кГц, ну что на него просто смотреть, цепляю фильтр низких частот:


При увеличении сопротивления частота среза уменьшается, то де самое можно сделать программно, там есть настройки ФНЧ и ФВЧ.


Но что еще интересней, нажав на кубик можно провести Быстрое Преобразование Фурье:


Проверка на прямоугольном сигнале, это уже было:




Здесь же включается ФНЧ с разным порядком:


Ещё здесь есть возможность длительной регистрации значений напряжения ( МИН, МАКС, СРЕДНЕКВАДРАТИЧЕСКОЕ ), что также очень полезно.


Видосик

Итого

По итогу этим осликом буду пользоваться часто из-за красивого внешнего вида, относительно удобного управления и простого сохранения осциллограмм, что хорошо для демонстрации и публикации.

Да, опять блютуз версия проверена не будет (хотя HC-06 этом уже имеется), т.к. здесь как-то криво организовано подключение, да и с самими модулями могут быть проблемы.

Читайте также: