Тахометр на STM32F103
Тахометр на STM32F103
Хочу сделать тахометр на STM32F103 и датчике холла 3144. Подскажите как лучше это реализовать. Использовать прерывания или опрашивать ножку МК для обнаружения сигнала прохождения магнита? Как считать интервал времени между прохождением магнита - таймер или RTC?
- Реклама
Re: Тахометр на STM32F103
Таймеры STM32F103 поддерживают датчик холла.
DWT.KNF18 писал(а):Как считать интервал времени между прохождением магнита - таймер или RTC?
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Тахометр на STM32F103
можно использовать режим захвата в таймере
Например, если на счетный вход таймера подана частота 1МГц
60 об/мин = 1 об/сек
за 1 сек при частоте 1МГц в регистр захвата запишется число N=1000000
Считаем обороты:
X об/мин = (1000000/N)*60
https://hubstub.ru/stm32/128-stm32-rezhim-zahvata.htmlРежим захвата — это особый режим работы таймера, суть которого в следующем, при изменении логического уровня на определённом выводе микроконтроллера, значение счётного регистра записывается в другой регистр, который именуют регистром захвата.
Для чего это надо?
С помощью этого режима можно измерить длительность импульса или период сигнала.
Например, если на счетный вход таймера подана частота 1МГц
60 об/мин = 1 об/сек
за 1 сек при частоте 1МГц в регистр захвата запишется число N=1000000
Считаем обороты:
X об/мин = (1000000/N)*60
Re: Тахометр на STM32F103
Спасибо за информацию, попробую разобраться как это реализовать на HAL + CubeMX.
- Oxford
- Опытный кот
- Сообщения: 819
- Зарегистрирован: Вт окт 23, 2012 13:17:25
- Откуда: Прокопьевск
- Контактная информация:
Re: Тахометр на STM32F103
[uquote="Мурик",url="/forum/viewtopic.php?p=3474061#p3474061"]Таймеры STM32F103 поддерживают датчик холла.
Мурсик, не надо чушь всякую советовать забудь про DWT. И не путай людей. Как всегда
KNF18, не надо никаких калокубов и халов использовать. Если так чешется говнолибы юзать, то хотя бы слой LL юзайте как вы это любите.
Открываем референс мануал и читаем 14.3.18
DWT.[/uquote]KNF18 писал(а):Как считать интервал времени между прохождением магнита - таймер или RTC?
Мурсик, не надо чушь всякую советовать забудь про DWT. И не путай людей. Как всегда
KNF18, не надо никаких калокубов и халов использовать. Если так чешется говнолибы юзать, то хотя бы слой LL юзайте как вы это любите.
Открываем референс мануал и читаем 14.3.18
Последний раз редактировалось Oxford Вс окт 07, 2018 20:41:20, всего редактировалось 2 раза.
Инженер R@D
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
Telegram чат: https://t.me/radiowolf или в поиске приложения @radiowolf. Личка:@cncoxford
- Реклама
- musor
- Друг Кота
- Сообщения: 39197
- Зарегистрирован: Сб сен 13, 2014 16:27:32
- Откуда: СпиртоГонск созвездия Омега
Re: Тахометр на STM32F103
неужели нет готовой схемки частотомера на стм? так вот тьахометр это тотже частотомер просто для 4тактного двигла надо умножать частоту на 60х сделать это можно или выбором интевала или умножением средствами мк
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Re: Тахометр на STM32F103
Критиковать каждый может, Но совета ТС от вас так и не последовало. Что вы ему посоветуйте именно в контексте измерения времени а не в плате что можно сделать по другому?Oxford писал(а):Мурсик, не надо чушь всякую советовать забудь про DWT.
Re: Тахометр на STM32F103
А что критиковать, чушь она и есть чушь.
На таймере все получится аппаратно, а вот DWT в некоторых камнях просто нет.
Это как здесь уже был цЫрк со static , один клоун "обнаружил" и все нубы стали лепить где не поподя.
Так же и с DWT...
Частотомер здесь уже неоднократнь всплывал, простой и весьма действенный. Искать по Reciprocal counter...
На таймере все получится аппаратно, а вот DWT в некоторых камнях просто нет.
Это как здесь уже был цЫрк со static , один клоун "обнаружил" и все нубы стали лепить где не поподя.
Так же и с DWT...
Частотомер здесь уже неоднократнь всплывал, простой и весьма действенный. Искать по Reciprocal counter...
Re: Тахометр на STM32F103
Речь именно об измерении времени (ТС еще про RTC писал), а не о режиме захвата таймера. С ним все понятно.dosikus писал(а):На таймере все получится аппаратно
"Бесплатный" 32-ух битный счетчик. Для задержек или измерения интервалов времени то что нужно. Ведь не у всех МК по 14 таймеров тем более 32-ух битных.dosikus писал(а):Так же и с DWT
У ТС STM32F103.dosikus писал(а):DWT в некоторых камнях просто нет.
Да частотомер был. Из того что помню, Олег выкладывал проект в теме которую по милости ARV снесли в ММЯЯЯЯЯЯЯЯЯЯЯЯЯЯУУ.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Тахометр на STM32F103
[uquote="Oxford",url="/forum/viewtopic.php?p=3475478#p3475478"]не надо никаких калокубов и халов использовать. Если так чешется говнолибы юзать, то хотя бы слой LL юзайте как вы это любите.[/uquote]
Этот вечный спор HAL vs SPL. Кому то удобнее\нравится\хочется\необходимо\ и т.д. использует HAL. Кто то SPL. Этот спор не приведёт ни к чему хорошему. Зато решить вопрос точно не поможет. Уверен есть масса тем на разных ресурсах где можно это выяснять. Предлагаю не превращать эту тему в выяснение что лучше\круче\правильнее\и т д.
Попробовал сделать тахометр при помощи таймера с режимом захвата и настроенного для датчика холла

Выход с датчика холла подключил к выводу PA15. Датчик холла при отсутствии по близости магнита держит "1", при поднесении магнита выставляет "0".
Вкладку тактирования не трогал, оставил всё как предложил cubeMX

Таймер настроил таким образом что бы происходили прерывания каждые 10 ms. Если я конечно правильно понял как настроить таймер

Отчаявшись включил все прерывания

В файле main.c сделал такую функцию для подсчета оборотов:
Вывожу значение rpm на дисплей 2004 по I2C, запускаю таймер:
В файле stm32f1xx_it.c в обработчике прерывания моего таймера пытаюсь захватить значение двумя способами:
Но и в b1 и в b2 и в timeLastSignal[0] всегда ноль. В это прерывание попадаю как только подношу магнит к датчику. Т.е. можно предположить что таймер настроен правильно для датчика холла. Понятно что допустил ошибку , но вот где? 
Этот вечный спор HAL vs SPL. Кому то удобнее\нравится\хочется\необходимо\ и т.д. использует HAL. Кто то SPL. Этот спор не приведёт ни к чему хорошему. Зато решить вопрос точно не поможет. Уверен есть масса тем на разных ресурсах где можно это выяснять. Предлагаю не превращать эту тему в выяснение что лучше\круче\правильнее\и т д.
Попробовал сделать тахометр при помощи таймера с режимом захвата и настроенного для датчика холла

Выход с датчика холла подключил к выводу PA15. Датчик холла при отсутствии по близости магнита держит "1", при поднесении магнита выставляет "0".
Вкладку тактирования не трогал, оставил всё как предложил cubeMX

Таймер настроил таким образом что бы происходили прерывания каждые 10 ms. Если я конечно правильно понял как настроить таймер

Отчаявшись включил все прерывания

В файле main.c сделал такую функцию для подсчета оборотов:
Код: Выделить всё
//------------------------------------------------------------------------------
static void calculateRpm(void)
{
rpm = 60/(timeLastSignal[0] - time);
time = timeLastSignal[0];
}Код: Выделить всё
/* USER CODE BEGIN 2 */
HAL_TIM_IC_Init(&htim2);
char str[4];
lcd_init(ADDR_DEV_LCD);
LCD_ON;
LCD_CURSOR_OFF;
HAL_TIM_Base_Start_IT(&htim2);
if(FLAG_HARD_FAULT == -1)
{
lcd_put_string_LRC(2, 0, "Hard Fault");
HAL_Delay(2500);
lcd_clear();
}
lcd_put_string_LRC(2, 0, "Тахометр v 1.0");
//lcd_put_string_LRC(2, 1, "Обороты:");
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
calculateRpm();
sprintf(str, "%d", rpm);
lcd_put_string_LRC(2, 1, str);
HAL_Delay(50);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */Код: Выделить всё
/**
* @brief This function handles TIM2 global interrupt.
*/
void TIM2_IRQHandler(void)
{
/* USER CODE BEGIN TIM2_IRQn 0 */
int b1 = 0;
int b2 = 0;
/*HAL_TIM_IC_Start(&htim2,TIM_CHANNEL_4);
timeLastSignal[0] = TIM2->CCR4;
HAL_TIM_IC_Stop(&htim2,TIM_CHANNEL_4);*/
HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_4, timeLastSignal, 1);
b1 = TIM2->CCR1;
b2 = TIM2->CCR4;
/*if(timeLastSignal[0] == 0)
{
timeLastSignal[0] = 1;
}*/
HAL_TIM_IC_Stop_DMA(&htim2,TIM_CHANNEL_4);
//timeLastSignal = TIM2->CCR1;
/* USER CODE END TIM2_IRQn 0 */
HAL_TIM_IRQHandler(&htim2);
/* USER CODE BEGIN TIM2_IRQn 1 */
/* USER CODE END TIM2_IRQn 1 */
}
Re: Тахометр на STM32F103
[uquote="KNF18",url="/forum/viewtopic.php?p=3476811#p3476811"]Этот вечный спор HAL vs SPL. Кому то удобнее\нравится\хочется\необходимо\ и т.д. использует HAL. Кто то SPL. Этот спор не приведёт ни к чему хорошему. Зато решить вопрос точно не поможет. Уверен есть масса тем на разных ресурсах где можно это выяснять. Предлагаю не превращать эту тему в выяснение что лучше\круче\правильнее\и т д.[/uquote]
Это не "вечный спор" это абсолютная истина - калокуб и спл для нубов противопоказаны.
Вы на своем опыте уже убедились что и калокуб и спл для вас бЭсполезны.
Хотите вечно тыркаться, продолжайте...
Это не "вечный спор" это абсолютная истина - калокуб и спл для нубов противопоказаны.
Вы на своем опыте уже убедились что и калокуб и спл для вас бЭсполезны.
Хотите вечно тыркаться, продолжайте...
Re: Тахометр на STM32F103
Ежли ужшш....
Тахометр в определенных пределах измеряемого диапазона единиц можно НА ЛЮБОМ МК (а то и просто на "рассыпухе") соорудить.
Вопрос в том, чего под лапой имеется и с чем работать умеешш.

Тахометр в определенных пределах измеряемого диапазона единиц можно НА ЛЮБОМ МК (а то и просто на "рассыпухе") соорудить.
Вопрос в том, чего под лапой имеется и с чем работать умеешш.
Re: Тахометр на STM32F103
[uquote="BOB51",url="/forum/viewtopic.php?p=3477086#p3477086"]Ежли ужшш....
Тахометр в определенных пределах измеряемого диапазона единиц можно НА ЛЮБОМ МК (а то и просто на "рассыпухе") соорудить.
Вопрос в том, чего под лапой имеется и с чем работать умеешш.
[/uquote]
На STM32F103 и датчике холла хочу
Осталось разобраться как настроить режим захвата
Тахометр в определенных пределах измеряемого диапазона единиц можно НА ЛЮБОМ МК (а то и просто на "рассыпухе") соорудить.
Вопрос в том, чего под лапой имеется и с чем работать умеешш.
На STM32F103 и датчике холла хочу


