Jipper 0 2 марта, 2015 Опубликовано 2 марта, 2015 · Жалоба Машина ВАЗ 2110. Делаю автозапуск на atmega8. При написании кода на СИ зашел в тупик, а именно при написании алгоритма контроля работы двигателя по тахометру. Сигнал буду брать с приборной панели с контакта, приходящий от ЭБУ. Счетчик 16-битный, тактовая частота контроллера 4МГц, предделитель 64(может можно взять другой). Алгоритм такой: Стартером начинает крутить двигатель и как только двигатель завелся обороты поднимаются и нужно отпустить стартер. Предлагаю, при первом получении импульса с ЭБУ на тахометр, запускать счетчик и считать до тех пор, пока он не насчитает некое число(которое соответствует 400об/мин) между импульсами. Как только он насчитывает больше - отпускать стартер и переходить к контролю работы двигателя. Контроль заключается в следующем: Счетчик считает между импульсами и сравнивает полученное значение с условием( если например кто то нажал на педаль газа и обороты повысились выше 2000 об/мин). Если условие выполнилось - машина глохнет. Подскажите как это организовать грамотно? Я только начинаю осваивать это все, без помощи трудновато написать самому Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pfc 0 2 марта, 2015 Опубликовано 2 марта, 2015 · Жалоба запоминаешь счётчик между импульсами холостого хода прогретого двигателя. При запуске если счётчик меньше запомненного - отпускаешь стартер. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jipper 0 2 марта, 2015 Опубликовано 2 марта, 2015 · Жалоба запоминаешь счётчик между импульсами холостого хода прогретого двигателя. При запуске если счётчик меньше запомненного - отпускаешь стартер. Это я понимаю, а как это будет выглядеть в коде? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 8 2 марта, 2015 Опубликовано 2 марта, 2015 · Жалоба Подскажите как это организовать грамотно? Я только начинаю осваивать это все, без помощи трудновато написать самому а классически не катит ?! 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(); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 3 марта, 2015 Опубликовано 3 марта, 2015 · Жалоба У меня возникли следующие вопросы/замечания к Вашему проекту: 1. Как вы будете обходить иммобилайзер/сигнализацию? 2. Необходимо предусмотреть ограничение на время работы стартера (не более 10 сек), а также время простоя между попытками (более 30 сек) 3. Насколько я помню, для заводки а/м не достаточно крутить ТОЛЬКО стартером, минимум необходимо включить бензонасос 4. Я бы еще контролировал напряжение на АКБ, а то можно добиться полного разряда 5. Ну я надеюсь вы предусмотрели развязку между мегой и стартером 6. То что Вы не хотите купить сигналку с автозапуском и смонтировать ее на а/м, я понимаю - хотите сами разобраться.......... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jipper 0 3 марта, 2015 Опубликовано 3 марта, 2015 (изменено) · Жалоба Отвечу по всем вопросам) 1. Иммобилайзера нету, как обойти сигналку я уже сделал. 2. все временные задержки тоже в коде будут 3. Включаю зажигание и кручу стартер(как будто ключом завожу) 4. Вот это можно, чтобы автозапуск не сработал если на АКБ менее 10,5-11В 5. Развязка на 30А реле 6. Сигналку я купил с обратной связью в том году с мыслю что автозапуск нафиг не нужен, а сейчас что то загорелся желанием) Изменено 3 марта, 2015 пользователем IgorKossak бездумное цитирование Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 3 марта, 2015 Опубликовано 3 марта, 2015 · Жалоба хорошо. Я посоветую сделать так. 1. тахометр завести на пин внешнего прерывания, где сделать простой инкремент счетчика 2. включить таймер в режиме СТС примерно на 250/500 мсек 3. в основной программе, если подан сигнал включается реле стартера (напр выходной пин=1) 4. в прерывании таймера постоянно отслеживается показания тахометра (счетчик) и если он выше ЗНАЧЕНИЯ, то выключается реле стартера (соот выходной пин=0). после счетчик обнуляется 5. 400 об/мин - это мало, лучше контролировать 700..800 об/мин Это процедура самого запуска Есть еще основной алгоритм работы (упрощенный): 1. сидеть на связи и контролировать напряжение АКБ, температуру в салоне и на улице 2. Получив разрешение на запуск - отключить сигналку, проверить допустимые условия - напряжение, нейтраль на коробке передач, постановка на ручник, возможно температуру 3. включить главное реле и включить фары примерно на 10 сек 4. выключить фары и через примерно 10 сек пройти к процедуре запуска ДВС 5. При не успешной процедуре запуска, выключить стартер через 10 сек и подождать 30 сек, после - повторить запуск. Общее количество попыток - не более ТРЕХ 6. При успешном запуске - контролировать условия останова - температура ДВС, температура салона, время работы ДВС 7. При останове ДВС - включить сигналку Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jipper 0 3 марта, 2015 Опубликовано 3 марта, 2015 · Жалоба Все что Вы описали это я и так учитываю.. Я делаю процедуру выхода из машины(поднят ручник, выключено зажигание-двигатель продолжает работу, ввыхожу из машины и ставлю на сигналку - двигатель глохнет, разрешение на автозапуск есть) по части автозапуска я делаю так: по доп каналу сигнализации(открытие багажника) поступает сигнал на МК, замыкаю концевик багажника(как будто он открыт, тем самым отключается датчик удара), обхожу все блокировки, включаю зажигание и моргаю дальним, включаю стартер - машина завотидся.. Мне нужно только разработать контроль работы двигателя и контроль запуска. С таймерами и счетчиками пока только на Вы, поэтому трудности)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jipper 0 6 марта, 2015 Опубликовано 6 марта, 2015 · Жалоба а классически не катит ?! Скажите пожалуйста этот код Вы сами написали или выдернули откуда то? мне бы полный вариант и чтоб понятней было, тяжело разобраться самому Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abell 0 6 марта, 2015 Опубликовано 6 марта, 2015 · Жалоба Предлагаю, при первом получении импульса с ЭБУ на тахометр, запускать счетчик и считать до тех пор, пока он не насчитает некое число(которое соответствует 400об/мин) между импульсами. Все правильно, считать интервал между импульсами. Как только он насчитывает больше - отпускать стартер и переходить к контролю работы двигателя. Когда насчитает меньше - тогда отпускать стартер. Больше частота - меньше период. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jipper 0 6 марта, 2015 Опубликовано 6 марта, 2015 · Жалоба Когда насчитает меньше - тогда отпускать стартер. Больше частота - меньше период. Да, да.. это я и имел ввиду, чем выше обороты тем чаще импульсы проходят, соответственно между импульсами меньше насчитает. Алгоритм понятен, я не могу это реализовать в програмном коде. Не могли бы Вы помочь? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abell 0 6 марта, 2015 Опубликовано 6 марта, 2015 (изменено) · Жалоба megajohn уже помог, более чем :) Можно, например, использовать Т1 с прерыванием в режиме захвата по внешнему фронту :laughing: P.S. Кстати, всю эту систему надо будет еще отключать при ручном включении зажигания. alexeyv примерно все правильно посоветовал, только контролировать нейтраль и ручник надо ДО постановки на автозапуск. Изменено 6 марта, 2015 пользователем Abell Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jipper 0 6 марта, 2015 Опубликовано 6 марта, 2015 (изменено) · Жалоба Abell,если бы этот код был более менее понятен, то вопросов не было бы) Система будет отключаться автоматически,это предусмотрел уже Изменено 6 марта, 2015 пользователем Jipper Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Abell 0 6 марта, 2015 Опубликовано 6 марта, 2015 · Жалоба Jipper, конфигурацию таймера Т1 уже сделали? Теперь разрешаем прерывания по переполнению и захвату. Пишем функции обработки прерываний. Если интервал между импульсами недопустимо велик - таймер переполняется, вызывается обработка прерывания по переполнению, это состояние ошибки. Если импульс с тахометра пришел вовремя - вызывается прерывание по захвату, содержимое таймера сохраняется в регистре, функция обработки обнуляет таймер и сравнивает регистр захвата с предыдущим значением из предварительно заданной глобальной переменной. Если результат больше - сохраняет регистр захвата в глобальную переменную. Если результат намного меньше - двигатель завелся, стартер можно отпустить. Как-то так, один из вариантов решения, если я все правильно понял и нигде не ошибся :laughing: Повторю - проверять состояние нейтрали, закрытых дверей и ручника надо ДО постановки на автозапуск, это тоже та еще задачка ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться