Частотомер на STM32F401

Кто любит RISC в жизни, заходим, не стесняемся.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Частотомер на STM32F401

Сообщение linkov1959 »

https://drive.google.com/file/d/1KyRss0 ... sp=sharing // архив проекта в CubeIDE.
https://drive.google.com/file/d/12iExBB ... sp=sharing //видео работы частотомера.
Последний раз редактировалось linkov1959 Сб ноя 11, 2023 09:27:48, всего редактировалось 2 раза.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Частотомер на STM32F401

Сообщение Аlex »

?
Реклама
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

Аlex, файлы грузятся? Описание сегодня будет.
https://drive.google.com/file/d/12iExBB ... drive_link
401f.jpg
(68.46 КБ) 233 скачивания
B10 - RES, B1 - DC для дисплея.
Для отладки использую выход MCO(А8) , его нужно соединить с А0, А1. Время измерения 0.5 сек, 6-7 знаков стабильны. Тим5 в режиме захвата считает тактовые тики 125Мгц, Тим2 считает импульсы измеряемой частоты со входа ETR , Тим4 каждые 0.5 сек в прерывании по переполнению включает прерывание по захвату Тим5, в котором это прерывание запрещается и по разности показаний счетчиков за измеряемый интервал рассчитывается частота. Настройки в Кубе.
Диапазон частот 0.1 Гц - 50Мгц.
Стартуем.
HAL_TIM_Base_Start(&htim2); // В кубе выставить тактирование ETR2, остальное по умолчанию.
HAL_TIM_Base_Start_IT(&htim4); // В кубе настроить прерывание через 0.5с или другое.
HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_2); // В кубе выставить канал 2 Input Capture, включить прерывание , остальное по умолчанию.

Прерывание Тим4, время измерения.
void TIM4_IRQHandler(void)
{
/* USER CODE BEGIN TIM4_IRQn 0 */
NVIC_EnableIRQ(50);
snprintf(str1, 96,"%.6f", f1); // В настройках куба разрешить printf_Float.
ST7735_WriteString(0, 0,str1 , Font_11x18, ST7735_GREEN, ST7735_BLACK);
...

Прерывание захвата.
void TIM5_IRQHandler(void)
{
/* USER CODE BEGIN TIM5_IRQn 0 */
NVIC_DisableIRQ(50);
n2=TIM5->CCR2;
ni2= TIM2->CNT;
n=n2-n1;
n1=n2;
ni=ni2-ni1;
ni1=ni2;
f1=125000000.0/n;
f1=f1*ni;
...

Переменные.
/* USER CODE BEGIN EV */
uint32_t n1=0;
uint32_t n2=0;
uint32_t ni1=0;
uint32_t ni2=0;
uint32_t ni=0;
uint32_t n=0;
char str1[96]={0,};
float f1=0.0;
...

Таймеры работают без остановок.
Библиотеку для дисплея SPI ST7735 брал отсюда.
https://www.youtube.com/watch?v=scd0yFtdpJs
codenamehawk
Вымогатель припоя
Сообщения: 528
Зарегистрирован: Вт фев 09, 2010 17:52:26

Re: Частотомер на STM32F401

Сообщение codenamehawk »

[uquote="linkov1959",url="/forum/viewtopic.php?p=4501030#p4501030"]//видео работы частотомера.[/uquote]
Оно, 1000000 G(h)z мерит.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Andrey_B
Сверлит текстолит когтями
Сообщения: 1101
Зарегистрирован: Пт апр 09, 2010 16:06:38
Откуда: Тула

Re: Частотомер на STM32F401

Сообщение Andrey_B »

[uquote="linkov1959",url="/forum/viewtopic.php?p=4501102#p4501102"]Для отладки использую выход MCO(А8)[/uquote]
C синхронным сигналом HSE не считается. :-) Включите асинхронный HSI.

[uquote="linkov1959",url="/forum/viewtopic.php?p=4501102#p4501102"]Тим4 каждые 0.5 сек в прерывании по переполнению включает прерывание по захвату Тим5, в котором это прерывание запрещается[/uquote]
Во первых, запрет прерываний не запрещает захват, по приходу события регистр всё равно обновится. Во вторых, фронт входного сигнала может прийти между событием, вызывающем прерыванием и командой чтения регистра. Это будет вызывать периодические ошибки.
Реклама
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

Andrey_B, я тестировал с LSE/4. Нужно прежде посмотреть осциллом на сигнал, бывает фигня. Захват не мешает. Ошибок не замечал. По идее должны быть ошибки, если предыдущее показание счетчика больше и разность отрицательна, но это не наблюдается. Сначала делал условие перед расчетом, но потом отказался. Чем проще, тем понятней.
codenamehawk, этот частотомер измеряет Герцы, а не Херцы!:)
Реклама
codenamehawk
Вымогатель припоя
Сообщения: 528
Зарегистрирован: Вт фев 09, 2010 17:52:26

Re: Частотомер на STM32F401

Сообщение codenamehawk »

linkov1959 писал(а):этот частотомер измеряет Герцы, а не Херцы!:
И я об этом, если хотите чтобы было как у всех, то герцы, английскими символами обозначают Hz, а Gz ближе всего к GHz.
Впрочем каждый сам себе художник, делайте как получается.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

codenamehawk, На видео нельзя исправить, но в программе можно.
snprintf(str1, 96,"%.6f", f1);// выводится то, что в кавычках. Вам должно понравиться :
snprintf(str1, 96,"%.6f Hz ", f1);
Аватара пользователя
240265
Электрический кот
Сообщения: 1029
Зарегистрирован: Сб мар 09, 2013 11:29:22
Откуда: 40RUS, Жуков

Re: Частотомер на STM32F401

Сообщение 240265 »

linkov1959, Нужно писать Гц . :)
IVL ex UA6PJ
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

240265, Я и написал Гц, а получились бяки, это автор библиотеки виноват :)

Добавлено after 38 minutes 46 seconds:
Библиотечку для дисплея SPI ST7735 хорошую с кириллицей где взять? Даже поворота экрана в моей нет.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

Ещё одна версия частотомера на STM32F401. Вход А0. Перед чтением показаний таймеров каналы синхронно закрываются, после чтения открываются. Исключается вероятность захвата между чтениями двух таймеров. Ведущий TIM2 по захвату с входа А0 считает импульсы и управляет захватом TIM5, который считает системные тики. TIM10 отвечает за время счета 0.5сек.
https://drive.google.com/file/d/1heW0HQ ... drive_link //архив проекта в CubeIDE.
К сожалению, в кубе нельзя настроить нужный режим для TIM2. Эти строки нужно вписать вручную вместо тех, что делает куб в настройках TIM2.
sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

Логика пока такая.
if(flag==1)//время измерения прошло.
{
//выключение каналов.
//Сохранение свежих данных с каналов.
//включение каналов.
//Извлечение ранее сохраненных данных.
//Расчет частоты.
//Замещение ранее сохраненных данных на свежие.
//Вывод частоты.
//Сброс флага.
}
Что бы реализовать конвейер будем данные каналов сохранять в массивы m[](канал измеряемых импульсов) и n[](канал тактовых импульсов).
Ещё нам понадобится сдвигать данные этих массивов(по 4 значения) вправо такой строкой.
for(i=3;i>0;i--) m= m[i-1], n= n[i-1];
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

А куда вставить строку сдвига?
if(flag==1)//время измерения прошло.
{
//выключение каналов.
//Сохранение свежих данных с каналов в начало массивов n[] и m[].
//включение каналов.
//Извлечение ранее сохраненных данных c конца массивов n[] и m[].
//Расчет частоты по данным начала и конца массивов n[] и m[].
//Вывод частоты.
for(i=3;i>0;i--) m= m[i-1], n= n[i-1];//сдвиг вправо массивов n[] и m[]
//Сброс флага.
}
Где-то так.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

Входной формирователь частотомера.
вхЧ.jpg
(18.4 КБ) 232 скачивания
Игорь2111
Встал на лапы
Сообщения: 108
Зарегистрирован: Вс май 15, 2022 23:04:19
Откуда: Белгородская обл.

Re: Частотомер на STM32F401

Сообщение Игорь2111 »

74hc132 при питании 3,3 в низкая частота работы
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

Игорь2111, там больше транзистор ограничивает, на ВЧ будет другая схема.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

На ВЧ от 50 МГц обычно 50 Ом, но мало вольт для входов STM. Тут поможет повышающий ВЧ трансформатор. Низкие и средние частоты до 50Мгц оптимально полевик BF998R на входе и HC132 или другой триггер Шмидта.
Игорь2111
Встал на лапы
Сообщения: 108
Зарегистрирован: Вс май 15, 2022 23:04:19
Откуда: Белгородская обл.

Re: Частотомер на STM32F401

Сообщение Игорь2111 »

NXP выпуск 998ых двухзатворных полевиков прекратил в 2019.
И ели они 15-20 ма
Сейчас рекомендуют в ВЧ биполярники при 3,3 в мшу 2SC3099 3ма.
Тригер Шмидта на входе МК мне кажется лишний.
Последний раз редактировалось Игорь2111 Пт дек 01, 2023 23:44:34, всего редактировалось 1 раз.
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

Игорь2111, с тюнера на спутник выдрал биполярник на 12 Гиг и поставил в схему с ОЭ вместо BC546 - по частоте выигрыш небольшой, а чуйка на низах упала в разы. А какую схему посоветуешь?
Посмотрел входа на STM - там Шмидт заложен, может обойдемся без внешнего?
linkov1959
Держит паяльник хвостом
Сообщения: 923
Зарегистрирован: Пн сен 10, 2018 19:16:28

Re: Частотомер на STM32F401

Сообщение linkov1959 »

Испытал конвейер на stm32f401, 125Мгц. Время измерения 4сек, 8 выборок по 0.5сек. Тут уже флоат не катит, только double. На 1Мгц стабильны сотые герца. На GD407, 390Мгц будет получше.
https://drive.google.com/file/d/14Goot0 ... drive_link // видео.
https://drive.google.com/file/d/1dkZ1zB ... sp=sharing // проект в кубе.
Ответить

Вернуться в «ARM»