реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Работа с датчиком скорости авто (AVR)
Athlon128
сообщение Apr 28 2006, 16:41
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Хочу сделать цифровой спидометр для машины, добавить всяких функций вроде измерения времени разгона до 100 или времени прохождения 402 м, учесть погрешность, например, при смене колёс с R13 на R14 biggrin.gif biggrin.gif ну и т.д. и вообще хочу иметь постоянно работающий перед глазами цифровой спидометр.
На начальном этапе стоит задача измерения частоты импульсов с датчика скорости (таз 21099i). Датчик выдаёт 6004 импульса на 1 км пути, т.е. 6 импульсов на 1 м. Частота импульсов прямопропорциональна скорости авто.

Начал делать на Кодевижене. Алгоритм такой: в main стартует таймер0, контроллер постоянно обновляет lcd дисплей из переменной. По прерыванию с ноги: останавливаю таймер0, ссчитываю его значение в переменную, обнуляю его, стартую таймер.

ATmega8515, 4МГц, в качестве ДС At90S2313, который формирует прямоугольные импульсы длиной 10мс, время между импульсами 10мс.

По началу использовал 8-битный таймер, при делителе частоты таймера 1024, в счётчике было значение 0-1, при делителе 1 в счётчике 69-70, хотя должно быть несколько тысяч. Я так понимаю он несколько раз успевает переполниться?

Нашёл в нете исходник на C маршрутного компьютера, который умеет мерять скорость с ДС. В нём используется 16-битный таймер1:
Код
void IRQ_Speedometer_Lable(void) interrupt 0
{
  // Считываем значение интервала между метками скорости в числе 0.5 мксек.
  union LONG_INT
    {
      unsigned long int Long;
      unsigned char Byte[4];
    };
  union LONG_INT Interval;
  unsigned int Tmp;

  TR1=0;
  Interval.Byte[3]=TL1; Interval.Byte[2]=TH1;
  Interval.Byte[1]=Speed_Interval; Interval.Byte[0]=0;
  TH1=TL1=0;
  Speed_Interval=0;
  TR1=1;

  // Вычисляем текущую скорость движения.
  Tmp=((16666666/Interval.Long)*72)/100;
  Speed=Tmp/10;
  if((Tmp%10) >= 5) Speed++;

  // Смотрим, разрешен ли подсчет параметров маршрута.
  if((Trip_Params.State&0x01) != 0)
    {
      // Инкрементируем счетчик пройденного расстояния.
      Trip_Params.Passed_Distance++;
    }

  return;
}

Так и не понял что за переменная speed_interval, ну это не столь важно.

Попробовал переделать свою прогу под таймер1, но никогда им не пользовался, напортачил, в таймере всегда 0. Посмотрите плиз:
Код
#include <mega8515.h>
#include <stdio.h>
#include <delay.h>

// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x15;PORTC
#endasm
#include <lcd.h>

char lcd_buffer[33];

// Процедуры
void init(void);
void imp(void);        
unsigned char k;

  union LONG_INT
    {
      unsigned long int Long;
      unsigned char Byte[4];
    }Interval;

unsigned int Tmp;

interrupt [2] comp(void){imp();}


//---------------------------------------- Инициализация -----------------------------------------------

void init(void)
{lcd_init(16);

TCCR1B=0x81;

GICR|=0x40;
MCUCR=0x00;
EMCUCR=0x00;
GIFR=0x40;

DDRD=0x00;
PORTD=0xff;
lcd_init(16);

#asm("sei")
k=0;
}

//------------------------------------- Процедура вызываемая по Int0 ------------------------------------------

void imp(void)
{  unsigned char Speed_Interval;
Speed_Interval=0; // ???

TCCR1B=0x00;
  Interval.Byte[3]=TCNT1L; Interval.Byte[2]=TCNT1H;
  Interval.Byte[1]=Speed_Interval; Interval.Byte[0]=0;
  TCNT1H=TCNT1L=0;
  Speed_Interval=0;
TCCR1B=0x81;

  // Вычисляем текущую скорость движения.
  Tmp=((16666666/Interval.Long)*72)/100;
  k=Tmp/10;
  if((Tmp%10) >= 5) k++;

   sprintf(lcd_buffer,"Скорость: %d",k);
  return;
}

//----------------------------------- Главная процедура -----------------------------------------------
void main(void)
{
init();
#pragma ruslcd+
while (1)
{

lcd_clear();

lcd_puts(lcd_buffer);
delay_ms(100);
}
#pragma ruslcd-
}


Буду благодарен любой помощи wink.gif
Go to the top of the page
 
+Quote Post
MMP
сообщение Apr 29 2006, 04:22
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 43
Регистрация: 7-07-05
Из: г.Магнитогорск
Пользователь №: 6 618



Если проблема только в таймере, то советую инициализацию таймеров делать через ImageCraft, там это намного удобнее.
Есть там такая примочка >Tools>Application builder

Я не силен в Кодевижн, но зачем два lcd_init(16) ? и где само прерывание по ноге?
Go to the top of the page
 
+Quote Post
Athlon128
сообщение Apr 29 2006, 08:30
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Попробовал использовать 8-битный таймер0, поставив прерывание по переполнению и считать эти переполнения, умножать на 256 и прибавлять значение из TCNT0. Всё по прежнему. Кол-во переполнений всегда = 0. При частоте таймера 3,9 кГц TCNT0 колеблется между 0 и 1, если частота таймера 4 мГц, то TCNT0=69-70.
Эмуляцию датчика скорости проверил осциллографом, всё как и писал выше: 10мс длительность импульса и 10мс время между импульсами.

Мой код в аттаче.
На дисплее в итоге
0+0*256=0
1+0*256=1

help.gif
Прикрепленные файлы
Прикрепленный файл  111.txt ( 1.22 килобайт ) Кол-во скачиваний: 134
 
Go to the top of the page
 
+Quote Post
Proton
сообщение Apr 29 2006, 10:15
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 3-08-05
Из: Новосибирск
Пользователь №: 7 334



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


--------------------
Всяк хорошая мысля к нам приходит опосля.
Go to the top of the page
 
+Quote Post
Athlon128
сообщение Apr 29 2006, 10:28
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Цитата(Proton @ Apr 29 2006, 16:15) *
У тебя условие внешнего прерывания настроено на низкий уровень и вполне возможно прерывания возникают слишком часто. Попробуй назначить внешнее прерывание по спадающему или нарастающему фронту.


Охренеть, заработало!! Спасибо!
Таймер насчитывает 75, хотя по расчётам должно быть 78, но это приемлемо

ЗЫ: Про согласование уровней с датчиком можете что нибудь подсказать?

Сообщение отредактировал Athlon128 - Apr 29 2006, 10:31
Go to the top of the page
 
+Quote Post
Athlon128
сообщение Apr 29 2006, 11:15
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Убрал формулу вычисления скорости из периода, когда таймер отключен. Теперь таймер отсчитывает 78 как и положено по рассчётам a14.gif cheers.gif cheers.gif cheers.gif

В схеме бортового компьютера такое подключение датчика:


Что скажете? Собрать такую же или поменять что-то?
Go to the top of the page
 
+Quote Post
Athlon128
сообщение Apr 30 2006, 13:53
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Убрал КР1533ТЛ2 и диоды, транзистор взял BC547. Проверил на машине. Всё работает, показания совпадают со спидометром счётмашевского бортового компа. В общем я доволен.
Go to the top of the page
 
+Quote Post
sseett
сообщение May 2 2006, 00:04
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 165
Регистрация: 14-01-05
Из: РФ Приморский край (рег.25)
Пользователь №: 1 939



Убрал КР1533ТЛ2 и диоды
Цитата
Убрал КР1533ТЛ2 и диоды

ТШ и так встроен во вход AVR. А вот на диодах я бы советовал не экономить. Борт-сеть однако! Импульсы в сотни вольт вполне вероятны. Да и керамический кондерчик (для ослабления ВЧ) между входом (AVR) и общим проводом не повредит.
Удачи!
Go to the top of the page
 
+Quote Post
Athlon128
сообщение May 2 2006, 00:20
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



ок, принято, спасибо
Go to the top of the page
 
+Quote Post
Karl
сообщение May 2 2006, 06:24
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Тоже баловался года 4 назад. Сделал МК, который измерял скорость, пройденный путь, расход топлива. Расход тоже импульсами можно мерять. Бортовой компьютер выдает на один из выводов сколько - то импульсов на литр. Точно не помню уже сколько.
Go to the top of the page
 
+Quote Post
BVU
сообщение May 2 2006, 06:32
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(Karl @ May 2 2006, 10:24) *
...
Расход тоже импульсами можно мерять. Бортовой компьютер выдает на один из выводов сколько - то импульсов на литр. Точно не помню уже сколько.

А вот с этого места поподробней пожалуйста с описанием 'ентого' датчика по расходу топлива!


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
HBB
сообщение May 2 2006, 07:42
Сообщение #12





Группа: Новичок
Сообщений: 2
Регистрация: 30-08-05
Пользователь №: 8 076



Датчик расхода топлива на карбюраторных машинах выдает 16000 импульсов на 1 литр, на инжекторах не знаю. Выход датчика по моему OK
Go to the top of the page
 
+Quote Post
kalinka16
сообщение May 2 2006, 07:49
Сообщение #13


Участник
*

Группа: Новичок
Сообщений: 42
Регистрация: 30-06-05
Пользователь №: 6 414



Цитата(HBB @ May 2 2006, 10:42) *
Датчик расхода топлива на карбюраторных машинах выдает 16000 импульсов на 1 литр, на инжекторах не знаю. Выход датчика по моему OK



А где его там искать??? (ВАЗ 08,09,099)????????
Go to the top of the page
 
+Quote Post
HBB
сообщение May 2 2006, 07:54
Сообщение #14





Группа: Новичок
Сообщений: 2
Регистрация: 30-08-05
Пользователь №: 8 076



Искать в магазине, продаются обычно где маршрутниками торгуют, цена вопроса проимерно 400р.
Если найдешь - дефицит однако. smile.gif
Go to the top of the page
 
+Quote Post
m16
сообщение May 2 2006, 08:25
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 242
Регистрация: 27-01-05
Пользователь №: 2 225



Цитата(kalinka16 @ May 2 2006, 11:49) *
А где его там искать??? (ВАЗ 08,09,099)????????



Предназначен для учета топлива потребляемого двигателем (объемом до 2,8 л.) и передачи информации в виде импульсов на маршрутный компьютер.
делают здесь http://www.schetmash.ru/prod/avto~prod~now.html
Go to the top of the page
 
+Quote Post
Karl
сообщение May 3 2006, 11:30
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Про карбюраторные ничем помочь не могу - работал с инжекторными. В инжекторном автомобиле импульсы ввыдаются с блока управления.

Описание выводов контроллера Январь 5.х.х.
Номер вывода Описание
1 Выход. Зажигание 1-4 цилиндра. МЗ/1-4
.
.
.
54 Выход. Сигнал расхода топлива. СРТ
55 Вход/Выход К-линия диагностики. К-ЛИНИЯ

Кажется 16000 импульсов на литр. Точно не помню.

К сожалению, не сохранилось никакой документации в электронном виде. Но всю информацию брал из интренета + книжка по системе впрыска.
Удачи smile.gif
Go to the top of the page
 
+Quote Post
Athlon128
сообщение May 3 2006, 16:49
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 18-04-06
Пользователь №: 16 238



Черт, у меня уже таймеров не осталось, таймер0 для измерения скорости, таймер1 - счётчик времени для замера времени разгона 0-100 км/ч и 402 м. glare.gif

Ну раз такая тема с датчиком расхода топлива blink.gif , придётся освободить таймер1, все равно поиграюсь с этими замерами времени разгона и надоест smile.gif

ЗЫ: хотя 16000 импульсов на литр - довольно большая частота получается, может без таймера попробовать обойтись, как считаете?
И ещё по поводу тахометра, никто не в курсе где и какие импульсы брать?
Или уж проще по k-line связываться, вся ж эта инфа у контроллера естьsmile.gif.....

Сообщение отредактировал Athlon128 - May 3 2006, 16:57
Go to the top of the page
 
+Quote Post
Karl
сообщение May 4 2006, 03:24
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(Athlon128 @ May 3 2006, 22:49) *
Черт, у меня уже таймеров не осталось, таймер0 для измерения скорости, таймер1 - счётчик времени для замера времени разгона 0-100 км/ч и 402 м. glare.gif

Ну раз такая тема с датчиком расхода топлива blink.gif , придётся освободить таймер1, все равно поиграюсь с этими замерами времени разгона и надоест smile.gif

ЗЫ: хотя 16000 импульсов на литр - довольно большая частота получается, может без таймера попробовать обойтись, как считаете?
И ещё по поводу тахометра, никто не в курсе где и какие импульсы брать?
Или уж проще по k-line связываться, вся ж эта инфа у контроллера естьsmile.gif.....



По поводу тахометра - сигнал с датчика положения коленвала можно брать, наверное. Но сам я не пробовал. Еще с блока управления на тахометр какой - то сигнал идет... но о нем тоже сказать ничего не могу.
По связи по k-line. Этим я тоже баловался. У меня есть документ Keyword Protokol 2000 - спецификация канала связи между контроллерами системы управления двигателем Motronic 1.5.4 или Январь-5 и диагностическим оборудованием. Этот документ сохранился, к сожалению, только в печатном виде. Может найдете в интернет.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение May 4 2006, 11:48
Сообщение #19


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



На тахометр приборной доски идет специальный провод от контроллера двигателя. Импульсы равны оборотам.

А вообще, не занимайтесь ерундой. На инжекторную зубилу давно придуман Comfort X15. За то время что ты тратишь можно на 10 таких заработать.
Go to the top of the page
 
+Quote Post
VladimirZ
сообщение May 5 2006, 14:38
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 8-02-05
Из: Харьков
Пользователь №: 2 496



Протокол обмена KWP2000 можно найти на www.almisoft.ru/doc.htm. Там же и схемку контроллера можно поискать и посмотреть например интерфейс ДС.
При обмене опо K-Line всё же таймер понадобится таймауты и др. Измерение расхода по длительности импульса впрыска большой точности не даст, как и использование датчика расхода там в описании погрешность от 7-ми до 30-ти %.
Go to the top of the page
 
+Quote Post
Karl
сообщение May 6 2006, 03:50
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(VladimirZ @ May 5 2006, 20:38) *
Протокол обмена KWP2000 можно найти на www.almisoft.ru/doc.htm. Там же и схемку контроллера можно поискать и посмотреть например интерфейс ДС.
При обмене опо K-Line всё же таймер понадобится таймауты и др. Измерение расхода по длительности импульса впрыска большой точности не даст, как и использование датчика расхода там в описании погрешность от 7-ми до 30-ти %.


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

Цитата(VladislavS @ May 4 2006, 17:48) *
А вообще, не занимайтесь ерундой. На инжекторную зубилу давно придуман Comfort X15. За то время что ты тратишь можно на 10 таких заработать.


Согласен, преобрести МК проблем нет. Но Цель тех, кто этим занимается, вовсе не сэкономить денек на покупку. Сейчас бы я за эту работу не взялся. А когда только начинал программировать, было очень интересно и преобрел много опыта. Еще узнал, что спалить БУД очень сложно smile.gif
Go to the top of the page
 
+Quote Post
VladislavS
сообщение May 6 2006, 05:39
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Машина не лучшее место для обучения программированию. Ведь от этого зависит ваша и окружающих жизнь. Подумайте над этим.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 21:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01581 секунд с 7
ELECTRONIX ©2004-2016