Всем привет. Даже не знаю как задать вопрос, ну пусть будет так: Существует ли формула точного тахометра? В начале для пробы написАл программу классику - TMR0 без преддделителя считает импульсы в течении секунды, преобразуем и выводим. Даже в железе попробовал. С цифровыми приборами все прекрасно работает, на деле дискретность показаний равна 60, показания прыгают. В принципе я этого ожидал. Начал писать вторую - на измерении времени между импульсами, то есть формула: 1 секунду делим на время между импульсами - правильно ли это? Но, что то пока не нравятся мне показания: -при прерывании раз в 8 мкс при максимальной частоте 150 гц ошибка на 80 оборотов -при прерывании раз в 4 мкс при максимальной частоте 150 гц ошибка на 40 оборотов Хотел бы попробовать без предделителя погонять, но нет подпрограммы деления 4 байтного на 2 байтное - если кому не жалко, заранее спасибо Ну, в общем как то так.
Отправлено: 26.10.13 21:17. Заголовок: Сань, тут прикреплят..
Сань, тут прикреплять тяжело. Давай куда нибудь кину программку. Насчет тахометра. Сколько импульсов на оборот? И при чем прерывания? В принципе, готовый проект маленький. Так размещу.
Отправлено: 26.10.13 21:39. Заголовок: Если 1 импульс на об..
Если 1 импульс на оборот, то мах. длительность измерительного импульса 1сек Понятно. INT фиксирует. А считает программный счетчик. Подскажи нижний верхний диапазон возможных оборотов
Пост N: 118
Зарегистрирован: 05.06.08
Откуда: Россия, Челябинская область
Рейтинг:
1
Отправлено: 26.10.13 21:50. Заголовок: Подскажи нижний верх..
цитата:
Подскажи нижний верхний диапазон возможных оборотов
Верхний - 4 разряда индикаторы значит 9999 нижний оборотов 100-200 А вообще, так я делаю "правильный тахометр" хотелось бы от 1 оборота тысяч до 20. Но это хотелки
Отправлено: 26.10.13 22:13. Заголовок: Ну будем считать 100..
Ну будем считать 100 об\сек нижний (обычно считают в минутах) Посмотри здесь Может, что поможет. Считать импульсы проще и удобней, чем длительность, тем более INT. Это из опыта. В принципе в промышленности их и считают. 100 имп. сек; 1сек/100=10мс . Т.е. измерительный интервал тебе не нужно делать 1 сек. Достаточно 10 мс. Сбросил таймер с счетных входом, лучше TMR1, запустил TMR0 на 10мс. Прервался, считал импульсы. Получается сколько оборотов за 10мс. умножил на 100 вот и обороты в секунду. Спокойно преобразуешь, выводишь на индикацию раз в секунду приблизительно. И опять заново. Делитель TMR0 на 1/64, предустановка .100 или .99 для 10мс. А там сколько накрутишь. 1 импульс за 10мс вот и 100об/сек Если от 1 оборота, надо увеличивать импульсы на оборот, или измерять за 1 сек, или измерять длительность. Но длительность много подводных камней. Теоретически все просто, если будет идеальный датчик Но очень низкие обороты очень тяжело измерить. Если ничего больше делать не надо, то проще и точней считать импульсы за 1 сек.
Пост N: 119
Зарегистрирован: 05.06.08
Откуда: Россия, Челябинская область
Рейтинг:
1
Отправлено: 26.10.13 23:43. Заголовок: Ну будем считать 100..
цитата:
Ну будем считать 100 об\сек нижний (обычно считают в минутах)
- мне тоже в минутах надо.
цитата:
Считать импульсы проще и удобней
- согласен на все 100 но: как правильно перевести импульсы (герцы) в обороты в минуту? Я когда 1 тахометр делал считал так: 1 гц х 60 = 60 об.мин 2 гц х 60 =120 об.мин и так далее. Вот она дискретность в 60 оборотов и вырисовывается. А как мерить 70, 75 оборотов? Или я не прав?
Пост N: 383
Зарегистрирован: 25.09.09
Откуда: г.Саратов
Рейтинг:
1
Отправлено: 27.10.13 06:25. Заголовок: Diam пишет: Вот он..
Diam пишет:
цитата:
Вот она дискретность в 60 оборотов и вырисовывается. Или я не прав?
Для меня, прав. Недавно закончил узел тахометра для любительского сверлильного станочка. Имею два импульса на оборот шкива, 30 об/мин дискретность. Дело, думаю, в умножении на 60. Сколько импульсов не намерить, после умножения последняя цифра на индикаторе - 0, но не 5.
Имею два импульса на оборот шкива, 30 об/мин дискретность.
Тогда получается - с увеличением количества меток на шкиве падает дискретность и повышается точность. Но, тогда получается, что проще взять частотомер, сделать на валу 60 меток (аппаратное умножение) и будет все ОК
Не понял юмора. Индицируй об/сек или количество импульсов за секунду. Нужна ли точность тахометра на сверлилке (я всё о своём ) до 0,5 оборота? Закрепил 2 магнита на шкив двигателя только ради его центровки, если датчик по светоотражению, ИМХО - 1 импульс на оборот , достаточно для моего случая. Вот из моего архива по тахометру : ".......По сути тахометр - это обычный частотомер, домножающий измеренную частоту на 60/N, где N - число лопастей того устройства, что призвано преобразовать электрическую (ну или метаноловую) энергию в механическую, ведь более распространенной единицей измерения оборотов является об/мин. Вот алгоритм, в большинстве своих строк, и повторяет частотомер."
- на сверлилке не нужна, но ведь есть места где нужна более высокая точность. Меня больше раздражает скакание показаний.
По поводу подпрограммы деления: divide movlw 32 movwf count clrf octL clrf octH В какой системе счисления число 32. Похоже точку перед ним надо поставить. А так работает.
Отправлено: 27.10.13 15:49. Заголовок: Diam пишет: Я когда..
Diam пишет:
цитата:
Я когда 1 тахометр делал считал так: 1 гц х 60 = 60 об.мин 2 гц х 60 =120 об.мин и так далее. Вот она дискретность в 60 оборотов и вырисовывается. А как мерить 70, 75 оборотов? Или я не прав?
Конечно прав. Поэтому в промышленных тахометрах не менее 1000 имп. на оборот. Но такие диски не все потянут. Остальное все "показометры" типа тахометров на автомобилях. Альтернатива, считать длительность импульса. Там точно. Но надо делить 60.000.000 на длительность. 60.000.000// TMR1 х reg_ch\ 3938700h / TMR1 x reg_ch = частота оборотов минуту reg_ch -это счетчик переполнения TMR1 при такте 1 мкс И есть еще ПРОБЛЕМКА получить на малых оборотах до 100 150 об/мин четкий фронт измерительного импульса. Ну например, пусть INT компаратор и т.д. фиксирует фронт. Он это четко делает. При малых оборотах фронт начинает затягиваться и происходит несколько срабатываний в районе гистерезиса. При чем не всегда и не постоянно. И тут начинается ахинея. Вместо 50 об/мин получаем 38000. Хотя прога работает нормально, она получила импульс. Опять надо увеличивать количество импульсов на оборот, между ними измерять и т.д. Этот парадокс.. Я его два года изучал в гараже с цифровым осциллографом и даже наметил путь решения. Сделать сложный датчик с собственным контроллером. Но пока это только ради интереса. Времени особенно нет и я знаю как делают профи. Считают импульсы на 1000 --2000 импульсных датчиках. Выбор по сути ограничен. Diam пишет:
цитата:
divide movlw 32 movwf count clrf octL clrf octH В какой системе счисления число 32. Похоже точку перед ним надо поставить. А так работает.
Ну я думал, что ты догадаешься, что в 4 байтном числе 32 бита. И ты оправдал мои ожидания
Пост N: 123
Зарегистрирован: 05.06.08
Откуда: Россия, Челябинская область
Рейтинг:
1
Отправлено: 27.10.13 16:00. Заголовок: MAZ пишет: Но надо д..
MAZ пишет:
цитата:
Но надо делить 60.000.000 на длительность.
Александр этим сейчас и занимаюсь похоже ты правильно подметил: подаю 20 гц вычисляет 1200 подаю 20,5 гц вычесляет 1230 подаю 10 гц вычесляет 1740 на малых оборотах какую то фигню вычесляет
Отправлено: 27.10.13 16:05. Заголовок: Я не догоняю. Какие ..
Я не догоняю. Какие Гц? Вычисляет все нормально. Ты учитываешь прерывания таймера? В смысле переполнения? Хоть ИНТ, хоть счетчиком. Или просто импульсы подаешь от генератора?
Пост N: 124
Зарегистрирован: 05.06.08
Откуда: Россия, Челябинская область
Рейтинг:
1
Отправлено: 27.10.13 16:17. Заголовок: Саша может я не прав..
Саша может я не правильно объясняю, но уж как умею TMR1 без предделителя считает время, по прерывании INT он останавливается. 60.000.000 делю на показания двухбайтного счётчика-таймера TMR1H:TMR1L. Дальше двоично-десятичное преобразование.
Отправлено: 27.10.13 16:28. Заголовок: На малых оборотах дв..
На малых оборотах двухбайтный Таймер должен переполнится,произойдет прерывание, это надо зафиксировать не прерывая счета. Потом количество прерываний умножить на FFFF, и прибавить что осталось в таймере. Как умножить быстро здесь В моем варианте с временем обработки было туго. Надо было еще ПИД регулирование успевать делать, то просто проверял на ноль счетчик переполнений, и умножал если только не ноль
Отправлено: 27.10.13 16:43. Заголовок: Просто не представил..
Просто не представил этот процесс 60об/мин ( всего лишь)= 1об/сек= 1000000 мкс (тактов) и это 15 переполнений Diam пишет:
цитата:
подаю 10 гц вычесляет 1740 на малых оборотах какую то фигню вычесляет
Вот у тебя и получается 100000 мкс - одно переполнение которое не учитываешь и остаток 52587 Делим 60000000/52587=1141. Очень похоже. Хотя на бумаге все очень идеально чем а реале
Пост N: 127
Зарегистрирован: 05.06.08
Откуда: Россия, Челябинская область
Рейтинг:
1
Отправлено: 27.10.13 16:57. Заголовок: Ага, ты смеешься. :s..
Ага, ты смеешься. А я как представлю себе эти многобайтные вычисления. Вообще начинался разговор про правильную формулу или она у каждого программиста своя?
Отправлено: 27.10.13 17:11. Заголовок: Конечно у каждого св..
Конечно у каждого своя. На его взгляд - самая оптимальная. Только делить уже надо на трехбайтное. Ну или учи Си. Там просто. Разделить и все. Без всяких нервов Проверь почту на всякий случай.
Пост N: 128
Зарегистрирован: 05.06.08
Откуда: Россия, Челябинская область
Рейтинг:
1
Отправлено: 27.10.13 17:28. Заголовок: Проверил - ты уже го..
Проверил - ты уже готовишь мне высшую математику? Может все таки есть попроще выход? Ну там кварц сменить. И почему все таки когда играешь предделителем накапливается ошибка.
Отправлено: 27.10.13 20:39. Заголовок: Предделитель, это то..
Предделитель, это тот же самый регистр, который тебе не доступен. Что там осталось, никто не знает. Вспомни старые методы досчета частотомеров на TMR0. У тебя с начала заполняется предделитель, например 256 импульсов, потом переполнение и только запись в таймер. Так несколько раз и тут стоп, измерение окончено. Ты берешь данные из таймера, а что в предделителе, хрен его знает.
А куда деваться? Ну смени кварц сделай 1 сек такт Кстати TMR1 можно отдельным кварцем тактировать, тот же часовой 32768. Ну и что это изменит?
Пост N: 130
Зарегистрирован: 05.06.08
Откуда: Россия, Челябинская область
Рейтинг:
1
Отправлено: 27.10.13 23:00. Заголовок: Везет. А мне некогда..
цитата:
Везет. А мне некогда по паять. Хотя и пенсионер. Одни бытовые кружева.
Чего уж везет. Такие же бытовые проблемы. Я тоже больше года паяльник в руки не брал, MPLAB не заводил - все строился. Вот только начал. И так ничего не знал и остальное забыл
Все даты в формате GMT
3 час. Хитов сегодня: 8
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет