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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Сб апр 04, 2009 04:12:23

Сообщение Arik »

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

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

Подскажите какие компоненты мне могут подойти? LCD и датчики?
Двигатель двухтактный, напряжение бортовой сети 12 вольт. Спасибо!
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

что вам стоит повторить тот что посложнее?))
1)железа столько же, только программа больше
2)температурный датчик можете не подключать.
3)железо кторое во всех проектах и к вашему подойдет
3.1)определяется внешним видом, может вы не ЖКИ хотите а LED:)
4)со временем сами прошивку измените под себя.
мне больше нечего добавить)
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Сб апр 04, 2009 04:12:23

Сообщение Arik »

Меня это не устраивает! Вот могли бы ответить по другому! Например датчик температуры тип марка
и чем снимать импульс с бронепровода?
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Arik писал(а):...и чем снимать импульс с бронепровода?
:shock: :shock: :shock:
Может лучше с прерывателя?
Через конденсатор+оптрон.
Arik писал(а):датчик температуры тип марка
Я бы использовал DS1820(B20, S20...). Можно термисторы какие нибудь.
Дисплей любой, какой понравится.
Научить нельзя, можно научиться. Пифагор.
Вставь недостающие буквы в слово *у*ня. Если у тебя получилось слово кухня, значит ты интеллигентный человек.
Реклама
Эиком - электронные компоненты и радиодетали
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

tiny2313 использовать не целесообразно, нет встроенного АЦП, хотя можно организовать программно+внешний резистивный ЦАП.
В качестве датчика вам думаю подойдет К-термопара (подаются там же где мультиметры) с операционником
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Сб апр 04, 2009 04:12:23

Сообщение Arik »

Спасибо! А с бронепровода снимать лучше - ибо заодно проверка работы катушки зажигания ведь бывает что на пониженых оборотах работает, а на повышеных проскакивает
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 185
Зарегистрирован: Чт янв 22, 2009 14:03:25

Сообщение shtorm »

насчет термодатчиков...ds работает до 150 по цльсию....если у вас воздушное пассивное охлаждение то наверника будит превышать данный предел...

если с бронипровода то можно наматать на провод катушку и снимать с этого например...гдето даже видел такое в виде аналогового тахометра :))
Контактная информация:
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

shtorm писал(а): если с бронипровода то можно наматать на провод катушку и снимать с этого например...гдето даже видел такое в виде аналогового тахометра :))
Лучше сделать чуть по-другому. Сделать импровизированный конденсатор вокруг высоковольтного провода - прицепить на него нечто вроде зажима крокодил, только с плоскими губками, т.е. зажим должен обхватывать провод. Получится конденсатор, одна обкладка которого - это наш зажим, а вторая - жила провода. Получится емкостная связь с высоковольтной цепью зажигания, т. е. на конденсаторе будет наблюдаться "уменьшенная копия" импульса зажигания. Естественно емкость такого конденсатора будет маленькой, и сигнал будет в районе единиц вольт (может и меньше). Импульсы с конденсатора нужно подать на вход формирователя (на одном транзисторе) и затем подсчитывать их микроконтроллером.
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Сб апр 04, 2009 04:12:23

Сообщение Arik »

Спасибо! Хорошие ответы!
Буду брать другой микроконтроллер и датчик DS
Кстати скажите а как брать показания датчика температуры и выводить их на дисплей? (програмно) Можно примерчик?
И еще вопрос там снимаемые импульсы имеют высокую частоту и если контроллер будет работать от 4мгц, то будет погрешность?
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 185
Зарегистрирован: Чт янв 22, 2009 14:03:25

Сообщение shtorm »

4Мгц думаю в полне хватит на погрешность не будит влиять...
выж скажите на каком языке писать собираетесь чтоб пример паказали )))
Контактная информация:
akl
Друг Кота
Сообщения: 4466
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

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

Сообщение Arik »

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

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

вектора прерываний
установка стека
настройка портов и т.д.
инициализация LCD дисплея
Инициализация датчика температуры
метка_А:
1 разрешаем прерывание Т0
2 ждем 1 секунду //это будет в обработчике прерывания
3 запрещаем прерывание Т0
4 копируем значение Т0 в регистрХ
5 умножаем значение регистрХ на 60 и заносим обратно в регистрХ
6 отправляем значение регистраХ на LCD
7 обнуляем значение Т0
8 опрашиваем датчик температуры
9 отправляем температуру на LCD
10 переходим на метку_А
akl
Друг Кота
Сообщения: 4466
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

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

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

Сообщение Arik »

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

Сообщение 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-может меняться в широких пределах. Просто она должна быть известна
-отсутствие жесткого требования выдержки измерительного интервала, кратного единице времени
-легкая реализация на любом микроконтроллере..."

Уфф, устал.
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Сб апр 04, 2009 04:12:23

Сообщение Arik »

Что то я запутался - если прерывание длилось 1 секунду, то в счетном регистре таймера будет значение импульсов пришедших за одну секунду так? Почему нельзя это значение умножить на 60? Разве не получится число импульсов в минуту?
Или вы имеете ввиду, что пока выполняется код передачи на дисплей (с тактовой частотой) двигатель в это время наберет больше оборотов и показания будут врать?
По сути это тотже самый частотомер?
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 179
Зарегистрирован: Вт ноя 04, 2008 11:15:49
Откуда: Санкт-Петербург

Сообщение bsyomov »

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

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

Считать кол-во импульсов зв секунду некорректно, за 1 сек двигатель может сильно изменить обороты, да и обновление показаний раз в секунду это маловато.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 137
Зарегистрирован: Сб апр 04, 2009 04:12:23

Сообщение Arik »

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

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

Считать кол-во импульсов зв секунду некорректно, за 1 сек двигатель может сильно изменить обороты, да и обновление показаний раз в секунду это маловато.
А за время выполнения вышесказаных операций двигатель тоже наберет другие обороты и получится погрешность? Как я понял, чтобы избежать погрешности нужно просчитать циклы выполнения программы и привязать к тактовой частоте контроллера?
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

мерить надо кол-во эталонных импульсов за период. за это время двигатель не наберет обороты. чем выше обороты, тем короче период, так что все будет соответствовать.
например подаем на счетчик тактовую частоту 100кГц, значит один такт =10 мкс, число в счетчике на момент прихода след. импульса умноженное на 10 мкс, будет периодом.
после несложных преобразований получим формулу:
F(об/мин)=6000000/n, где n-число в счетчике.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 185
Зарегистрирован: Чт янв 22, 2009 14:03:25

Сообщение shtorm »

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

Вернуться в «Микроконтроллеры и ПЛИС»