| Форум РадиоКот https://radiokot.ru/forum/ |
|
| CubeIDE особенности измерения частоты и периода. https://radiokot.ru/forum/viewtopic.php?f=59&t=180991 |
Страница 1 из 2 |
| Автор: | linkov1959 [ Вс янв 30, 2022 20:48:55 ] |
| Заголовок сообщения: | CubeIDE особенности измерения частоты и периода. |
Частотомер штука точная и требует особого подхода. Таймеры STM32 это могут делать, но требуют глубоких знаний по их устройству и настройки. Частотомер должен точно измерять высокие частоты, низкие, период и длительность импульсов, а это связано с разными режимами таймеров. На помощь приходит CubeIDE и встроенный туда CubeMX. Идея в том, что бы настроить таймеры в кубе мышкой, написать пару строчек простого кода и всё, что нам нужно, частота, период и др. лежит в переменных, которые выводим куда захотим и процессор при этом не загружаем. Добавлено after 1 hour 3 minutes 9 seconds: ВЧ частоту считаем по входу TIM2_ETR за 1сек, которую дает TIM1 в связке по железу. Вложение: Вложение: Таймер 5 измеряет период и длительность импульса по входу 1канала. Вложение: Добавлено after 1 hour 18 minutes 21 second: Запускаем таймеры HAL_TIM_Base_Start_IT(&htim1); HAL_TIM_Base_Start(&htim2); HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_1); HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_2); Добавлено after 3 minutes 21 second: Колбеки. void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM5) { if(htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) { period = HAL_TIM_ReadCapturedValue(&htim5, TIM_CHANNEL_1)+2; pulse = HAL_TIM_ReadCapturedValue(&htim5, TIM_CHANNEL_2)+2; } } } Добавлено after 3 minutes 38 seconds: void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) { if(htim == &htim1) { count = __HAL_TIM_GET_COUNTER(&htim2); HAL_TIM_Base_Stop_IT(&htim1); __HAL_TIM_SET_COUNTER(&htim2, 0x0000); HAL_TIM_Base_Start_IT(&htim1); } } Добавлено after 3 minutes 33 seconds: period, pulse, count - это всё, что нам нужно. |
|
| Автор: | ivan dimir [ Вс янв 30, 2022 23:22:23 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
Мне кажется одного таймера будет мало.А вы используете преывание по входу? |
|
| Автор: | Eddy_Em [ Вс янв 30, 2022 23:50:08 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
ivan dimir, естественно, для измерения частоты нужно минимум три таймера: один считает длительность входных импульсов, второй считает количество импульсов за секунду. А узнать, что прошла именно секунда, ему поможет третий таймер. Далее, как я уже в другой теме говорил: в зависимости от количества импульсов и длительности выбираем тот или другой метод измерения, чем значительно повышаем точность. Ну и, конечно, никакого калокуба! Калом пользуются лишь абдуринщики. А их копропродукцию все прекрасно видели... |
|
| Автор: | ivan dimir [ Пн янв 31, 2022 00:00:45 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
Я знаю сайт правда по AVR .Ну это можно использовать и в Stm32.Там всё просто.принцип такой СпойлерКод: #include <mega8.h> // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 ;PORTB #endasm #include <lcd.h> #include <stdio.h> unsigned long i = 0, freq=0; char lcd_buf[33]; interrupt [EXT_INT0] void ext_int0_isr(void) { i++; } interrupt [TIM1_COMPA] void timer1_compa_isr(void) { freq=i; i=0; TCNT1H=0x00; TCNT1L=0x00; } void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; PORTD=0xFF; DDRD=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 7,813 kHz // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: On // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x05; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x1E; OCR1AL=0x85; OCR1BH=0x00; OCR1BL=0x00; // External Interrupt(s) initialization // INT0: On // INT0 Mode: Rising Edge // INT1: Off GICR|=0x40; MCUCR=0x03; GIFR=0x40; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x10; // Global enable interrupts #asm("sei") lcd_init(8); while (1) { sprintf(lcd_buf,"freq=%d",freq); lcd_gotoxy(0,0); lcd_puts(lcd_buf); }; } используем внешнее прерывание и один таймер. |
|
| Автор: | Аlex [ Пн янв 31, 2022 00:13:46 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
ivan dimir писал(а): Там всё просто.принцип такой Это самый топорный способ измерения частоты. На высокой частоте будет лагать. И чем выше входная частота, тем будет ниже точность измерения.
|
|
| Автор: | ivan dimir [ Пн янв 31, 2022 00:31:13 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
Скажите на на какую максимальную частоту можно работать по входу прерыванию?Ну например stm411CEU? Добавлено after 1 minute 55 seconds: Ну эта программа написана в ХАЛ библиотека.Не так ли. |
|
| Автор: | Eddy_Em [ Пн янв 31, 2022 00:32:01 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
Не надо GPIO EXTI! Есть же таймеры в режиме захвата! А они чуть ли не до полной тактовой частоты умеют. А у некоторых линеек МК — даже выше! И повторюсь: измерять длительность импульса можно лишь для низких частот. Для высоких нужно считать, сколько их штук в секунду (или несколько секунд). Точность будет выше. Абы разрядности хватило и частотных свойств. И еще раз: КАЛ — это адов отстой для нищих разумом. Ни в коем случае эту дрянь нельзя использовать! |
|
| Автор: | ivan dimir [ Пн янв 31, 2022 00:43:16 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
СпойлерКод: HAL_TIM_Base_Start_IT(&htim1); HAL_TIM_Base_Start(&htim2); HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_1); HAL_TIM_IC_Start_IT(&htim5, TIM_CHANNEL_2); меня заинтересовали вот эти строки.Тут 3 тамера 1 запущен по прерыванию.А второй как работает?А на 5 таймер два входа1 и 2 каналы в прерывании? |
|
| Автор: | Аlex [ Пн янв 31, 2022 00:49:54 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
ivan dimir писал(а): меня заинтересовали вот эти строки. Это просто разрешения прерываний от таймеров. Это не их настройка.Настройку выложил ТС в картинках. И подписал, для чего нужен каждый таймер. |
|
| Автор: | ivan dimir [ Пн янв 31, 2022 00:50:06 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
СпойлерКод: И еще раз: КАЛ — это адов отстой для нищих разумом. Ни в коем случае эту дрянь нельзя использовать! но у вас написано в хале.Или не так я говорю?.Я не спец.Я любитель. |
|
| Автор: | Аlex [ Пн янв 31, 2022 00:51:08 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
ivan dimir, Вы перепутали, Eddy_Em - не ТС |
|
| Автор: | ivan dimir [ Пн янв 31, 2022 09:02:40 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
Я извеняюсь.Был после дня рождения.Но всё таки эти строки.В прерывании первый таймер.А второй? А пятый использовано два входа? |
|
| Автор: | linkov1959 [ Пн янв 31, 2022 11:36:05 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
Идея в том, что бы сделать настоящий частотомер, а не очередной показометр. Первые тесты показали, что это возможно. На одной секунде удалось поймать несколько наносекунд. Таймеры синхронизированы по железу благодаря настройкам в кубе. Железу пофиг, каким способом его настроили, важен результат. Средства отладки CubeIDE позволяют этот результат отслеживать. Ещё идея обойтись без термостата кварца с коррекцией по температуре. Пока работаю с stm32H743, но потом перенесу на более доступный камень типа F401 с выводом на LCD 16x2. Максимальная измеряемая частота 200-250Мгц. Советую изучать устройство таймеров - очень пригодится, ну и куб в придачу. Добавлено after 8 minutes 19 seconds: Я извеняюсь.Был после дня рождения.Но всё таки эти строки.В прерывании первый таймер.А второй? А пятый использовано два входа? Второй без прерываний, он ведомый. Пятый имеет один вход захвата, к которому подключено внутри два канала. Еще один вход для ВЧ частоты. Входы НЧ и ВЧ будут иметь разные схемы усилителей формирователей. |
|
| Автор: | ivan dimir [ Пн янв 31, 2022 12:01:32 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
stm32H743 а это дорогая штука? |
|
| Автор: | Reflector [ Пн янв 31, 2022 12:04:02 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
Идея в том, что бы сделать настоящий частотомер, а не очередной показометр. И в чем отличия? Частотомер на двух таймерах - это самое простое что делают на STM32. |
|
| Автор: | Eddy_Em [ Пн янв 31, 2022 12:07:30 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
stm32H743 а это дорогая штука? Баксов 20 - как полноценный мини-одноплатник. Вот я и говорю, что во многих случаях можно использовать связку "одноплатник + дешевый МК", которая будет делать то же самое, но значительно меньшими усилиями со стороны разработчика. А еще у китайцев появились какие-то дешевые МК с высокими рабочими частотами, я себе на али взял девборду, но пока никаких средств разработки под них (равно как и документации на английском), увы, нет. Подожду - авось, появятся. Или будет, как и девборда на MSP430 пылиться в дальнем ящике. |
|
| Автор: | Reflector [ Пн янв 31, 2022 12:12:05 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
stm32H743 а это дорогая штука? Это сложная штука, точно не для нерусских электриков которые самостоятельно и с AVR разобраться не могут. |
|
| Автор: | linkov1959 [ Пн янв 31, 2022 14:58:06 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
Reflector, самое простое я сделал сразу со сбросом таймера в колбеке и получил ошибку в 250 тактов, после сделал сброс по железу через внутренние связи таймеров и ошибка стала 2такта, которые легко компенсировать программно и таких моментов много. |
|
| Автор: | Reflector [ Пн янв 31, 2022 15:50:22 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
самое простое я сделал сразу со сбросом таймера в колбеке и получил ошибку в 250 тактов У таймера есть режим OnePulse, TIM1 досчитал один раз и остановился, можно спокойно считывать TIM2->CNT в прерывании, сбрасывать его и запускать TIM1 опять. |
|
| Автор: | Dimon456 [ Пн янв 31, 2022 17:22:49 ] |
| Заголовок сообщения: | Re: CubeIDE особенности измерения частоты и периода. |
linkov1959 писал(а): Частотомер штука точная и требует особого подхода. А от чего ваша "штука" будет тактироваться?От кварцевого резонатора 8МГц? Вы да же не знаете точную частоту вашего кварца. Температура в помещении может меняться в широких пределах. Попробуйте погреть свой кварц градусов так до 50 и посмотреть на точность своего частотомера. |
|
| Страница 1 из 2 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


