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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 168
Зарегистрирован: Сб фев 16, 2008 04:35:19
Откуда: г.Тольятти

Сообщение 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 скачиваний
схема подключения к микроконтроллеру.
***********
Не трогайте мокрыми руками оголённые провода, они могут заржаветь.
***********
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15615
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

А каким образом определяется, что началось именно движение, а не просто движок крутится? :facepalm:
Может стоит запуск по импульсам спидометра сделать? :dont_know:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 168
Зарегистрирован: Сб фев 16, 2008 04:35:19
Откуда: г.Тольятти

Сообщение diim »

ну так я и подсоединяю к ДСА(датчик скорости автомобиля) :tea:
машинка инжекторная,датчик выдаёт 6 импульсов на оборот!
вот в этом то и проблема, не должно быть там ни каких импульсов с датчика скорости пока машина не поедит, а у меня ловит какие то помехи на этом проводе, и поэтому свет врубает контроллер!
посему интересно как можно програмно побороть эти помехи?
***********
Не трогайте мокрыми руками оголённые провода, они могут заржаветь.
***********
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15615
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Скорее всего прийдется городить преобразователь уровней где-то у датчика, а сигнал гнать токовым импульсом через оптроны ... :roll:
Реклама
Эиком - электронные компоненты и радиодетали
s64
Потрогал лапой паяльник
Сообщения: 321
Зарегистрирован: Пн окт 18, 2010 21:18:21

Сообщение s64 »

сначала определить, что машина заведена ( померить бортовое напряжение, что бы не ниже 13 вольт), а потом отлавливать импульсы. Хотелось бы глянуть на схему, может у вас схемный косяк.
Реклама
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень

Сообщение vitalik_1984 »

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

Честно говоря я не понял как в вашем виде фары тушатся.Вроде в начале проверка на ручник, а когда фары горят уже не выключаются от ручника?
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 168
Зарегистрирован: Сб фев 16, 2008 04:35:19
Откуда: г.Тольятти

Сообщение diim »

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

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

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

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

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

на счёт схемы, то она самая обычная!
Вложения
Захват-1.jpg
(39.17 КБ) 368 скачиваний
***********
Не трогайте мокрыми руками оголённые провода, они могут заржаветь.
***********
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15615
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Ооо... 512 слов ПЗУ + Си... :cry: Ммняаа... (кажись там и NE555 вполне хватило ...)
А на схемотехнику ЧХИ!!! ... :roll:
Сколько ...метров проводка между коллектором и входом (или между выходом датчика и входным делителем)? :tea:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 168
Зарегистрирован: Сб фев 16, 2008 04:35:19
Откуда: г.Тольятти

Сообщение diim »

Ооо... 512 слов ПЗУ + Си... Ммняаа... (кажись там и NE555 вполне хватило ...)
понимаю вашу иронию :)) но это так сказать практика в программировании и работы с внешними прерываниями :tea:
А на схемотехнику ЧХИ!!! ...
это как понимать??? что-то ни так?
Сколько ...метров проводка между коллектором и входом (или между выходом датчика и входным делителем)?
от датчика до тиньки, если размотать штатную проводку, думаю метра 2 будет! но я цепляюсь к проводку на панели приборов, а до него 15 см. провода.
***********
Не трогайте мокрыми руками оголённые провода, они могут заржаветь.
***********
Контактная информация:
Друг Кота
Аватара пользователя
Сообщения: 15615
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

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

Вернуться в «Периферия»