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

 
 
 
Reply to this topicStart new topic
> Atmega8 - контроль по тахометру
Jipper
сообщение Mar 2 2015, 07:36
Сообщение #1





Группа: Новичок
Сообщений: 7
Регистрация: 2-03-15
Из: РБ
Пользователь №: 85 435



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

Go to the top of the page
 
+Quote Post
pfc
сообщение Mar 2 2015, 10:42
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 25
Регистрация: 8-07-09
Из: Украина
Пользователь №: 51 059



запоминаешь счётчик между импульсами холостого хода прогретого двигателя. При запуске если счётчик меньше запомненного - отпускаешь стартер.
Go to the top of the page
 
+Quote Post
Jipper
сообщение Mar 2 2015, 16:32
Сообщение #3





Группа: Новичок
Сообщений: 7
Регистрация: 2-03-15
Из: РБ
Пользователь №: 85 435



Цитата(pfc @ Mar 2 2015, 15:42) *
запоминаешь счётчик между импульсами холостого хода прогретого двигателя. При запуске если счётчик меньше запомненного - отпускаешь стартер.


Это я понимаю, а как это будет выглядеть в коде?
Go to the top of the page
 
+Quote Post
megajohn
сообщение Mar 2 2015, 16:49
Сообщение #4


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(Jipper @ Mar 2 2015, 10:36) *
Подскажите как это организовать грамотно? Я только начинаю осваивать это все, без помощи трудновато написать самому


а классически не катит ?!
Код
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();
}


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Mar 3 2015, 04:06
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



У меня возникли следующие вопросы/замечания к Вашему проекту:
1. Как вы будете обходить иммобилайзер/сигнализацию?
2. Необходимо предусмотреть ограничение на время работы стартера (не более 10 сек), а также время простоя между попытками (более 30 сек)
3. Насколько я помню, для заводки а/м не достаточно крутить ТОЛЬКО стартером, минимум необходимо включить бензонасос
4. Я бы еще контролировал напряжение на АКБ, а то можно добиться полного разряда
5. Ну я надеюсь вы предусмотрели развязку между мегой и стартером
6. То что Вы не хотите купить сигналку с автозапуском и смонтировать ее на а/м, я понимаю - хотите сами разобраться..........
Go to the top of the page
 
+Quote Post
Jipper
сообщение Mar 3 2015, 04:29
Сообщение #6





Группа: Новичок
Сообщений: 7
Регистрация: 2-03-15
Из: РБ
Пользователь №: 85 435



Отвечу по всем вопросам)
1. Иммобилайзера нету, как обойти сигналку я уже сделал.
2. все временные задержки тоже в коде будут
3. Включаю зажигание и кручу стартер(как будто ключом завожу)
4. Вот это можно, чтобы автозапуск не сработал если на АКБ менее 10,5-11В
5. Развязка на 30А реле
6. Сигналку я купил с обратной связью в том году с мыслю что автозапуск нафиг не нужен, а сейчас что то загорелся желанием)

Сообщение отредактировал IgorKossak - Mar 3 2015, 15:39
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Mar 3 2015, 04:51
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



хорошо.
Я посоветую сделать так.
1. тахометр завести на пин внешнего прерывания, где сделать простой инкремент счетчика
2. включить таймер в режиме СТС примерно на 250/500 мсек
3. в основной программе, если подан сигнал включается реле стартера (напр выходной пин=1)
4. в прерывании таймера постоянно отслеживается показания тахометра (счетчик) и если он выше ЗНАЧЕНИЯ, то выключается реле стартера (соот выходной пин=0). после счетчик обнуляется
5. 400 об/мин - это мало, лучше контролировать 700..800 об/мин
Это процедура самого запуска

Есть еще основной алгоритм работы (упрощенный):
1. сидеть на связи и контролировать напряжение АКБ, температуру в салоне и на улице
2. Получив разрешение на запуск - отключить сигналку, проверить допустимые условия - напряжение, нейтраль на коробке передач, постановка на ручник, возможно температуру
3. включить главное реле и включить фары примерно на 10 сек
4. выключить фары и через примерно 10 сек пройти к процедуре запуска ДВС
5. При не успешной процедуре запуска, выключить стартер через 10 сек и подождать 30 сек, после - повторить запуск. Общее количество попыток - не более ТРЕХ
6. При успешном запуске - контролировать условия останова - температура ДВС, температура салона, время работы ДВС
7. При останове ДВС - включить сигналку

Go to the top of the page
 
+Quote Post
Jipper
сообщение Mar 3 2015, 06:00
Сообщение #8





Группа: Новичок
Сообщений: 7
Регистрация: 2-03-15
Из: РБ
Пользователь №: 85 435



Цитата(alexeyv @ Mar 3 2015, 09:51) *

Все что Вы описали это я и так учитываю..
Я делаю процедуру выхода из машины(поднят ручник, выключено зажигание-двигатель продолжает работу, ввыхожу из машины и ставлю на сигналку - двигатель глохнет, разрешение на автозапуск есть)
по части автозапуска я делаю так: по доп каналу сигнализации(открытие багажника) поступает сигнал на МК, замыкаю концевик багажника(как будто он открыт, тем самым отключается датчик удара), обхожу все блокировки, включаю зажигание и моргаю дальним, включаю стартер - машина завотидся..
Мне нужно только разработать контроль работы двигателя и контроль запуска. С таймерами и счетчиками пока только на Вы, поэтому трудности))
Go to the top of the page
 
+Quote Post
Jipper
сообщение Mar 6 2015, 04:05
Сообщение #9





Группа: Новичок
Сообщений: 7
Регистрация: 2-03-15
Из: РБ
Пользователь №: 85 435



Цитата(megajohn @ Mar 2 2015, 21:49) *
а классически не катит ?!
[code][/code]


Скажите пожалуйста этот код Вы сами написали или выдернули откуда то? мне бы полный вариант и чтоб понятней было, тяжело разобраться самому
Go to the top of the page
 
+Quote Post
Abell
сообщение Mar 6 2015, 06:22
Сообщение #10


профессиональный дилетант
****

Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292



Цитата(Jipper @ Mar 2 2015, 10:36) *
Предлагаю, при первом получении импульса с ЭБУ на тахометр, запускать счетчик и считать до тех пор, пока он не насчитает некое число(которое соответствует 400об/мин) между импульсами.

Все правильно, считать интервал между импульсами.
Цитата(Jipper @ Mar 2 2015, 10:36) *
Как только он насчитывает больше - отпускать стартер и переходить к контролю работы двигателя.

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


--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...

Go to the top of the page
 
+Quote Post
Jipper
сообщение Mar 6 2015, 06:34
Сообщение #11





Группа: Новичок
Сообщений: 7
Регистрация: 2-03-15
Из: РБ
Пользователь №: 85 435



Цитата(Abell @ Mar 6 2015, 11:22) *
Когда насчитает меньше - тогда отпускать стартер. Больше частота - меньше период.


Да, да.. это я и имел ввиду, чем выше обороты тем чаще импульсы проходят, соответственно между импульсами меньше насчитает. Алгоритм понятен, я не могу это реализовать в програмном коде.
Не могли бы Вы помочь?
Go to the top of the page
 
+Quote Post
Abell
сообщение Mar 6 2015, 11:46
Сообщение #12


профессиональный дилетант
****

Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292



megajohn уже помог, более чем sm.gif
Можно, например, использовать Т1 с прерыванием в режиме захвата по внешнему фронту laughing.gif
P.S. Кстати, всю эту систему надо будет еще отключать при ручном включении зажигания. alexeyv примерно все правильно посоветовал, только контролировать нейтраль и ручник надо ДО постановки на автозапуск.

Сообщение отредактировал Abell - Mar 6 2015, 11:57


--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...

Go to the top of the page
 
+Quote Post
Jipper
сообщение Mar 6 2015, 12:13
Сообщение #13





Группа: Новичок
Сообщений: 7
Регистрация: 2-03-15
Из: РБ
Пользователь №: 85 435



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

Сообщение отредактировал Jipper - Mar 6 2015, 12:17
Go to the top of the page
 
+Quote Post
Abell
сообщение Mar 6 2015, 19:03
Сообщение #14


профессиональный дилетант
****

Группа: Участник
Сообщений: 866
Регистрация: 16-03-06
Из: Шебекино - Лысьва - Тюмень
Пользователь №: 15 292



Jipper, конфигурацию таймера Т1 уже сделали?
Теперь разрешаем прерывания по переполнению и захвату.
Пишем функции обработки прерываний.
Если интервал между импульсами недопустимо велик - таймер переполняется, вызывается обработка прерывания по переполнению, это состояние ошибки.
Если импульс с тахометра пришел вовремя - вызывается прерывание по захвату, содержимое таймера сохраняется в регистре, функция обработки обнуляет таймер и сравнивает регистр захвата с предыдущим значением из предварительно заданной глобальной переменной.
Если результат больше - сохраняет регистр захвата в глобальную переменную.
Если результат намного меньше - двигатель завелся, стартер можно отпустить.
Как-то так, один из вариантов решения, если я все правильно понял и нигде не ошибся laughing.gif
Повторю - проверять состояние нейтрали, закрытых дверей и ручника надо ДО постановки на автозапуск, это тоже та еще задачка wink.gif


--------------------
Скоро дело сказывается, да не скоро сказка делается, или тише будешь - дальше уедешь...

Go to the top of the page
 
+Quote Post

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

 


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


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