Помогите с разработкой устройства тахометр+вольтметр+таймер

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
motormons
Родился
Сообщения: 7
Зарегистрирован: Вт окт 09, 2007 04:13:53

Сообщение motormons »

драсте для начала!

я вот тоже третью уже неделю изобретаю этот же велосипед.

Делаю компьютер для скутера (мопед) со следующими возможностями:
-измерение оборотов
-измерение температуры масла
-измерение скорости
-измерение уровня топлива

ну и еще в процессе добавлю др функции, главное с этими разобраться.

С электротехникой я на Вы с МК также, но потихоньку начал знакомиться. С МК (я использую ATMEGA168) разобрался быстро, благо книги хорошие попались. Программировать я могу, ибо студент МатФака, два семестра учил Яву, до этого другие языки. Но это так, вступление.

Я в своем проекте (громкое слово!) использую помимо вышеназванного МК, еще 16х2 LCD дисплей, ну и кучку др. деталек, как резисторы, диоды, транзисторы и пр. Впоследствии в устройстве будет стоять дисплей от сотового (Nokia 3310 или Siemens A55), с обоими разобрался, подключал к Контроллеру, проблем нет.

Хотелбы сначала дать пару советов автору:
программировать лучше на С (для новичка во всяком случае, так ИМХО проще, сама программа получается удобочитаемой и короткой, хотя я с асмом дел много не имел, так что пардон, коли неправ)

в CVAVR есть замечательная функция при создании проекта CodeWisardAvr - большинство настроек задаешь галочками, выбором меню и т.д., есть возможность выбора LCD, там и распиновка уже написана будет сразу, и т.д.

нормальная книга: Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров. МК-Пресс, Киев, 2006, в инете есть.
Там в примерах уже и тахометр простенький есть.

Что уже реализовано:
программная часть на 80 процентов. В принципе за вечер можно дописать до 100, с этим проблем нет. Температура, напряжение, уровень топлива - не проблема.
А вот с тахометром я намучался.

Реализация такая: запускаем 16 битный счетчик T/C1. Разрешаем прерывания по захвату и переполнению. При переполнении просто увеличиваем счетчик переполнений, он нам будет нужен для вычисления времени, прошедшего между прерываниями по захвату.

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


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

// Timer 1 input capture interrupt service routine
interrupt [TIM1_CAPT] void timer1_capt_isr(void)
{


  unsigned long CurrentTime,T;
  //тут вычисляем колво тактов с прошлого прерывания (T-колво тактов с прошлого сигнала от датчика холла)
  CurrentTime=((unsigned long int)256*(unsigned long int)ICR1H)+(unsigned long int)ICR1L;
 
  if(overflow==0) T=CurrentTime-PreviousTime;
  else T=0xFFFF*overflow-CurrentTime+PreviousTime;
  overflow=0;
  PreviousTime=CurrentTime;
     
 
}


потом все это дело пересчитываем в обороты (в зависимости от частоты счетчика) и выводим на дисплей. Ну конечно делаем там усреднение, и т.д., чтобы показания сильно не плавали.

Тестировал дома: за неимением генератора, просто подключал выход T/C1 к ATTINY2313, в котором делал вывод сигнала с одной ноги через определенные промежутки, опять же с использованием таймера. Вроде работает.
Тестировал на мопеде:(вот тут и проблема) до 2500 об/мин показывает нормально, выше - не хочет.
вывод с коммутатора подсоединял через резистор к транзистору, который работал как ключ.

В электротехнике как я уже говорил, не силен. Думаю, что проблема в том, что импульсы с коммутатора идут слишком плотно и МК уже не может их как следует друг от друга отделить или же причина в "дребезге контактов", хотя там никаких контактов нет, импульс идет с катушечного датчика.
Смотрел схемы для авто (http://telesys.ru/electronics/projects/proj104/main.pdf у меня также как здесь, только нет конденсаторов и диода на входе с катушки. Может быть в этом дело?)

Сейчас буду делать формирователь импульсов по фронту сигнала на дифференцирующих RC цепях (вроде правильно написал!?), посмотрим, как с ним будет работать (детальки заказал, думаю послезавтра будут, как придут - протестирую)

Поэтому Господа Электронщики, прошу вашей помощи. А именно: как подать импульс с датчика на ногу МК. Верны ли мои догадки?

Вот технические данные: макс. напряжение с датчика 2,5В , макс. обороты двигла: 10000 об/мин

ЗЫ: по поводу темы тахометра перерыл весь русскоязычний и немецкоязычный интернет, нашел несколько описаний, если надо, могу дать ссылки.
gonzales06, предлагаю объедениться.
Последний раз редактировалось motormons Вт окт 09, 2007 11:05:18, всего редактировалось 1 раз.
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Как вариант: при повышении оборотов до определенного значения переходить на более высокую частоту таймера. Это при условии, что обработчик прерывания по длительности меньше периода следования импульсов на максимальных оборотах.
Оптимизм х (Опыт + Знания) = const
motormons
Родился
Сообщения: 7
Зарегистрирован: Вт окт 09, 2007 04:13:53

Сообщение motormons »

нет, проблема не в том, что МК не успевает обработать. как уже говорил, частота менее 200 герц. проблема во входном тракте, то есть в обработке сигнала с датчика и подаче его на ногу МК. подавал частоту примерно 400 Гц (с др. МК), все нормально отбражает.
в программной части я уверен. интрересует исключительно аппаратная часть - входной тракт, или формирователь импульсов (как там правильно). вот в чем вопрос - как ограничить/изменить/отфильтровать?
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

motormons писал(а):как ограничить/изменить/отфильтровать?


Если датчик холла как на ВАЗ2108 то вход подтянуть к + питания резистором 4.7 ком со входа наверно резистор 1 ком и стабилитрон на 4.3 - 4.7 вольт с маленьким конденсатором 1000 пФ параллельно и помтом резистор 4.7 ком к ноге МК.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Сообщение Aheir »

Понятно. Можно, как Вы и собирались, использовать RC-цепочки, можно использовать триггер, можно здесь подсмотреть мысли какие-нибудь:
http://lib.qrz.ru/node/5523
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

motormons писал(а):импульс идет с датчика Холла.


Обычно это просто ОК - коллектор транзистора. Просто транзисторный ключ замыкающий выход на землю. Типовая подтяжка по книгам по ремонту - 2.2 кОм на 12 вольт питания.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
motormons
Родился
Сообщения: 7
Зарегистрирован: Вт окт 09, 2007 04:13:53

Сообщение motormons »

именно так и было сделано, только подтягивающий резистор на 10к.
как и говорил - до 35-40 Гц без проблем, выше - не хочет. При симуляции процесс удовлетворительный. В реале - не работает.

Осциллографа к сожалению нету, так бы может быть все былобы ясно.

PS я допустил одну ошибку: сигнал идет не с датчика Холла, а с катушечного датчика. Возможно это имеет значение.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

motormons писал(а):именно так и было сделано, только подтягивающий резистор на 10к.
как и говорил - до 35-40 Гц без проблем, выше - не хочет.


ПАФФФТАРЯЮ :

Типовая подтяжка по книгам по ремонту - 2.2 кОм на 12 вольт питания.

Вместо осцила можно использовать звукозаписывающие устройства и звуковую карту ПК.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
motormons
Родился
Сообщения: 7
Зарегистрирован: Вт окт 09, 2007 04:13:53

Сообщение motormons »

tych писал(а):
motormons писал(а):именно так и было сделано, только подтягивающий резистор на 10к.
как и говорил - до 35-40 Гц без проблем, выше - не хочет.


ПАФФФТАРЯЮ :

Типовая подтяжка по книгам по ремонту - 2.2 кОм на 12 вольт питания.

Вместо осцила можно использовать звукозаписывающие устройства и звуковую карту ПК.


Про какие "книги по ремонту" идет речь? Да, возможно вы не заметили, что произошла ошибка - сигнал идет НЕ с датчика Холла, а с катушечного.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

motormons писал(а):возможно вы не заметили, что произошла ошибка - сигнал идет НЕ с датчика Холла, а с катушечного.


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

С катушки резистор 75 ком потом стабилитрон на землю как выше писал с шунтирующимИ его: конденсатором 330 пФ и резстором 10 ком и со стабил. резистор 10 ком на ножку МК. Желательно через 74hc14 - у него гистерезис больше чем у AVR входа.

Можно к стабилитрону подключится двумя диодами типа 4148 или сборкой диодной bav99 bav199.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Вот нарисовал схемку ввода сигнала с первичной обмотки катушки зажигания в МК.

На входном резисторе импульсы напряжения до 400 вольт случаются - желательно его составить из двух резисторов последовательно.
Вложения
zazhig.jpg
(21.57 КБ) 517 скачиваний
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
motormons
Родился
Сообщения: 7
Зарегистрирован: Вт окт 09, 2007 04:13:53

Сообщение motormons »

большое спасибо
поеду за Z-диодами и буду собирать схему.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Спасибо скажете когда (если!) работать будет. Это ж просто придумка не теститрованая.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
gonzales06
Встал на лапы
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург
Контактная информация:

Сообщение gonzales06 »

Объединится готов, но по образованию я медик, и языков не изучал, в электронике разбираюсь не очень.
Пока научился выводить на ЖК слова.
Сейчас думаю как сделать таймер который отсчитывал минуты и выводил их на ЖК.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

gonzales06 писал(а):как сделать таймер который отсчитывал минуты и выводил их на ЖК.


В компиляторе CVAVR есть подходящий пример в папке
C:\CVAVR\examples\AVR134

скачать компилятор можно под кнопкой "www" - всего 2.2 Мб.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
gonzales06
Встал на лапы
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург
Контактная информация:

Сообщение gonzales06 »

Задача первая решена, сделан таймер который отсчитывает секуды, только время работы двигателя неудобно измерять в секундах я сделал в минутах и все вывожу на ЖК WH1602 с подсветкой только не разобрался как ее включать, есть 2-а вывода А и К.



/*****************************************************
ТАЙМЕР
Выводит минуты на ЖК


Chip type : ATmega8L
Program type : Application
Clock frequency : 8,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/


#include <mega8>

// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x12 ;PORTD
#endasm
#include <lcd>
#include<stdio>
char lll=0; //Переменная секунды
char ttt=0; //Переменная минуты
char buffer [33];
// Timer 1 overflow interrupt service routine
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1H=0xE1;
TCNT1L=0x7B;//отсчет таймера от 57723 для переполнения каждую секунду
//1024/8000000=0,000125
//1/0,000125=7812
//65536-7812=57723
lll++;
lcd_init(16); // вывод переменной на жк с помощью функции sprintf
lcd_gotoxy(0,0);
lcd_puts(buffer);
sprintf(buffer, "%3dmin",ttt);
if (lll==60) //если секунд протикало 60, то сбрасываем секунды , прибавляем минуты.
{
lll=0;
ttt++;
};
}
void main(void)
{
TCCR1A=0x00;
TCCR1B=0b00000101;//предделитель на 1024
TIMSK=0x04; //по переполнение таймера 1
#asm("sei")
//вывод переменной lll
TIFR=0;//сброс флага переполнения 1-го таймера
while (1);
}
Аватара пользователя
Паятель
Модератор
Сообщения: 3174
Зарегистрирован: Пт июл 21, 2006 03:08:05
Откуда: Пенза

Сообщение Паятель »

А - "+", К - "-". :)
Если долго мучиться, что-нибудь... сломается.
Аватара пользователя
gonzales06
Встал на лапы
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург
Контактная информация:

Сообщение gonzales06 »

Cпасибо, поключил все работает, толька сильно нагревается ЖК.
soomtaw
Первый раз сказал Мяу!
Сообщения: 23
Зарегистрирован: Чт окт 11, 2007 14:49:01

Сообщение soomtaw »

если греется жк - подайте питание (+5В) на подсветку (вывод "А") через резистор 39-56 ом в зависимости от желаемой яркости. иногда в жк индикаторах на заводе вместо токограничительного резистора ставят перемычку :( - с таким подключением подсветка долго не живет...
Аватара пользователя
gonzales06
Встал на лапы
Сообщения: 87
Зарегистрирован: Сб сен 01, 2007 18:32:42
Откуда: Санкт-Петербург
Контактная информация:

Сообщение gonzales06 »

Зыдраствуйте влрой деньмучаюсь с тахометром, таймер работает а тахометр выводит не понятный дольшие цифры.

sprintf(buffer, "%06u rpm",T); вресмя
sprintf(buffer, "%06u rpm",60/T);-кол-во оборотов в минуту.

Должно быть по идеи при выводе кол-ва оборотов формула 60/Т это в минуту, но при этом он вывдит 0. ели выводить Т выводит 65400 ит т.д. Не знаю что делать, два дня мучаюсь.
сигнал подаю от другого МК через светадиод ровно 2-а раза в секунду.
Поставил на ЖК резитор на 100 ОМ теперь негреется.
Вложения
тахометр+таймер.asm
(36.76 КБ) 456 скачиваний
Закрыто

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