Время между прерываниямии
- Войдите на сайт для отправки комментариев
Чт, 18/02/2016 - 22:43
Доброго время суток! Подскажите такую весч - можно ли на ардуино уно посчитать время между превываниями? Интересует такой алгоритм: если интервал между прерываниями больше х или прерывание вообще не наступило, выполнить у. Или по прерыванию запускать таймер, по переполнению выполнять у, по превыванию обнулять. Помогите избразить в коде.
Доброго время суток! Подскажите такую весч - можно ли на ардуино уно посчитать время между превываниями?
Можно
Помогите избразить в коде.
В этом разделе помогают тем, кто пишет сам и у него не получается. Тем, кому нужно просто написать от начала до конца, помогают в разделе "Ищу исполнителя".
На счет алгоритма - правильно думаю?
На счет алгоритма - правильно думаю?
Я не знаю, что Вы понимаете под выражением "или прерывание вообще не наступило" и как Вы собираетесь это условие проверять.
На счет алгоритма - правильно думаю?
Я не знаю, что Вы понимаете под выражением "или прерывание вообще не наступило" и как Вы собираетесь это условие проверять.
точнее с какого момента оно не наступило :) , а то один с кнопкой разобратся не мог - она не удерживалась, а просто нажималась, а подождать не додумал...
Думаю так. По прерыванию запускать таймер и выполнять функцию, при этом время работы таймера больше самого большого времени ожидания прерывания. И по переполнению таймера выполнять другую функцию. Т.е. так - Таймер на минуту, если частота прерываний меньше минуты - будет выполняться только функция по прерыванию, а если интервал прерываний станет больше минуты, то выполнится функция таймера. Делаю устройство контроля скорости конвеерной ленты. замер скорости есть, а при неожиданной резкой остановке не обнуляется значение скорости.
Скорость считаю так. Функцию вызываю по прерыванию.
Делаю устройство контроля скорости конвеерной ленты. замер скорости есть, а при неожиданной резкой остановке не обнуляется значение скорости.
так а задача какая? поймать стоп ленты? или не обнулять значение скорости?
вы подробнее изложите задачу. Мне почему то кажется, что у нее есть другое более понятное решение
Скорость надо замерять и при определенной скорости делать определенное действие(н\р включать или выключать двигатель) Это все работает. Но при резкой остановке нет обнуления значения скорости. Поэтому, при резкой остановке значение скорости остается неизменным и остановку проследить нельзя.
Скорость надо замерять и при определенной скорости делать определенное действие(н\р включать или выключать двигатель) Это все работает. Но при резкой остановке нет обнуления значения скорости. Поэтому, при резкой остановке значение скорости остается неизменным и остановку проследить нельзя.
Как измеряется скорость? Вычисляется по времени между импульсами?
1) Проверять условие, что импульс не пришел в нужный момент (интервал превышен ).
2) проверять условие, что импульс не пришел в первый интервал (с момента старта) – понизить скорость, во второй интервал - снова понизить. Проверять условие по скорости, если скорость ниже порога, то…
может кто другие варианты решения имеет
Скорость измеряю так:
speed - переменная скорости. Физически - датчик скорости с 5-ю импульсами на метр. Тип сигнала - меандр. Вот по превышению интервала самое верное, я думаю. Но как этот интервал задать?
Вообще-то я формулу скорости знаю, вопрос не в этом был, так и совет там - же. Интервал определения скорости и счетчик этих интервалов с момента последнего прерывания. Если прерывание случилось - счетчик обнулить. Если нет – установить скорость пропорциональную кол-ву интервалов. А вообще, кроме формулы скорости, инфы маловато – процу скорости бы хватило это обрабатывать… К слову о скорости, она вообще нужна? Может будет проще ее не считать, а работать с интервалами времени?
по измерению скорости это все. и других формул не знаю.
по измерению скорости это все. и других формул не знаю.
Друг-друга не понимаем, формула скорости одна и нечего мудрить – она такая и есть (формула). А вот способы определения времени между импульсами для расчета скорости – разные. У вас возникла проблема с тем, что происходит прямое определение скорости по факту прихода следующего импульса, а условия, что этого импульса можно не получить нет (я так понял).
примерно так.
Да, все верно понимаете. Этого условия(что импульс можно не получить нет). Попробовал ваш код - Теоретически работает, но при не приходе импульса отсчет идет некоторое время. т.е. на практике, после резкой остановки датчика скорости ардуино продолжает плавно уменьшать скорость до 0.1м\с. длистя это уменьшение больше 1-й секунды, что не допустимо, т.к. одна секунда минимальное время между импульсами.
Да, все верно понимаете. Этого условия(что импульс можно не получить нет). Попробовал ваш код - Теоретически работает, но при не приходе импульса отсчет идет некоторое время. т.е. на практике, после резкой остановки датчика скорости ардуино продолжает плавно уменьшать скорость до 0.1м\с. длистя это уменьшение больше 1-й секунды, что не допустимо, т.к. одна секунда минимальное время между импульсами.
ну, так установить Т2 таким образом, чтоб соответствовало минимальной скорости и выполнять команду по условию или наращивать число импульсов (датчиков импульса), брать контроллер мощнее (быстрее), установить датчик более подходящий (зависит от всей системы). Может даже подумать о компьютерной мышке, которая передает код перемещения, фотографируя поверхность (не встречал такого, но идея дает направление).
Еще раз спрашиваю вам вообще, зачем скорость в явном виде? Путь (между импульсами) всегда один, меняется только время – зачем на таких быстрых вычислениях (micros) такая трудная математика для контроллера? unsigned long вычисления тяжелые для мк.