Страница 1 из 2

Тахометр+датчик температуры+LCD на Tiny2313

Добавлено: Сб апр 04, 2009 04:55:32
Arik
Всем привет! Посмотрел по всему форуму схемы тахометров, но ни один не устроил!
Мне нужно попроще! Чтоб на дисплей выводилось значение следущего содержания в две строки:
Tемп/цил = 120
Об/мин = 25000

где темп/цил - температура цилиндра
об/мин - обороты двигателя

Подскажите какие компоненты мне могут подойти? LCD и датчики?
Двигатель двухтактный, напряжение бортовой сети 12 вольт. Спасибо!

Добавлено: Сб апр 04, 2009 10:27:43
ibiza11
что вам стоит повторить тот что посложнее?))
1)железа столько же, только программа больше
2)температурный датчик можете не подключать.
3)железо кторое во всех проектах и к вашему подойдет
3.1)определяется внешним видом, может вы не ЖКИ хотите а LED:)
4)со временем сами прошивку измените под себя.
мне больше нечего добавить)

Добавлено: Сб апр 04, 2009 13:07:52
Arik
Меня это не устраивает! Вот могли бы ответить по другому! Например датчик температуры тип марка
и чем снимать импульс с бронепровода?

Добавлено: Сб апр 04, 2009 15:51:28
Pooher
Arik писал(а):...и чем снимать импульс с бронепровода?
:shock: :shock: :shock:
Может лучше с прерывателя?
Через конденсатор+оптрон.
Arik писал(а):датчик температуры тип марка
Я бы использовал DS1820(B20, S20...). Можно термисторы какие нибудь.
Дисплей любой, какой понравится.

Добавлено: Сб апр 04, 2009 15:55:05
GP1
tiny2313 использовать не целесообразно, нет встроенного АЦП, хотя можно организовать программно+внешний резистивный ЦАП.
В качестве датчика вам думаю подойдет К-термопара (подаются там же где мультиметры) с операционником

Добавлено: Вс апр 05, 2009 05:52:26
Arik
Спасибо! А с бронепровода снимать лучше - ибо заодно проверка работы катушки зажигания ведь бывает что на пониженых оборотах работает, а на повышеных проскакивает

Добавлено: Вс апр 05, 2009 20:28:37
shtorm
насчет термодатчиков...ds работает до 150 по цльсию....если у вас воздушное пассивное охлаждение то наверника будит превышать данный предел...

если с бронипровода то можно наматать на провод катушку и снимать с этого например...гдето даже видел такое в виде аналогового тахометра :))

Добавлено: Пн апр 06, 2009 00:24:24
smac
shtorm писал(а): если с бронипровода то можно наматать на провод катушку и снимать с этого например...гдето даже видел такое в виде аналогового тахометра :))
Лучше сделать чуть по-другому. Сделать импровизированный конденсатор вокруг высоковольтного провода - прицепить на него нечто вроде зажима крокодил, только с плоскими губками, т.е. зажим должен обхватывать провод. Получится конденсатор, одна обкладка которого - это наш зажим, а вторая - жила провода. Получится емкостная связь с высоковольтной цепью зажигания, т. е. на конденсаторе будет наблюдаться "уменьшенная копия" импульса зажигания. Естественно емкость такого конденсатора будет маленькой, и сигнал будет в районе единиц вольт (может и меньше). Импульсы с конденсатора нужно подать на вход формирователя (на одном транзисторе) и затем подсчитывать их микроконтроллером.

Добавлено: Ср апр 08, 2009 13:47:28
Arik
Спасибо! Хорошие ответы!
Буду брать другой микроконтроллер и датчик DS
Кстати скажите а как брать показания датчика температуры и выводить их на дисплей? (програмно) Можно примерчик?
И еще вопрос там снимаемые импульсы имеют высокую частоту и если контроллер будет работать от 4мгц, то будет погрешность?

Добавлено: Ср апр 08, 2009 14:05:50
shtorm
4Мгц думаю в полне хватит на погрешность не будит влиять...
выж скажите на каком языке писать собираетесь чтоб пример паказали )))

Добавлено: Ср апр 08, 2009 17:27:21
akl
Arik писал(а):Спасибо! Хорошие ответы!
Буду брать другой микроконтроллер и датчик DS
Кстати скажите а как брать показания датчика температуры и выводить их на дисплей? (програмно) Можно примерчик?
И еще вопрос там снимаемые импульсы имеют высокую частоту и если контроллер будет работать от 4мгц, то будет погрешность?
Здравствуйте.
Может не торопиться со сменой контроллера. Мощности ATtiny2313 вполне хватит.
Предложение
-Тахометрическая часть
Взять за основу схему и программу из этой веточки, выбросив все ненужное
http://radiokot.ru/forum/viewtopic.php?p=193610#193610
-Термометрическая часть
Взять в качестве термодатчиков KTY84 (меньше 50 руб. за пару штук) и, использовать имеющийся аналоговый
компаратор и алгоритм, описанный в slaa038.

Добавлено: Пт апр 10, 2009 12:38:17
Arik
Писать буду на Си наверное мне кажется так проще, но можно и на ассемблере я их одинаково плохо знаю, буду подглядывать в книжки :)
Вот оцените алгоритм пойдет так или нет? Надеюсь поправите меня если не так. Я в этом новичек, но очень хочется научиться.

Код: Выделить всё

вектора прерываний
установка стека
настройка портов и т.д.
инициализация LCD дисплея
Инициализация датчика температуры
метка_А:
1 разрешаем прерывание Т0
2 ждем 1 секунду //это будет в обработчике прерывания
3 запрещаем прерывание Т0
4 копируем значение Т0 в регистрХ
5 умножаем значение регистрХ на 60 и заносим обратно в регистрХ
6 отправляем значение регистраХ на LCD
7 обнуляем значение Т0
8 опрашиваем датчик температуры
9 отправляем температуру на LCD
10 переходим на метку_А

Добавлено: Пт апр 10, 2009 18:46:06
akl
Здравствуйте.
Приведенный Вами алгоритм,начиная со 2-й строчки вызывает сомнения
-за 1 секунду даже мой старенький "Урал 2" 1964 года выпуска без нагрузки с легкостью набирал 5000 об/мин, а Ваш наберет еще больше. При этом индикация останется прежней. ИМХО, неправильно.
-двойное обращение к LCD за цикл измерения, вызывает сомнение. Больше привык к полному циклу измерения, формированию массива выводимой на дисплей информации и полный вывод. Но, это на Ваше усмотрение.
-работа с таймером T0 также вызывает определенные вопросы. Видимо есть "стандартные" процедуры работы при определении скорости вращения. По мне так таймер T1 гораздо более функциональнее. В принципе, для полного решения задачи, можно обойтись только одним таймером T1.

Чтобы разговор был более предметным, думаю Вам желательно нарисовать в распространенном формате (png, gif) принципиальную схему, где нужно отобразить частоту кварцевого резонатора, тип индикатора, тип выбранного термодатчика. Выведите выражение для определения температуры нагрева рубашки цилиндра
из предположения, что при 0 гр.С сопротивление датчика KTY84-130 составляет 500 Ом, а при 200 гр.С 1700 Ом. Выведите выражение для определения скорости вращения с учетом используемого кварцевого резонатора. Выражения не зависят от языка программирования и их все равно нужно будет выводить.

Добавлено: Сб апр 11, 2009 04:38:48
Arik
akl писал(а):Здравствуйте.
Приведенный Вами алгоритм,начиная со 2-й строчки вызывает сомнения
-за 1 секунду даже мой старенький "Урал 2" 1964 года выпуска без нагрузки с легкостью набирал 5000 об/мин, а Ваш наберет еще больше. При этом индикация останется прежней. ИМХО, неправильно.
А как тогда это делают? Температуру пока не трогаем. Как правильно замерить частоту, что нужно и как задействовать? Импульс будет сниматься с емкостной прищепки через усилитель как писали выше и поступать на вывод таймера Т0 или Т1 (и кстати чем Т1 лучше Т0?)
Спасибо!

Добавлено: Сб апр 11, 2009 07:26:23
akl
Здравствуйте.
Полного ответа на вопрос "Как правильно замерить частоту" дать не могу, а вот как быстро и точно можно измерить скорость вращения вала-это можно. В AVR есть замечательный вход ICP (кстати такие входы есть и в других контроллерах MSP, NEC, NXP, PIC) и это не зря. Если на этот вход подавать входные импульсы, то будет происходить аппаратное копирование текущего значения таймера Т1 в специальный регистр ICR и устанавливаться соответствующий флаг. Аналоговый компаратор AVR также имеет такую возможность (это
к вопросу последующего измерения температуры, но это потом).
Далее смотрим схему, временные диаграммы и пользуясь примером приведенным ниже начинаем писать алгоритм

10 инициализация контроллера и периферии
20 очистка содержимого и регистрового счетчика переполнений таймера Т1, очистка счетчика периодов Nx
30 очистка флагов, разрешение прерываний от ICP и переполнения Т1
40 ожидание прерывания от ICP; таймер стоит и прерывание может быть вызвано только от ICP
50 обработка результата S[об/мин]=60*Fo*Nx/nox
60 измерение температуры
70
80
90 вывод на индикатор и переход на 10

100 обработка прерывания ICP
101 старт таймера для счета периодов nox частоты тактирования, установка перехода для последующих
прерываний ICP
102 Инкремент счетчика периодов Nx. Анализ окончания времени измерения по числу переполнений Т1 и, если время измерения прошло стоп таймера, запоминание значения nox. Переход на 50, иначе на 40, но с уже работающим таймером.
110 обработка прерывания переполнения Т1. Инкремент счетчика переполнений, который одновременно является старшей частью nox.
Пример:
"Например:
Объект контроля вращается со скоростью 3210.987 об/мин; импульсы, сгенерированные датчиком поступают на вход микроконтроллера, работающего с тактовой частотой 1.000000МГц. Микроконтроллер обеспечивает выполнение следующих условий:
Тизм=Тх*Nx*K и Тизм=to*nox, где Тизм- принятое время измерения; Тх-период измеряемой скорости; Nx-целое число периодов измеряемой скорости; to-период тактовой частоты микроконтроллера Fo; nox-целое число периодов тактовой частоты микроконтроллера Fo; K-коэффициент преобразования, т.е. число импульсов датчика за 1 оборот. Делаем преобразование
Тх*Nx*K=to*nox

Тх=to*nox/Nx*K или Fx=Fo*Nx*K/nox.
Переходим от частоты к оборотам
S=60*Fx=60*Fo*Nx*K/nox
Для взятого примера:
Принимаем время измерения примерно 0.25 сек.
3210.987/60=53.51645 Гц> 1'000'000мкс/53.51645=18685.843ххх мкс
за время измерения пройдет 250000/18685.843ххх=13.379ххх периодов Nx. Дожидаемся окончания текущего периода Nx=14> 18685.843ххх*14=261601.806ххх мкс и nox=261601.
Подставляем в выражение
S=60*1'000'000*14*1/261601=3210.997 об/мин.
Достоинством данного метода, особенно для любительских условий, является:
-Fo-может меняться в широких пределах. Просто она должна быть известна
-отсутствие жесткого требования выдержки измерительного интервала, кратного единице времени
-легкая реализация на любом микроконтроллере..."

Уфф, устал.

Добавлено: Вт апр 14, 2009 03:50:51
Arik
Что то я запутался - если прерывание длилось 1 секунду, то в счетном регистре таймера будет значение импульсов пришедших за одну секунду так? Почему нельзя это значение умножить на 60? Разве не получится число импульсов в минуту?
Или вы имеете ввиду, что пока выполняется код передачи на дисплей (с тактовой частотой) двигатель в это время наберет больше оборотов и показания будут врать?
По сути это тотже самый частотомер?

Добавлено: Ср апр 15, 2009 13:20:58
bsyomov
Имхо удобнее измерять время одного оборота, т.е. период.
Для этого на первый импульс зпускаем таймер, на каждый следующий считывыем и сбрасываем, перезапускаем. Смотрим значение таймера, пересчитываем в об/мин, выводим. Если таймер переполнен, то вал не вращается (или неправильно выбран таймер или его делитель).
Соответственно таймер лучше использовать 16битный.

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

Считать кол-во импульсов зв секунду некорректно, за 1 сек двигатель может сильно изменить обороты, да и обновление показаний раз в секунду это маловато.

Добавлено: Пт апр 17, 2009 03:28:27
Arik
bsyomov писал(а):Имхо удобнее измерять время одного оборота, т.е. период.
Для этого на первый импульс зпускаем таймер, на каждый следующий считывыем и сбрасываем, перезапускаем. Смотрим значение таймера, пересчитываем в об/мин, выводим. Если таймер переполнен, то вал не вращается (или неправильно выбран таймер или его делитель).
Соответственно таймер лучше использовать 16битный.

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

Считать кол-во импульсов зв секунду некорректно, за 1 сек двигатель может сильно изменить обороты, да и обновление показаний раз в секунду это маловато.
А за время выполнения вышесказаных операций двигатель тоже наберет другие обороты и получится погрешность? Как я понял, чтобы избежать погрешности нужно просчитать циклы выполнения программы и привязать к тактовой частоте контроллера?

Добавлено: Пт апр 17, 2009 07:57:31
ibiza11
мерить надо кол-во эталонных импульсов за период. за это время двигатель не наберет обороты. чем выше обороты, тем короче период, так что все будет соответствовать.
например подаем на счетчик тактовую частоту 100кГц, значит один такт =10 мкс, число в счетчике на момент прихода след. импульса умноженное на 10 мкс, будет периодом.
после несложных преобразований получим формулу:
F(об/мин)=6000000/n, где n-число в счетчике.

Добавлено: Пт апр 17, 2009 09:53:30
shtorm
может мерить период между импульсами и правильно, но если отображать каждое изменение то единицы показаний не возможно будит увидеть они будут очень быстро меняться может быть даже и десятые...я в своем тахометре считал количество импульсов за 0,5сек (*2=1сек) и умножал на извесный множитель в моем случае это 30 (100Гц=3000об/мин)...отображаеться тоже полусекундным интервалом. На железе на холостых оборотах прыгают даже сотые доли(работа двигателя очень даже не стабильна) при повышении оборотов гладко...