Что бы еще такого сделать?... Предлагайте! Обсудим все!!!
Ответить

счётчик импульсов - тахометр

Чт сен 12, 2019 05:50:48

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 07:48:31

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 08:34:02

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 09:02:59

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 09:09:30

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

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

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

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

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 09:24:43

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 10:19:11

ПростоНуб, 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 об/мин.

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 11:20:02

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 11:35:44

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 11:49:07

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 11:58:43

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 12:04:52

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 14:04:09

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 18:17:06

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

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

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 19:19:44

так пойдёт
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;

Re: счётчик импульсов - тахометр

Чт сен 12, 2019 21:31:33

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

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

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

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

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

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

Re: счётчик импульсов - тахометр

Пт сен 13, 2019 05:49:22

Да спасибо - переделал
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 делать

Re: счётчик импульсов - тахометр

Пт сен 13, 2019 07:54:36

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

Re: счётчик импульсов - тахометр

Пт сен 13, 2019 10:18:26

рокки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;
Без заглядывания в даташит я не могу определить, что вы хотите добиться этими числами.
Плюс если вы захотите переехать на другой МК, где в управляющем регистре биты расположены по другому, вы получите трудно находимую ошибку.
Если это разовая лабораторная работа - то фиг с ним. А если вы планируете работать с микроконтроллерами и дальше - уходите от таких магических цифр. (И это касается не только регистров МК, а и программирования вообще. )

Re: счётчик импульсов - тахометр

Пт сен 13, 2019 10:26:22

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

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