Страница 1 из 1

помогите: прерывания и датчик скорости

Добавлено: Чт дек 20, 2012 21:16:03
diim
хочу замутить себе на авто устройство чтоб включало ближний как только машина поедит, в инете полно схем, но хочется самому! :))
так вот: схему вроде накидал, спаял прошил контроллер(тини 13) но...
свет включается даже когда еще зажигание включаеш или заводишь(когда как :shock: )
я так думаю что всему виной помехи возникающие при запуске двигателя или при вкл. зажигания
вопрос: как с ними програмно бороться?
вот кусок кода где я пытаюсь отфильтровать импульсы короче 5млс, т.е. я думаю что помехи не будут длиннее, или ни так?
Спойлер

Код: Выделить всё

#define FARA_ON  PORTB.0=1; 
DSA_IMP; // счётчик импульсов с датчика скорости
mls=5;

interrupt [EXT_INT0] void ext_int0_isr(void)
    {    
                
                         if(RUCHNIK==1){
                                if(impuls==0){                                                //здесь в первый раз?
                                  T3=1;                                                           //да, запускаем таймер на 1млс, 
                                   impuls=1;                                                   // и ставим флаг что были здесь
                                }else{                                                             //нет, мы уже были тут
                                  T3=0;                                                            //останавливаем таймер
                                  mills=TS3;                                                    //в mills сохраняем то сколько натикал млс. таймер
                                  if(mills>=mls){                                             // сравниваем время таймера с предустановленным значением  
                                      DSA_IMP++;                                             //если прошло больше времени чем надо, то считаем этот импульс
                                      mills=0;}                                                    //и сбрасываем mills
                                  impuls=0;                                                      //и сбрасываем флаг того что тут уже были
                                };           
                         };         
                    
   } ;

interrupt [TIM0_OVF] void timer0_ovf_isr(void)  //
     { 

        if (T3==1) { TS3++; }else  {  TS3=0;};         
        TCNT0=106;                                             //перед запуском таймера записываем в него число 106,  что бы   переполнение
                                                                        //возникало 1 раз в 1млс 

      }

void main(void)
{
if(DSA_IMP>=5){FARA_ON;} //получили 5 импульсов, включили фары

}
может как то по другому можно отфильровывать помехи?
вот тут
Захват-1.jpg
(30.88 КБ) 400 скачиваний
схема подключения к микроконтроллеру.

Re: помогите: прерывания и датчик скорости

Добавлено: Пт дек 21, 2012 13:16:12
BOB51
А каким образом определяется, что началось именно движение, а не просто движок крутится? :facepalm:
Может стоит запуск по импульсам спидометра сделать? :dont_know:

Re: помогите: прерывания и датчик скорости

Добавлено: Пт дек 21, 2012 13:29:55
diim
ну так я и подсоединяю к ДСА(датчик скорости автомобиля) :tea:
машинка инжекторная,датчик выдаёт 6 импульсов на оборот!
вот в этом то и проблема, не должно быть там ни каких импульсов с датчика скорости пока машина не поедит, а у меня ловит какие то помехи на этом проводе, и поэтому свет врубает контроллер!
посему интересно как можно програмно побороть эти помехи?

Re: помогите: прерывания и датчик скорости

Добавлено: Пт дек 21, 2012 14:19:11
BOB51
Скорее всего прийдется городить преобразователь уровней где-то у датчика, а сигнал гнать токовым импульсом через оптроны ... :roll:

Re: помогите: прерывания и датчик скорости

Добавлено: Пт дек 21, 2012 19:59:57
s64
сначала определить, что машина заведена ( померить бортовое напряжение, что бы не ниже 13 вольт), а потом отлавливать импульсы. Хотелось бы глянуть на схему, может у вас схемный косяк.

Re: помогите: прерывания и датчик скорости

Добавлено: Пт дек 21, 2012 21:51:19
vitalik_1984
вообще то лучше сделать нормальный резистор а не использовать внутренний подтягивающий.И можно еще поставить небольшой конденсатор у ноги Мк, какую нибудь керамику на пару сотен uF.
Можно определить, что машина едет очень просто если шесть импульсов на оборот, а оборот делает примерно за один метр, и начало движения всегда будет медленным, то есть к примеру началом будет 1км/ч то получается, что самый длинный импульс будет
3600[сек] / 6000[имп/км] =0,6 секунд.
Можно для надежности ждать пока три секунды пройдет и не было импульсов, то можно тушить свет.
Далее считаем когда можно включить свет пусть максимальная скорость будет 120км/ч, тогда самый короткий импульс для включения 0,6[сек]/120= 0.005сек
Из этих расчетов можно составить алгоритм
если состояние выключеных фар и время между импульсами 5мс-0,6 сек, то фары включаем.
если состояние фар включено, считаем сколько импульсов за 3 секунды, если меньше 1(или 2 или 3), то фары можно потушить.

Честно говоря я не понял как в вашем виде фары тушатся.Вроде в начале проверка на ручник, а когда фары горят уже не выключаются от ручника?

Re: помогите: прерывания и датчик скорости

Добавлено: Вс дек 23, 2012 11:40:33
diim
vitalik_1984 я впринципе так и стараюсь сделать т.е. у нас есть переменная mls в которой я храню количество миллисекунд которые должны быть между импульсами(в данном случае 5млс) как только поступит первый импульс, запускаю таймер и жду следующего импульса. Приходит следующий импульс, время которое нотикал таймер(в миллисекундах) сохраняю в переменную mils, а далее сравниваю оба значения:

Код: Выделить всё

if(mills>=mls){  // сравниваем время таймера с предустановленным значением
и делаю вывод, был ли импульс с ДСА или просто помеха!

а ручник это я просто так ввёл в программу от безвыходности и все равно не помогает, т.е. машина на ручнике стоит, заводим её(пока на ручнике импульсы не считаем) опускаю ручник(машина стоит) то фары иногда включаются!

можно конечно подсоединиться с датчику экранированным проводом возможно это снизит помехи, но не хочется :)) ведь в машине ни одного экранированного провода нет, ЭБУ как то же работает!

на счёт схемы, то она самая обычная!

Re: помогите: прерывания и датчик скорости

Добавлено: Вс дек 23, 2012 11:58:08
BOB51
Ооо... 512 слов ПЗУ + Си... :cry: Ммняаа... (кажись там и NE555 вполне хватило ...)
А на схемотехнику ЧХИ!!! ... :roll:
Сколько ...метров проводка между коллектором и входом (или между выходом датчика и входным делителем)? :tea:

Re: помогите: прерывания и датчик скорости

Добавлено: Вс дек 23, 2012 12:07:27
diim
Ооо... 512 слов ПЗУ + Си... Ммняаа... (кажись там и NE555 вполне хватило ...)
понимаю вашу иронию :)) но это так сказать практика в программировании и работы с внешними прерываниями :tea:
А на схемотехнику ЧХИ!!! ...
это как понимать??? что-то ни так?
Сколько ...метров проводка между коллектором и входом (или между выходом датчика и входным делителем)?
от датчика до тиньки, если размотать штатную проводку, думаю метра 2 будет! но я цепляюсь к проводку на панели приборов, а до него 15 см. провода.

Re: помогите: прерывания и датчик скорости

Добавлено: Вс дек 23, 2012 12:45:56
BOB51
Параметры сигнала датчика мне неизвестны, но думаю, амиплитуда там не менее 12 Вольт...
У тиньки требуется режим с внутренним сбросом, 8:->1KOm->:1 без конденсатора, коллекторный резистор не более 910 Ом... Входной делитель 10:1 ...? там нужен преобразователь, чувствительный только к полному размаху входного сигнала... да и топология монтажа... Автомобилус... блин... особопомехоопасное существо... :cry:
Слазь на котов сундук или http://radioparty.ru/index.php/literatura за двумя томами Рюмиковской "1000 и одна микроконтроллерная схема" + раздел "авто" на http://elektromehanika.org/load/avto/8 , авось чего прояснится! :beer: