Multi-Set.ru - Форум - Показать сообщение отдельно - KIA RIO JB FL
Тема: KIA RIO JB FL
Показать сообщение отдельно
  #17  
Старый 16.12.2013, 16:44
Iguana Iguana вне форума
Заблокирован
 
Регистрация: 14.05.2012
Адрес: Kiev
Сообщения: 120
По умолчанию

Цитата:
Сообщение от Slymas
P.S. Сделал на своем БК для измерения оборотов подсчет кол-ва импульсов за 1 секунду. В результате такого измерения шаг оборотов кратен 120 (кол-во_впрысков_в_секунду * 2 * 60), т.к. кол-во импульсов за секунду на самом деле дробное число.
Результатом остался не удовлетворен.
Начал думать как измерить период импульсов впрыска - тогда обороты будут отображаться точно, но тогда возникают дополнительные заморочки при глушении двигателя - тогда длительность периода получается бесконечна и этот момент нужно определять дополнительно, а т.к. все подсчеты идут в прерывании, то алгоритм измерения должен быть краток и быстр.
Добрый день, Slymas!
В своих RealTime системах я поступаю сл. образом:
- "строю" измерительное таймерное прерывание с частотой счёта, как минимум, в 10-ать раз быстрее самого короткого периода измеряемого сигнала;
- в прерывании проверяется бит "счёт" (этот бит задает начало счета);
- в прерывании проверяется бит "счёт окончен" либо проверяется внешнее событие;
- после наступления события "счет окончен" значение счётчика переписывается в необходимые переменные и устанавливается бит "результат готов", а сам счетчик и бит "счёт" сбрасываются;
- если "событие "счёт окончен"" не наступило до переполнения счётчика, то всё, включая "необходимые переменные" обнуляется и устанавливается бит "результат готов";

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