Например TDA7294

Форум РадиоКот • Просмотр темы - Измерение скорости автомобиля по штатному датчику
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср июл 30, 2025 18:38:27

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 100 ]    , , 3, ,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Пн сен 04, 2023 22:34:49 
Друг Кота
Аватар пользователя

Карма: 17
Рейтинг сообщений: 457
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 5199
Откуда: Воронеж
Рейтинг сообщения: 0
Эдак можно и FRAM микросхему приделать. Протокол совместимый с обычной EEPROM, но можно и проще. Ресурс и скорость почти как у оперативной памяти. Если писать каждую секунду, то примерно на возраст вселенной хватит.

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Пн сен 04, 2023 23:54:53 
Держит паяльник хвостом
Аватар пользователя

Карма: 1
Рейтинг сообщений: 153
Зарегистрирован: Ср окт 04, 2017 20:47:40
Сообщений: 937
Рейтинг сообщения: 0
Цитата:
АлександрЛ
посчитать количество импульсов с датчика за определённое время, а время счёта подобрать так, чтобы количество посчитанных за это время импульсов получалось равным скорости?
Коротко и ясно!
Блин и разве не видно, что в данном предложении представлена вся правильная логика нужного счёта.
Если время получиться очень малым (часто для вывода), есть смысл усреднять (ADD и ROL) счёт (по вашему усмотрению) за N отсчётов. Да и вообще - всегда для показа иметь хотя бы слабо интегрированное значение параметра, чтоб цифирь не мелькала. Фсё!

И зачем чего-то там гадать на "кофейной" сколько на км, метр, .см., мм? :)
Цитата:
Martian
Надо сосчитать, проехав километр
И для программы бортовика, для любителей ставить не "родные" колёсЬя, есть смысл в программу вводить спец режим авто-коррекции именно сосчитав имп/км, ибо -
Цитата:
MartianНемного разницы в диаметре колёс - наверняка даст разное число.
Разницей всего в несколько имп. можно пренебречь ибо не принципиально, т.к. километровые столбы тоже не до мм устанавливают. :)
В EEPROM я писал нужные значения из оперативной памяти ТОЛЬКО при выкл. зажигания, там же хранились и стартовые (заводские :) ) параметры для возврата к исходному состоянию. Ничего там за ХХ лет не убилось.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 20:24:14 
Открыл глаза

Карма: -3
Рейтинг сообщений: 0
Зарегистрирован: Ср янв 27, 2010 21:53:52
Сообщений: 57
Рейтинг сообщения: 0
Вроде нашел причину. Не успевает считать пришедшие импульсы во внешнем прерывании. Не вывозит столько задач этот камень к сожалению. Попробую конечно по захвату как-то сделать, но думаю, что не вывезет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 20:40:20 
Друг Кота

Карма: 68
Рейтинг сообщений: 1961
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Этот "камень" может гораздо больше. Если 4000 импульсов на километр, то при скорости 300 км/ч какая частота импульсов? 350 герц? И не успевает? :shock:


Последний раз редактировалось Martian Вт сен 05, 2023 20:44:43, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 20:42:25 
Друг Кота
Аватар пользователя

Карма: 17
Рейтинг сообщений: 457
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 5199
Откуда: Воронеж
Рейтинг сообщения: 0
Эээээ.... Чо? Как он может не успевать, но при этом насчитать импульсов больше? Не сходится. Гляньте осциллографом что там происходит, скорее всего дребезг какой-нибудь.

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:04:54 
Открыл глаза

Карма: -3
Рейтинг сообщений: 0
Зарегистрирован: Ср янв 27, 2010 21:53:52
Сообщений: 57
Рейтинг сообщения: 0
Помимо внешних прерываний учтите прерывания по усарту для поддержания связи, по RX и по TX. Учтите прерывания по таймеру T0 каждую миллисекунду (аналог millis arduino) чтобы уйти от Delay. Учтите запрет прерываний на обмене данными с датчиком температуры DS - не помню, 1320 вроде. И нормуль так получится.
Теперь как я узнал:
1)путем несложных математических расчетов, мы знаем, что скорость 100 км/ч= 27,7777 м/c.
2)Знаем, что на 1 км пройденного пути приходится 4073 импульса.
3) На 1 метр приходится 4,073 импульса.
4) Для скорости 100 км/ч считаем частоту следования импульсов 27,7 м/c*4,073 импульса на метр и получаем 112,8 Гц.

Затем я взял генератор прямоугольных импульсов, выставил на нем 113 Гц, пошел в машину и подкинул его вместо датчика скорости. И спидометр(на автомобиле, штатный показал мне 105 км/ч.
Затем я пошел домой, и подключил этот генератор к своему БК, и он мне показал 25 км/ч.
Вот так вот я и узнал)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:07:01 
Друг Кота

Карма: 68
Рейтинг сообщений: 1961
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12867
Рейтинг сообщения: 0
Ну, стенд правильный, а вот с программой что-то не то... со всем перечисленным можно ещё в спящий режим загнать микроконтроллер, чтоб в простое электричество не жрал ;)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:10:57 
Открыл глаза

Карма: -3
Рейтинг сообщений: 0
Зарегистрирован: Ср янв 27, 2010 21:53:52
Сообщений: 57
Рейтинг сообщения: 0
А потом я вывел на экран значение счетчика, который считает импульсы во внешнем прерывании (количество за 1 сек) при частоте 113 Гц и получил значение 28-30. Что все и объясняет.

Добавлено after 1 minute 44 seconds:
можно ещё в спящий режим загнать микроконтроллер, ;)

Он у меня спит вместе с дисплеем в глубоком самом шатдауне))) Я просто об этом не рассказал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:17:12 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1637
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Не упомянули МК, напр ATmega328:

VectorNo. 1 -> INT0 External Interrupt Request 0.
VectorNo. 19, 20, 21 -> USART
VectorNo. 15, 16, 17 -> TIMER0

То, что считаете причиной, таковым не является.


Последний раз редактировалось veso74 Вт сен 05, 2023 21:20:50, всего редактировалось 2 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:19:27 
Открыл глаза

Карма: -3
Рейтинг сообщений: 0
Зарегистрирован: Ср янв 27, 2010 21:53:52
Сообщений: 57
Рейтинг сообщения: 0
Да, кстати, преобразователь импульсный по питанию. К7805-500R3. Трехлапый. Ток холостого потребления всего 0.5 mA. До 36В входного, 500 mA нагрузка. Рекомендую.

Добавлено after 1 minute 17 seconds:
То, что считаете причиной, таковым не является.

Можете привести доводы?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:20:31 
Друг Кота
Аватар пользователя

Карма: 17
Рейтинг сообщений: 457
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 5199
Откуда: Воронеж
Рейтинг сообщения: 0
Как вариант, можно в целевом прерывании моргать диодиком. Хотя бы понятно будет как оно срабатывает.

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:21:41 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1637
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Прочитайте о прерываниях и их приоритетах. Это интересно.
--
Цитата:
... преобразователь импульсный по питанию К7805-500R3

Тогда не удивляйтесь показаниям. Попробуйте разместить импульсные преобразователи там, где они нужны, а не везде.


Последний раз редактировалось veso74 Вт сен 05, 2023 21:26:37, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:30:42 
Открыл глаза

Карма: -3
Рейтинг сообщений: 0
Зарегистрирован: Ср янв 27, 2010 21:53:52
Сообщений: 57
Рейтинг сообщения: 0
Прочитайте о прерываниях и их приоритетах.

Так я читал. Если выполняется одно, и возникло другое, то пока первое не закончится, втрое не прервет первое. Независимо от приоритета Это как бы я знаю точно.

Добавлено after 4 minutes 47 seconds:
[quote
Попробуйте разместить импульсные преобразователи там, где они нужны, а не везде.

Он на своем месте. И работает очень неплохо. И не создает проблем. От генератора импульсов все четко, ничего не дергается и стабильно. Или вы думаете, что имульсный источник питания в 4 раза занижает показания? А на остальное он никак не воздействует?)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:31:48 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1637
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Устройство ваше, вы его проектируете. Мы полагаем, даем идеи и надеемся сократить время на обнаружение неточности в работе. (+транслейт)
Я не видел имп.источника питания, который не мешал бы в измерениям. В первом приближении: да, но это зависит от установленного уровня.


Последний раз редактировалось veso74 Вт сен 05, 2023 21:37:16, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:36:14 
Открыл глаза

Карма: -3
Рейтинг сообщений: 0
Зарегистрирован: Ср янв 27, 2010 21:53:52
Сообщений: 57
Рейтинг сообщения: 0
Ну я как бы и отписал, в чем проблема кроется. Просто вы не можете поверить в то, что прерывания могут профукивать приходящие импульсы. Это же не пентиум 4.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:38:16 
Говорящий с текстолитом

Карма: 25
Рейтинг сообщений: 450
Зарегистрирован: Сб май 05, 2012 20:24:52
Сообщений: 1637
Откуда: KN34PC, Болгария
Рейтинг сообщения: 0
Измените начин. С помощью этого МК коллеги измеряют (частотомером например) до Fclk/2.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:46:00 
Открыл глаза

Карма: -3
Рейтинг сообщений: 0
Зарегистрирован: Ср янв 27, 2010 21:53:52
Сообщений: 57
Рейтинг сообщения: 0
С помощью этого МК коллеги измеряют (частотомером например) до Fclk/2.

Абсолютно с вами согласен. Но там-то устройство заточено на только измерение частоты и вывод показаний. Но когда вам нужно помимо всего этого метаться каждый раз к ЭБУ и отвечать на каждый посланный им бит подтверждением, и не терять связь, то тут как бы уже проблема есть.

Добавлено after 2 minutes 21 second:
Там нельзя покурить, почесать яйки, а потом такой: " Ну-ка дружок, что там у нас с температурой?" Нет, там нон-стоп все идет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 21:56:19 
Друг Кота
Аватар пользователя

Карма: 17
Рейтинг сообщений: 457
Зарегистрирован: Ср ноя 11, 2009 17:19:30
Сообщений: 5199
Откуда: Воронеж
Рейтинг сообщения: 0
Причём сам ЭБУ мотора можно сделать на меге16. Есть такие проекты. ДВС крутить задачка посерьёзнее будет, чем температурку узнать и 122 герца посчитать, не так ли? Всё влезет в мегу8 и по процессорному времени и по объёму кода. Главное не сдаваться.

_________________
"Привет!" - соврал он.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 22:04:45 
Модератор
Аватар пользователя

Карма: 153
Рейтинг сообщений: 2917
Зарегистрирован: Сб авг 14, 2010 15:05:51
Сообщений: 18741
Откуда: г. Озерск, Челябинская обл.
Рейтинг сообщения: 0
Медали: 1
Лучший человек Форума 2017 (1)
a_b_r_a, тебе уже посоветовали забыть о float, чтобы он не расходовал процессорное время, и работать с целыми числами.
стандартное правило - в прерываниях делать необходимый минимум, а основную работу делать в основном цикле. и уж тем более, в прерывании не делать вычисления с использованием "флота".
пусть по прерыванию только инкрементируется счетчик импульсов, а потом 1 раз в секунду в основном цикле один раз вычислить скорость.
по датчику температуры (DS18B20) - не нужно запрещать прерывания на весь цикл обмена с датчиком.
нужно в начале каждого слота времени запретить.
при чтении - через примерно 14 мкс прочитать пин датчика и разрешить прерывания. а на сколько растянется слот за счет работы любого прерывания - по фигу.
при записи - после выдачи бита на пин можно сразу же разрешить прерывания. а на сколько растянется слот за счет работы любого прерывания - по фигу.
а по таймеру T0 1 мс - зачем тебе так часто? и что конкретно (как много) делается в прерывании по таймеру T0?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Измерение скорости автомобиля по штатному датчику
СообщениеДобавлено: Вт сен 05, 2023 22:11:50 
Открыл глаза

Карма: -3
Рейтинг сообщений: 0
Зарегистрирован: Ср янв 27, 2010 21:53:52
Сообщений: 57
Рейтинг сообщения: 0
Код:
#include "ds18b20.h"
volatile uint32_t last_time;
uint8_t st=0;

//=========================
//Определение датчика на шине
 uint8_t  dt_test_device(void)
{
   uint8_t stektemp=SREG; // сохранение значения стека
   cli(); // запрещаем прерывания
   uint8_t dt;
   DDRTEMP |= 1<< BITTEMP;
   PORTTEMP &= ~ (1<<BITTEMP); // Притягиваем к нулю шину
   _delay_us(485); // Задержка на минимум 480 мкС
   sei();
   DDRTEMP &= ~ (1<<BITTEMP); // Отпускаем шину
   _delay_us(65);  //Задержка на минимум 60 мкС
if ((PINTEMP & (1<<BITTEMP))==0 ) // Проверяем, ответит ли устройство
{
   dt=1; // Устройство ответило
}
else dt=0; // Устройства нет
   SREG=stektemp; // Вернем значение стека
   _delay_us(420); //
   sei();
   return dt;      
}

//=========================
// Функция чтения бита с датчика
uint8_t dt_readbit(void)
{
   uint8_t stektemp=SREG; // сохранение значения стека
   cli(); // запрещаем прерывания
   uint8_t bt; // Переменная хранения бита
   DDRTEMP |= 1<< BITTEMP;
   PORTTEMP &= ~ (1<<BITTEMP); // Притягиваем к нулю шину
   _delay_us(2);
   DDRTEMP &= ~ (1<<BITTEMP); // Отпускаем шину
   _delay_us(13);
   bt=(PINTEMP & (1<<BITTEMP))>>BITTEMP; // Читаем бит
    _delay_us(45);
   SREG=stektemp; // Вернем значение стека
   sei();
   return bt;   
}

//========================
// Функция чтения байта с датчика
uint8_t dt_readbyte(void)
{
   uint8_t c=0;
   uint8_t i;
   for(i=0;i<8;i++)
   c|=dt_readbit()<<i; // Читаем бит
   return c;
}
//=========================
// Функция записи бита
void dt_sendbit(uint8_t bt)
{
   uint8_t stektemp=SREG; // сохранение значения стека
   cli(); // запрещаем прерывания
   DDRTEMP |= 1<< BITTEMP;
   PORTTEMP &= ~ (1<<BITTEMP); // Притягиваем к нулю шину
   _delay_us(2);
   if(bt)
   DDRTEMP &= ~ (1<<BITTEMP); // Отпускаем шину
   _delay_us(65);
   DDRTEMP &= ~ (1<<BITTEMP); // Отпускаем шину
   SREG=stektemp; // Вернем значение стека
   sei();
}
//=========================
// Функция записи байта в датчик
void dt_sendbyte(uint8_t bt)
{
   uint8_t i;
   for(i=0;i<8;i++)
   {
      if ((bt & (1<<i))==1<<i)
         dt_sendbit(1); // Передаем 1
      else
      dt_sendbit(0); // Передаем 0
   }
   
}
//==========================

uint16_t dt_check(void)
{
   uint8_t bt; // переменная для считывания байта
    
    if (!st) // Начало первой фазы измерения
    {
   
      if (dt_test_device()==1// Если устройство нашлось
      {
         
         dt_sendbyte(NO_ID); // Пропускаем идентификацию
         dt_sendbyte(T_CONVERT);// Измеряем температуру
         st=1; // Установим флаг окончания первой фазы измерения
         last_time=millis;
      }
   }
   // Вторая фаза измерения
      if (millis-last_time>750) // Проверяем, прошло ли 750 мС. В 12 битном режиме преобразование 750 мС
      {
         last_time=millis;
         dt_test_device();
         dt_sendbyte(NO_ID);
         dt_sendbyte(READ_DATA); //Даем команду на чтение данных
         bt=dt_readbyte(); // Читаем младший бит
         ttt=dt_readbyte();
         ttt=(ttt<<8)|bt; // Сдвигаем старший байт влево, на его место пишем младший байт
         st=0; // Готовимся к новому измерению
      }
   
   
      else asm("nop");
      
   return ttt; // Возвращаем измеренную температуру
}


//========================
// Преобразование температуры в единицы
uint8_t converttemp(uint16_t tt)
{
   uint16_t b=0;
   uint8_t t;
   b=tt;
   b=b>>11; // Оставляем 5 старших знаковых бит
   if (b) // Если хотя бы один из этих бит равен 1, то температура отрицательная
   {   
     v=1; // Установим флаг отрицательной температуры
    t=((~tt)+1)>>4; // Проинвертируем побитно и прибавим 1 для преобразования
   }
   else
   {
      v=0; // Температура положительная
      t=tt>>4; // отсекаем часть младших битов. Оставляем только единицы градусов.
   }
   
   return t;
   
}


Добавлено after 1 minute 49 seconds:
Блин, не знаю, как спойлер сделать. 1 мсек это типа функции millis arduino. Чтобы заменить delay


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 100 ]    , , 3, ,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y