Перейти к содержанию
    

Помогите составить формулу подсчета RPM

Господа, пытаюсь вывести на экранчик частоту вращения двигателя.

В двигателе таходатчик, который выдает 2 импульса на оборот, ширина импульса - 50%, исходя из чего я измеряю ширину положительной полуволны (считаю, сколько мсек натикал таймер), умножаю на 4 и получаю период обращения.

В этой связи, на первый взгляд формула выглядит просто:

RPM=1/(tics*4)*60, где tics - щирина импульса в микросекундах.

 

Но при подсчете в микроконтроллере выдает ноль RPM. Понятно почему - если целочисленную единицу поделить на число больше единицы, получится ноль.

Как посчитать частоту вращения, если RPM и tics представлены типом unsigned int ?

Ожидаемая частота - 100-3000 об/мин.

 

Таймер в STM32F103 настроен так

 TIM3->PSC       = 720 - 1; // clock = 100kHz
  TIM3->ARR       = 30000 - 1; //period = 0,3sec

Изменено пользователем Salamander

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"RPM=1/(tics*4)*60, где tics - щирина импульса в микросекундах."

 

Как только исправите ошибки в этой строке, у Вас все получится.

Tip: Я подставляю ширину импульса 1 мкс в микросекундах (1), получаю 1/(1*4)*60 - явная ошибка.

Значит какого-то коэффициента не хватает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну да, забыл я про миллион, но сути это не меняет, вы ведь понимаете что будет если unsigned int поделить или умножить на миллион

 

В итоге вышло вот что:

RPM=1500000/tics .

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

но сути это не меняет

...

RPM=1500000/tics .

 

Меняет, потому что теперь будет работать. Попробуйте ;)

 

Но лучше записать тип явно

RPM=1500000UL/tics;

 

А еще лучше - сдать проверку, чтобы не происходило переполнения RPM. Вдруг из-за помех получите слишком короткий tics:

if (tics>=MIN_TICS)

RPM=1500000UL/tics;

else

RPM=0xffff;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Более общее выражение для определения скорости вращения

RPM=60*Fo*Nx/nox*K, где

RPM - скорость вращения [об/мин]

Fo - частота тактирования счётчика

Nx - целое число периодов измеряемой величины

nox - значение счётчика за Nx

K - коэффициент передачи таходатчика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...