Перейти к содержанию
    

Atmega8 - контроль по тахометру

Машина ВАЗ 2110. Делаю автозапуск на atmega8. При написании кода на СИ зашел в тупик, а именно при написании алгоритма контроля работы двигателя по тахометру. Сигнал буду брать с приборной панели с контакта, приходящий от ЭБУ.

Счетчик 16-битный, тактовая частота контроллера 4МГц, предделитель 64(может можно взять другой). Алгоритм такой: Стартером начинает крутить двигатель и как только двигатель завелся обороты поднимаются и нужно отпустить стартер. Предлагаю, при первом получении импульса с ЭБУ на тахометр, запускать счетчик и считать до тех пор, пока он не насчитает некое число(которое соответствует 400об/мин) между импульсами. Как только он насчитывает больше - отпускать стартер и переходить к контролю работы двигателя. Контроль заключается в следующем: Счетчик считает между импульсами и сравнивает полученное значение с условием( если например кто то нажал на педаль газа и обороты повысились выше 2000 об/мин). Если условие выполнилось - машина глохнет.

Подскажите как это организовать грамотно? Я только начинаю осваивать это все, без помощи трудновато написать самому

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

запоминаешь счётчик между импульсами холостого хода прогретого двигателя. При запуске если счётчик меньше запомненного - отпускаешь стартер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

запоминаешь счётчик между импульсами холостого хода прогретого двигателя. При запуске если счётчик меньше запомненного - отпускаешь стартер.

 

Это я понимаю, а как это будет выглядеть в коде?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подскажите как это организовать грамотно? Я только начинаю осваивать это все, без помощи трудновато написать самому

 

а классически не катит ?!

starter_on();

for( int tout_s = 100; tout_s; tout_s-- )
{
   measure_start();
   wait_1sec();
   int impulses = measure_stop();
   if( impulses > 2000 )
      break;
}
starter_off();

void measure_start()
{
  timer_clear();
  timer_start();
}

int measure_stop()
{
  timer_stop();
  return timer_value();
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня возникли следующие вопросы/замечания к Вашему проекту:

1. Как вы будете обходить иммобилайзер/сигнализацию?

2. Необходимо предусмотреть ограничение на время работы стартера (не более 10 сек), а также время простоя между попытками (более 30 сек)

3. Насколько я помню, для заводки а/м не достаточно крутить ТОЛЬКО стартером, минимум необходимо включить бензонасос

4. Я бы еще контролировал напряжение на АКБ, а то можно добиться полного разряда

5. Ну я надеюсь вы предусмотрели развязку между мегой и стартером

6. То что Вы не хотите купить сигналку с автозапуском и смонтировать ее на а/м, я понимаю - хотите сами разобраться..........

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Отвечу по всем вопросам)

1. Иммобилайзера нету, как обойти сигналку я уже сделал.

2. все временные задержки тоже в коде будут

3. Включаю зажигание и кручу стартер(как будто ключом завожу)

4. Вот это можно, чтобы автозапуск не сработал если на АКБ менее 10,5-11В

5. Развязка на 30А реле

6. Сигналку я купил с обратной связью в том году с мыслю что автозапуск нафиг не нужен, а сейчас что то загорелся желанием)

Изменено пользователем IgorKossak
бездумное цитирование

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хорошо.

Я посоветую сделать так.

1. тахометр завести на пин внешнего прерывания, где сделать простой инкремент счетчика

2. включить таймер в режиме СТС примерно на 250/500 мсек

3. в основной программе, если подан сигнал включается реле стартера (напр выходной пин=1)

4. в прерывании таймера постоянно отслеживается показания тахометра (счетчик) и если он выше ЗНАЧЕНИЯ, то выключается реле стартера (соот выходной пин=0). после счетчик обнуляется

5. 400 об/мин - это мало, лучше контролировать 700..800 об/мин

Это процедура самого запуска

 

Есть еще основной алгоритм работы (упрощенный):

1. сидеть на связи и контролировать напряжение АКБ, температуру в салоне и на улице

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

3. включить главное реле и включить фары примерно на 10 сек

4. выключить фары и через примерно 10 сек пройти к процедуре запуска ДВС

5. При не успешной процедуре запуска, выключить стартер через 10 сек и подождать 30 сек, после - повторить запуск. Общее количество попыток - не более ТРЕХ

6. При успешном запуске - контролировать условия останова - температура ДВС, температура салона, время работы ДВС

7. При останове ДВС - включить сигналку

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все что Вы описали это я и так учитываю..

Я делаю процедуру выхода из машины(поднят ручник, выключено зажигание-двигатель продолжает работу, ввыхожу из машины и ставлю на сигналку - двигатель глохнет, разрешение на автозапуск есть)

по части автозапуска я делаю так: по доп каналу сигнализации(открытие багажника) поступает сигнал на МК, замыкаю концевик багажника(как будто он открыт, тем самым отключается датчик удара), обхожу все блокировки, включаю зажигание и моргаю дальним, включаю стартер - машина завотидся..

Мне нужно только разработать контроль работы двигателя и контроль запуска. С таймерами и счетчиками пока только на Вы, поэтому трудности))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а классически не катит ?!


 

Скажите пожалуйста этот код Вы сами написали или выдернули откуда то? мне бы полный вариант и чтоб понятней было, тяжело разобраться самому

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Предлагаю, при первом получении импульса с ЭБУ на тахометр, запускать счетчик и считать до тех пор, пока он не насчитает некое число(которое соответствует 400об/мин) между импульсами.

Все правильно, считать интервал между импульсами.

Как только он насчитывает больше - отпускать стартер и переходить к контролю работы двигателя.

Когда насчитает меньше - тогда отпускать стартер. Больше частота - меньше период.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда насчитает меньше - тогда отпускать стартер. Больше частота - меньше период.

 

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

Не могли бы Вы помочь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

megajohn уже помог, более чем :)

Можно, например, использовать Т1 с прерыванием в режиме захвата по внешнему фронту :laughing:

P.S. Кстати, всю эту систему надо будет еще отключать при ручном включении зажигания. alexeyv примерно все правильно посоветовал, только контролировать нейтраль и ручник надо ДО постановки на автозапуск.

Изменено пользователем Abell

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Abell,если бы этот код был более менее понятен, то вопросов не было бы)

Система будет отключаться автоматически,это предусмотрел уже

Изменено пользователем Jipper

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Jipper, конфигурацию таймера Т1 уже сделали?

Теперь разрешаем прерывания по переполнению и захвату.

Пишем функции обработки прерываний.

Если интервал между импульсами недопустимо велик - таймер переполняется, вызывается обработка прерывания по переполнению, это состояние ошибки.

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

Если результат больше - сохраняет регистр захвата в глобальную переменную.

Если результат намного меньше - двигатель завелся, стартер можно отпустить.

Как-то так, один из вариантов решения, если я все правильно понял и нигде не ошибся :laughing:

Повторю - проверять состояние нейтрали, закрытых дверей и ручника надо ДО постановки на автозапуск, это тоже та еще задачка ;)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...