Обсуждаем контроллеры компании Atmel.
Ответить

Тахометр для токарника

Пт дек 27, 2019 11:44:06

Здравствуйте, уважаемые.
Решил сделать тахометр для своего настольного токарного станочка. Вроде ничего сложно, а обороты в минуту вычисляются некорректно. Прошу тех, кому не лень читать чужой код, подсказать где затаилась ошибка. А чтобы было проще разобраться с моей писаниной, опишу само устройство и алгоритм. Пишу в Codevision AVR.
Тахометр на Atmega8 работает от внутреннего генератора на 8МГЦ, для вывода значений используется 4-значный 7-сегментный индикатор. В качестве датчика - инфракрасная оптопара работающая на отражение. Импульсы с датчика снимаются через INT0 по спадающему фронту.
Алгоритм работы:
Измеряется время между срабатываниями прерывания INT0. При срабатывании прерывания INT0 сбрасывается счетчик импульсов от предыдущего измерения. Счетчик импульсов выполнен на Timer1 и переменной kw_over, которая хранит число переполнений Timer1. Timet1 настроен на 1МГц.
Timer0 используется для отсчета времени вывода на каждый разряд индикатора, а так же для выжидания примерно 1 секунды (переменные pora_obnovit и obnovka) для пересчета значений оборотов в минуту (переменная taho). Пересчет значения "оборотов в минуту" производится один раз в секунду. Если обороты менее одного в секунду, то на индикатор выводится четыре минуса "----".
Функция вывода числа работает корректно. Импульсы с датчика тоже поступают. Прерывание INT0 отрабатывает. А вот расчитывается показание криво. При срабатывании датчика примерно 1 раз в секунду значение "оборотов в минтуту" получается от 23 до 45. Если датчик срабатывает чаще, например 5 раз в секунду, то показания вычислений околонулевые.
Уже мозг кипит :(
Листинг программы с коментариями:

Re: Тахометр для токарника

Пт дек 27, 2019 12:10:31

Код:
kw=(long)kw+((long)65536*(long)kw_over_buf); // число тиков таймера1 с учетом количества его переполнений
taho=((long)6*kw)/100000; // обороты в минуту

Думаю, что это некорректное выражение, т.к. скорость вращения S=60*Fo/nox, где Fo-частота тиков таймера, nox-число тиков таймера1 с учетом количества его переполнений за один период вращения.

Re: Тахометр для токарника

Пт дек 27, 2019 12:37:06

скорость вращения S=60*Fo/nox, где Fo-частота тиков таймера, nox-число тиков таймера1 с учетом количества его переполнений за один период вращения.


Т.е. taho=60*1000000/kw, я правильно понял?

Re: Тахометр для токарника

Пт дек 27, 2019 12:50:12

Если
thor_nsk писал(а):Timet1 настроен на 1МГц
, то да, правильно.

Re: Тахометр для токарника

Пт дек 27, 2019 13:17:39

для измерения периода приходящих импульсов вместо прерывания INT0 лучше использовать функцию захвата таймера1 и вычислять в прерывании по захвату.

Re: Тахометр для токарника

Пт дек 27, 2019 15:02:28

если до понедельникк потерпишь, могу скинуть проект тахо. под тини 2313, под своё железо сам допилишь...

Re: Тахометр для токарника

Пт дек 27, 2019 15:25:58

Скорректировал формулу, вроде все работает :)

если до понедельника потерпишь, могу скинуть проект тахо. под тини 2313, под своё железо сам допилишь...

Потерплю :) Буду благодарен. С интересом посмотрю вашу реализацию.

Re: Тахометр для токарника

Пн дек 30, 2019 14:38:05

к сожалению под тини уже нету, только под мегу16, но там меню и прочей мути было многоо...
поэтому сел и быстренько перекинул в тини (в проект от насоса) только требуемое, а насосное всё выкинул (оставил (закоментировав) только обработку придисплейной клавиатуры, в протеусовом проекте эта клавиатура тоже для примера осталась, потом сам уберёшь, если не понадобится)
таймер обработки клавиатуры оставил - т.к. он служит и делителем для обновления показаний на дисплее.
Хоть точность замера итак плавающая (в зависимости от частоты измеряемых импульсов динамически изменяется в 32 раза, поддерживая примерно на одном уровне время и шаг измерения), дополнительно сделал принудительный(кнопкой)/автоматический(по частоте) выбор скорости таймера - он, к сожалению пересчитывает уже не на лету... т.ч. можешь использовать только один из диапазонов (пределы измерения каждого диапазона указаны в коде). (сейчас переключение настроено по скорости, вверх - 1000 rpm, вниз - 500 rpm)

Добавлено after 34 minutes 45 seconds:
аппаратная регулировка яркости реализована, но на кнопки не выведена - если надо, можешь сам вывести... там достаточно OCR0B менять
Вложения
taho2313.zip
(134.43 KiB) Скачиваний: 59
Последний раз редактировалось Ivanoff-iv Пн дек 30, 2019 19:22:13, всего редактировалось 1 раз.

Re: Тахометр для токарника

Пн дек 30, 2019 17:31:48

Ivanoff-iv, благодарю.

Re: Тахометр для токарника

Пн дек 30, 2019 22:23:42

сразу оговорюсь, что я не призываю писать в таком стиле (запихнув весь код в прерывание) но для себя считаю его допустимым при соблюдении некоторых условий, направленных на недопущение многократного наложения прерываний и срыва стека.
правильней вместо этого разместить тяжелый код в цикле майна и выравнивать начало выполнения его зависающим до события циклом или сном.
Ответить