Например TDA7294

Форум РадиоКот :: Просмотр темы - счётчик импульсов - тахометр
Форум РадиоКот
https://radiokot.ru/forum/

счётчик импульсов - тахометр
https://radiokot.ru/forum/viewtopic.php?f=3&t=165415
Страница 1 из 3

Автор:  рокки1945 [ Чт сен 12, 2019 04:50:48 ]
Заголовок сообщения:  счётчик импульсов - тахометр

Здравствуйте!
Вводные - 1000 оборотов максимум, датчик пока не придумал, мк - атмега8.
Достаточно ли будет для самодельного тахометра такого алгоритма работы:
2 прерывания
первое прерывание INT0 - считывает импульсы с датчика
второе прерывание с частотой 1 раз в секунду перемножает импульсы которые накопились за секунду на INT0 и умножает их на 60, а потом сброс переменной подсчёта импульсов. И так частота обновления каждую секунду?
Вывод на 3 разряда семисегментника.............

Автор:  ЭлектроKOT [ Чт сен 12, 2019 06:48:31 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

Придумаете датчик - будет о чем говорить, пока не о чем. Слишком многое от него зависит.
1000 оборотов - в секунду, в минуту ... в сутки... ?

Автор:  рокки1945 [ Чт сен 12, 2019 07:34:02 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

мне поручили обработку сигнала с датчика и вывод на индикатор...............
Наверное погрешность им не важна - главное чтобы было.......

Автор:  ЭлектроKOT [ Чт сен 12, 2019 08:02:59 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

Прилепите обычный частотомер на логике, не нужно там никаких прерываний.
Против лома нет приема (с)

Автор:  GoldenAndy [ Чт сен 12, 2019 08:09:30 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

ЭлектроKOT, судя по фразе умножает их на 60 - 1000 оборотов в минуту. Точнее 0..999, ибо 7-сегментник 3-разрядный.
Ну и, судя по всему, у ТС задача - сделать на МК. (Судя по всему, у студентов начались лабы по работе с МК) Даже если нет задачи - то сделать на восьмой меге гораздо проще сейчас, нежели ваять комплект счетчиков. Особенно, если нужна динамическая индикация.

рокки1945, Зачем вам возиться с INT0 ?
В меге есть шикарный таймер Т1 с внешним счетным входом и подавлением помех.
Используйте его счетный вход.
При этом в качестве секундного таймера берите Т2, у него есть режим СТС, комбинацией этого режима и предделителя можете получить ваш секундный интервал.
В обработчике прочитали значение счетчика Т1 и обнулили его. Прочитмнное умножиди на 60 и отправили в буфер вывода на дисплей.
Единственное, если ваша лабораторная работа будет воплощаться в железе - тактируйте мегу от кварца, иначе ваш тахометр будет врать.

Динамический вывод на 7сементник можете организовать на прерывании по переполнению от таймера 0.

Приоритет у прерываний таймера Т2 выше, чем у Т0 - поэтому вывод на индикатор не должен влиять на обработку Т2.

Можно вообще не использовать прерывание от Т0, а вывод сделать в основной программе в свободное от прерываний время - в цикле опрашивать флаг переполнения таймера, сбрасывать флаг, выполнять цикл действий по выводу на 7сегментник и опять возвращаться в ожилание флага.

Автор:  ПростоНуб [ Чт сен 12, 2019 08:24:43 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

goldenandy, это если датчик без дребезга. Иначе надо устранять дребезг программно, что никак не сочетается со счетным входом таймера. Или делать аппаратное устранение дребезга.

Автор:  GoldenAndy [ Чт сен 12, 2019 09:19:11 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

ПростоНуб, 1. Какой то антидребезг есть в подавлении помех самим таймером. По сути там чтение 4 раза и мажоритарное голосование.
2. На Int0 разве не надо делать антидребезг ?
3. 1000 об/мин - это 16,66 об/сек. Или 60 мс период.
Если датчик дает сигнал типа меандра, но с дребезгом - получаем полупериод 30 мс. Делаем простейший RC-фильтр с тау около 10 мс. Например 0.1мкФ * 130кОм * 0.7 = 9.1 мс.

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

Но это всё актуально для реального изделия.

А тут никакого ТЗ - просто сделай тахометр. Какой датчик - мы тебе не скажем. Т.е. это похоже не на реальную разработку, а на лабораторку.
Я бы делал на счетном входе меги + RC-цепочка на входе. Может даже с меньшим тау - 3..4 мс.

И сказал - вот прибор - он считает обороты, как вы и заказывали. На вход требует меандр без дребезга.

Добавлено after 40 minutes 26 seconds:
Вот кстати, мега - это процессор. Что мы ему скажем, то он и будет делать.
Можно считать не число оборотов в секунду, а длительность периода между импульсами от таходатчика.
Если стребовать от таходатчика аппаратный антидребезг и сигнал с чистыми фронтами - можно испльзовать вход захвата Т1, а заполнять таймер от тактового генератора.
Обороты придется получать делением. Но это вообще не проблема, за 60 мс мега выполняет 480 тысяч операций (при такте 8 МГц) - на деление хватит с головой. Минус - на низких оборотах перечет может уйти в переполнение таймера. И это надо отдельно обработать. Плюс - на средних оборотах быстрое обновление показаний, более точные значения (в алгоритме ТС показания кратны 60)....

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

Смотрим: 60 сек / 999 об.мин = 60060.06 мкс.
60 сек / 998 об.мин = 60120.24 мкс
Итого минимальная дельта периода = 60.18 мкс. При снижении частоты тахоимпульсов эта дельта будет только расти.

Смотим, что у нас по тактированию может Т1. Принимаем тактовую меги в 8 МГц.
С предделителем 256:
8МГц / 256 = 31250 Гц или период 32 мкс. Вроде бы хорошо.
Каждый импульс 32 мкс. в 60 секундах таких импульсов 1875000.
При 999 оборотах (период 60060.06 мкс) таймер насчитает 60060.06/32 = 1876 импульсов. 1875000/1876 = 999.467 = 999 оборотов.
При 998 оборотах (период 60120.24 мкс) таймер насчитает 60120.24/32 = 1878 импульсов. 1875000/1878 = 998.403 = 998 оборотов.
При этом таймер заполнится за 32мкс * 65536 = 2097152 мкс или около 2,1 сек. Т.е. Минимальная частота вращения должна быть такой, что бы между импульсами таходатчика было меньше 2097 мс - это 29 оборотов/мин. И это очень хороший результат, поскольку прямой пересчет импульсов за секунду дает число рассчитаных оборотов всегда кратное 60.

Т.е. ценой увеличения времени пересчета на низких оборотах до 2 сек и, к сожалению, одной 32-битной операции деления, мы получаем тахометр в интервале 30..999 об/мин с погрешностью 1 об/мин.

Автор:  akl [ Чт сен 12, 2019 10:20:02 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

рокки1945 посмотрите эту старую веточку https://radiokot.ru/forum/viewtopic.php?f=20&t=24703
Тахометр методом измерения периода делается на одном таймере 1.
СпойлерИзображение


Вложения:
tahom2313_4led.jpg [50.84 KiB]
Скачиваний: 509

Автор:  GoldenAndy [ Чт сен 12, 2019 10:35:44 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

akl, так на нём я и предложил решение. Плюс на каком то из таймеров динамическую индикацию запилить.
Единственное, 32битное деление для 8битного МК - тяжелая по времени операция

Автор:  akl [ Чт сен 12, 2019 10:49:07 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

Забыл написать. Включая динамическую индикацию и автопереключение пределов. Да, приходится делить, но главное результат.

Автор:  GoldenAndy [ Чт сен 12, 2019 10:58:43 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

akl, пересчет - прерывания по захвату и переполнению.
Динамическая как ? На прерывании по сравнению ? И смысл всё лепить в один таймер, оставляя второй гулять ?
Если изделие конечное и использование второго таймера не планируется, зачем ломать голову, впихивая в один таймер? Спортивный интерес ?

Автор:  akl [ Чт сен 12, 2019 11:04:52 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

akl, пересчет - прерывания по захвату и переполнению.
Динамическая как ? На прерывании по сравнению?..
Да. В схемах с динамикой все процессы должны быть синхронными.

Автор:  GoldenAndy [ Чт сен 12, 2019 13:04:09 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

akl, а как тогда решается стабильная частота динамической индикации, если коэффициент пересчета таймера зависит от периода тахоимпульсов ?
В приведенном выше примере период сброса таймера Т1 гуляет от 2 сек до 30 мсек при оборотах от 30 до 999 об/мин ?
Чуть более подробно опишите свой алгоритм, как у вас сделан подсчет частоты тахоимпульсов и динамическая индикация на одном таймере ?

Автор:  АлександрЛ [ Чт сен 12, 2019 17:17:06 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

Вот здесь:
http://www.joyta.ru/6176-samyj-prostoj- ... ttiny2313/
схема простейшего частотомера,
СпойлерИзображение

в архиве, в конце страницы, лежат модель в протеусе, прошивка и *.asm файл с комментариями, который, при знании программирования можно спокойно переделать под свои условия..
Проблема в том, что комментарии то ли на польском, то ли на чешском.. В общем- Hz.. :dont_know: но, при желании, понять можно..

Автор:  рокки1945 [ Чт сен 12, 2019 18:19:44 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

так пойдёт
TCCR1A = 0;
TCCR1B = 6;//falling
//TCNT1L=0;
//TCNT1H=0;
DDRB |= ~(1<<5);//на выход
PORTB |= 1<<5 ;//подтяжка
в основе
FCV_V = TCNT1L;
FCV_V1 = TCNT1H;
FCV_SUPER = (FCV_V1 << 8)|FCV_V;

Автор:  GoldenAndy [ Чт сен 12, 2019 20:31:33 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

рокки1945, Эммм.... что это?

Сразу приучите себя не писать магические числа.
TCCR1B = 6;//falling - что такое 6 ?

Запишите хоть вот так
TCCR1B = ( 1 << CS12 ) | (1 << CS11 ); - тогда понятно будет, что вы запускаете таймер в стандартном счетном режиме с источником сигнала - входом Т1 по спадающему фронту.

DDRB |= ~(1<<5);//на выход - это не выход, это вход.

И причем тут порт В, если вход T1 - это порт D, PD5 ?

И зачем так странно вычитывать счетный регистр?
Возьмите 16битную переменную и просто прочитайте в нее TCNT1, компилятор сам сделает последовательность правильного чтения 16-битных регистров таймера.

Автор:  рокки1945 [ Пт сен 13, 2019 04:49:22 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

Да спасибо - переделал
TCCR1A = 0;
TCCR1B = 6;//falling
//TCNT1L=0;
//TCNT1H=0;
DDRD |= ~(1<<5);//на вход
PORTD |= 1<<5 ;//подтяжка
TCCR2 &= 0xf8;
TCCR2 |= 0x01;
OCR2=256-1;
sei();
TIMSK |= (1 << OCIE2);
TCCR2 |= (1 << WGM21);
_ _ _ _ _ _ _ _ _ __
if (FCV_TIME == 31250)
{
FCV_SUPER = TCNT1;
FCV_TIME = 0;
TCNT1 = 0;}

Но не нашёл программный фильтр каким битом выставить....... Придётся от дребезга RC делать

Автор:  zzaj [ Пт сен 13, 2019 06:54:36 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

Есть готовый 7сегментный индикатор с дешифратором и счетчиком внутри. к490ип1 :))

Автор:  GoldenAndy [ Пт сен 13, 2019 09:18:26 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

рокки1945,
Фильтр есть только для входа захвата :(
Timer/Counter 1
Control Register B – TCCR1B
Bit 7 – ICNC1: Input Capture Noise Canceler
Setting this bit (to one) activates the Input Capture Noise Canceler. When the noise canceler is
activated, the input from the Input Capture Pin (ICP1) is filtered. The filter function requires four
successive equal valued samples of the ICP1 pin for changing its output. The Input Capture is
therefore delayed by four Oscillator cycles when the noise canceler is enabled.

Так что действительно, делать RC-цепочку на входе. 100нФ/100..150кОм.

Офф. И еще раз:
TCCR2 &= 0xf8;
TCCR2 |= 0x01;
Без заглядывания в даташит я не могу определить, что вы хотите добиться этими числами.
Плюс если вы захотите переехать на другой МК, где в управляющем регистре биты расположены по другому, вы получите трудно находимую ошибку.
Если это разовая лабораторная работа - то фиг с ним. А если вы планируете работать с микроконтроллерами и дальше - уходите от таких магических цифр. (И это касается не только регистров МК, а и программирования вообще. )

Автор:  ПростоНуб [ Пт сен 13, 2019 09:26:22 ]
Заголовок сообщения:  Re: счётчик импульсов - тахометр

делать RC-цепочку на входе. 100нФ/100..150кОм.

А вот этого я бы не советовал. Затягивание фронтов на цифровых входах ни к чему хорошему не приводят. Тогда уж ставить между ФНЧ и входом МК триггер Шмитта. Например на LM358 или NE555 по выбору.

Страница 1 из 3 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/