Тахометр на атмега8 своими руками

Добавил пользователь Алексей Ф.
Обновлено: 15.09.2024

Здравствуйте друзья. Здесь у меня в голове созрел следующий проект. Хочу сделать тахометр для ДВС. Поэтому прошу вашей помощи с прошивкой. проект должен быть дешевый и компактным. Контроллер из семейства Atmel ( Attiny13, 2313, ATmega48), можно также использовать Arduino. В качестве дисплей использовать LCD 1602, или сегментный индикатор. Также можно добавить еще несколько опций, измерение температуры двигателя, заряда аккумуляторов. Кто может помочь с проектом?

Прогуляйтесь по форуму, тем пять наверно было с тахометрами. От найденного посмотрите что надо изменить.

Думаю сделать все как здесь , только оставить тахометр, вольтметер, термометр.
1.Тахометр на 5 значений
2. вольтметер на 20 В
3. Термометр на датчике 18В20
4. Дисплей 1602
Использовать кварц. Есть несколько ATmega48 в корпусе QFP, думаю использовать их. Также можно что-то собрать на Arduino , но не знаю насколько это оправдано?

Можно сначала написать прошивку для ATTINY2313, a на потом при необходимости переделать на ATmega48?

Нет, так дело не пойдет, давайте сразу определяться. Потом придется половину прошивки переписывать.

По этой разработке еще есть тема на форуме. Там в т.ч. и мои варианты прошивки, посмотрите.

Тогда делаем на attiny2313. почитал форум все версии достаточно сложные. А нам лишь нужно тахометр вольтметер и термометр и все ,ничего лишнего. Если делать на дисплее 1602 то думаю тахомет будет в верхней строке, вольтметер в нижней слева, термометр в нижней справа.Обновление показателей термометра и вольтметра 1с. для обновления тахометра не знаю какой алгоритм использовать, так что показатели были читаемые и точные

Это я имел в виду что максимальные обороты 10000 об/мин

---
Думаю сейчас сделать приблизительную схему и развести плату, скажите а дисплей можно подключить с помощью 6 портов?

Я сам нарисую приблизительную схему, посмотрите, может что-то изменим, а потом будете разводить плату.
Samodelkin пишет:

Проект (не схема) и прошивка для тестирования во вложении.
Для удобства разводки платы некоторые выводы МК можно переназначить. Но сначала покажите мне.
В проекте не показан входной формирователь импульсов.
Прошивка не финальная, пока попробуйте.

Пробовал прошить ATmega48, ничего не получилось( возможно микроконтролел залочен. Теперь думаю купить ATmega 8 , они почему-то дешевле чем ATmega48 . Можно будет переделать прошивку под ATmega 8 в корпусе TQFP32 ?
Прошивку запустил в протеусе, на вид все хорошо.
При возможности разместите показания тахометра по центру экрана.
На счет входящего буфера. Хочу сделать чтобы прибор был универсальный и его можно было разместить на любой технике. думаю снимать сигнал с высоковольтного провода. намотать на высоковольтный провод несколько витков обычного и усилить сигнал. когда так делал стробоскап для настройки зажигания.
Схема была такова.

Рассматриваемый бесконтактный тахометр – это компактное устройство на микроконтроллере ATMega48 производства компании Atmel, позволяющее измерять высокие скорости вращения бесконтактным способом. Для измерения используется ИК сенсор (оптопара, ИК светодиод и ИК фотодиод в одном корпусе). Вывод данных осуществляется на двухстрочный символьный ЖК дисплей на базе контроллера HD44780.

Бесконтактный тахометр на AVR

Принцип работы

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

Принцип действия ИК оптопары в бесконтактном тахометре

Благодаря этой наклейке, каждый оборот вала вызывает появление отраженного импульса ИК излучения. Используемый сенсор производства компании Vishay Semiconductor имеет маркировку TCND-5000.

ИК Оптопара TCND-5000 VISHAY SEMICONDUCTOR

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

Таким образом, используя оптопару мы можем подсчитать время полного оборота вала, а далее, зная время (обозначим это время T в секундах), мы можем вычислит количество оборотов в минуту, используя простое выражение 60/T.

Получение данных от сенсора

Для снижения стоимости устройства и сложности сборки, а также для повышения гибкости системы, мы непосредственно подключим ИК сенсор к микроконтроллеру и программно реализуем всю обработку получаемого сигнала. Сразу стоит заметить, что это не так просто, так как получаемый с ИК фотодиода сигнал содержит шумы, а внешнее освещение постоянно оказывает на него влияние. Таким образом, проблема состоит в том, чтобы разработать устройство с автоматической адаптацией к внешней освещенности и расстоянию до объекта измерения.

На рисунке ниже изображена диаграмма аналогового сигнала от ИК сенсора (фотодиода)


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


Принципиальная схема устройства

Схемотехническое решение очень простое и компактное (благодаря использованию миниатюрного сенсора), не содержит дорогостоящих компонентов. Питание устройства осуществляется от трех батарей типа AAA.

Как вы, наверное, заметили, отсутствует потенциометр регулировки контрастности дисплея (что также позволяет уменьшить размер устройства). Это возможно благодаря программной реализации алгоритма автоматической подстройки контрастности в зависимости от уровня напряжения питания с применением ШИМ и фильтра низких частот на элементах R3, R4 и C2. Пользователи могут ознакомиться с текстом алгоритма в исходном коде ПО микроконтроллера во второй части статьи.

Разъем JP1 предназначен для внутрисхемного программирования микроконтроллера. Разъем JP2 предназначен для подключения дополнительного пользовательского датчика.

Список примененных компонентов

Обозначение
в схеме
Наименование, номинал
IC1 Микроконтроллер ATmega48
Q1, Q2 Транзистор BCW66G
C1, C2 10 нФ
C4, C5 33 пФ
X1 Кварцевый резонатор 20 МГц
R1, R2, R7 470 Ом
R3 1 кОм
R4 1.5 кОм
R5 1 МОм
R6 110 Ом
R8 70 Ом
LED3 Светодиод
IR1 Оптопара TCND-5000
B1 Кнопка
B2 Выключатель питания
JP1 Разъем внутрисхемного программирования
JP2 Разъем расширения

Демонстрация работы бесконтактного тахометра на микроконтроллере AVR

Во второй части статьи рассмотрим конструкцию прибора и основные моменты в программном обеспечении микроконтроллера, включая аналого-цифровое преобразование и организацию обмена данными с ЖК дисплеем.

Здравствуйте! Нашел дома мегу8 и решил сделать тахометр и спидометр для скутера с отображением на LCD.Набросал программку и сделал модель в протеусе.Датчик с колеса подключается к ICP,с коленвала к INT1. Но столкнулся с проблемой:при работе 2 датчиков одновременно,спидометр выдает не корректные данные через небольшие промежутки времени.(т.е сначала данные правильные, а потом выскакивает число в1.5-2 раза больше, потом снова все норм).Тахометр выдает вообще рандомные числа.

unsigned char OverflowC,OverflowC1;
unsigned long Edge1,Edge2;
unsigned long x,freq;

char buffer[20];
int i=1,i_int1=1;

void welcome(void)
lcd_gotoxy(4,0);
lcd_putsf("Digital");
lcd_gotoxy(7,1);
lcd_putsf("CDI ");
>

interrupt[9] void over(void)
OverflowC1++;
OverflowC++;
>

interrupt[6] void cap_icp(void)

Edge1=ICR1;
i=0;
//TCNT1=0;
OverflowC=0;
>
else
i=1;
Edge2=ICR1;
x=(unsigned long)Edge2-
(unsigned long)Edge1+
(unsigned long)OverflowC*0x10000;
freq=1000000*1.5*3.6/x;
sprintf(buffer,"%d",x);
lcd_gotoxy(4,2);
lcd_puts(buffer);
sprintf(buffer,"%u Km/h",freq);
lcd_gotoxy(4,3);
lcd_puts(buffer);
delay_ms(30);
>
>
interrupt[3] void int1_capture(void)
<
unsigned long T,f,Time1,Time2;

if(i_int1!=0)
Time1=TCNT1;
i_int1=0;
>
else
Time2=TCNT1;
i_int1=1;
T=(unsigned long)Time2-(unsigned long)Time1+(unsigned long)OverflowC*0x10000;
f=(unsigned long)10000000/T;
sprintf(buffer,"%u",f);
lcd_gotoxy(12,3);
lcd_puts(buffer);
>
>


Реально ли вообще организовать два устройства на одном контроллере?

Данное устройство представляет собой неплохой тахометр, предел его измерений составляет 100 - 9990 об/мин. Точность измерения - ± 3 об/мин. Но для лучшего восприятия данные округляются. Данный прибор стоит у меня на авто - Таврия. Также устанавливалась на Chevrolet Cavalier, ВАЗ-2109, мотоцикл ЯВА-350 12-ти вольтовый, скутер Honda Lead 90.

Присутствуют две входных цепи:

  • вывод 6 (PD2) - вход прерывания INT0. Этот вход используется для измерения количества оборотов двигателя.
  • вывод 11 (PD6). Этот вход используется для уменьшения яркости индикаторов при включении габаритов на авто.

Печатная плата и вид собранного устройства:

Собранный тахометр на микроконтроллере

Рекомендую применять красный индикатор, так как его значительно лучше видно на солнце. Показания стают нечитаемыми только при прямом попадании яркого солнца. Этот эффект можно уменьшить или даже совсем от него избавиться если поставить индикатор за красный светофильтр, но у меня такого к сожалению не нашлось.

FUSES выставлены в проекте, но если кто-то шьёт не из CodeVisionAVR, то повторю их тут:

В проекте в 17-й строке есть следующее определение:

Для советских автомобилей и авто с распределительной системой зажигания этот параметр будет 2. Для систем зажигания с двумя катушками (как в ВАЗ-2110) - 1. На мотоцикле и мопеде (2-х тактная система зажигания) этот параметр равен 4. Устройство работает уже более двух лет без каких либо проблем на моей машине, да и остальные не жалуются.

Читайте также: