как выдавать импульсы

Yer
Offline
Зарегистрирован: 12.02.2016

Здравствуйте всем,на три входа ардуино подается импульсы с 2-20мс.Нужно чтобы на выходе ардуино точно такие импульсы выдавать.Заранее спасибо   

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Yer, зачем тут ардуина нужна? Подавайте свои импульсы напрямую.

Yer
Offline
Зарегистрирован: 12.02.2016

Нужно немножко прибавлять заданным импульсам например если подается на вход 4мс нужно прибавит и подать 8мс или 6мс на выходе ардуино   

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Yer пишет:

Нужно немножко прибавлять заданным импульсам например если подается на вход 4мс нужно прибавит и подать 8мс или 6мс на выходе ардуино   

Вы ничего не разъясняете, нужно вытягивать из вас по слову.

Этот раздел для готовых проектов или почти.

Шли бы вы в раздел "Ищу исполнителя" и пусть там с вас вытягивают желаемое но хоть за деньги.

Coolerr
Offline
Зарегистрирован: 30.06.2014

У меня такое подозрение, что скоро пойдут вопросы типа "Привет ребзя, ну как у вас тут чё, ну и эта ваще светодиод как мне ну туда?"

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Yer пишет:

на три входа ардуино подается импульсы с 2-20мс.Нужно чтобы на выходе ардуино точно такие импульсы выдавать.

Yer пишет:

если подается на вход 4мс нужно прибавит и подать 8мс или 6мс на выходе ардуино   

Задача принципиально невыполнима в силу противоречивости требований ТЗ.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ЕвгенийП, вспомнилось юморное видео про семь красных линий :))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Там есть ключевая фраза "не идиоты же здесь собрались" :))))))))))

Yer
Offline
Зарегистрирован: 12.02.2016

С помощю pulseIn считаю прямоугольные имплуьсы которые приходит к ардуино но никак не получается выдавать их с ардуино немножко изменив ихние длительности.Пробую использовать millis() пока не получается вот и хотел спросит у знатаков как можно реализовать проект.Извеняюсь что подробно не рассказал о проблеме просто голова уже не работает     

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

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

Xumuk
Xumuk аватар
Offline
Зарегистрирован: 03.03.2016

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

Yer
Offline
Зарегистрирован: 12.02.2016

можно ли вообще использовать на три входа функцию pulseIn для каждого входа свой pulseIn 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Yer, вы не написали о технических условиях практически ничего. Что это? , для чего это?. Что вам можно советовать с таким исходным материалом? -ничего. Ибо ничего не ясно что нужно получить. Почему три входа, нужно ли их дублировать на разные выходы. Могут ли на эти входы прийти импульсы одновременно. Далее  импульсы бывает разные, спадающие или нарастающие, какие промежутки между импульсами "от и до",  должна ли начальная фаза выходящего импульса совпадать с фазой входящего, если не обязательно, то какие временные допуски на сдвиг. Каким образом определяется "надбавка" к длительности выходящего импульса, будет ли она постоянной или переменной. После всех этих параметров можно будет подумать о возможном алгоритме программы, какие аппаратные ресурсы задействовать.

Yer
Offline
Зарегистрирован: 12.02.2016

спасибо большое Dimax,хочу реализовать проект для управления ГБО.Импульсы приходят на бензиновые форсунки с электричекий части все подготовил для управления газовой форсунки с выхода ардуино.Теперь нужно рассчитать импульс которые приходит на бензиновые форсунки(кол форсунок 6-6цилиндров),для того чтобы нормально работали газовые форсунки нужно немножко добавлять или убавлять сигналы   

Yer
Offline
Зарегистрирован: 12.02.2016

так как КПД пропана ниже чем у бензина АИ92 

ssss
Offline
Зарегистрирован: 01.07.2016

Voodoo Doll пишет:

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

Чушь! Это на ардуине невозможно, на СТМ32 - нет проблем, никаких. В случае для 3-х входов - три любых таймера с двумя каналами ССР, режимом ОРМ и запуском таймера по перепаду входного сигнала.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ssss пишет:

Чушь! Это на ардуине невозможно, на СТМ32 - нет проблем, никаких. 

:-)))))))))))))

Перед выборами (ещё прошлыми - 11 года) по радио слышал далог (можете не верить, я бы тоже не поверил, если бы не слышал сам). Некий кандидат (К) заливается соловьём, что мол выберите нас и зарплата у учителей, врачей, полицейских будет выше, чем средняя по региону.  Журналист долго слушал, а потом срашивет:

(Ж) - Вот вы говорите, что з/п медиков, учителей, полицейских будет выше средней по региону. А у кого будет ниже средней?

(К) - Ни у кого, у всех будет выше!

(обалделый Ж) - Ну, это же невозможно, она же на то и средняя, не может быть у всех выше средней!

(К) - это при нунешней воровской власти невозможно, а вот вы проголосуйте за нас - увидите!

ssss
Offline
Зарегистрирован: 01.07.2016

ЕвгенийП пишет:

ssss пишет:

Чушь! Это на ардуине невозможно, на СТМ32 - нет проблем, никаких. 

:-)))))))))))))

Вам смешно что ардуина не сможет? Или что на СТМ32 это решается как два пальца? )))))))))))))))))))

Всё в пределах одного такта. Для таких длительностей это так, тьфу!

Не, вы можете конечно со мной поспорить, но а5021 может ненавязчиво вам рассказать, сколько у меня в рукаве козырей. ))))))))))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, нет - просто Вы смешной.

ssss пишет:

Не, вы можете конечно со мной поспорить

Я??? С Вами??? Кто Вам сказал, что я могу??? Боже упаси!

ssss
Offline
Зарегистрирован: 01.07.2016

ЕвгенийП пишет:

Да, нет - просто Вы смешной.

Рано вам ещё смеяться. Не доросли ешё. )))))))))))))))

Ну что ж, начнём! Что вас так поразило в моём высказывании? Хардварный старт таймера по перепаду входного сигнала это обычная фишка для СТМ32. А вы не знали? По захвату входного импульса одним каналом таймера попадаем в прерывание, добавляем-не добавляем время в другой канал который рулит ШИМ. По отработке другого канала таймер останавливается сам, хардварно. И что не так? Три входных сигнала на трёх таймерах обработаются аж со свистом!

Это навскидку. Если подумать, то можно ещё чего намутить.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ssss пишет:

Ну что ж, начнём! 

И тут же закончим.

Впрочем, если Вам нравится - начинайте что хотите, мне пофигу.

ssss
Offline
Зарегистрирован: 01.07.2016

ЕвгенийП пишет:

мне пофигу.

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

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

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

ssss пишет:

Чушь! Это на ардуине невозможно, на СТМ32 - нет проблем, никаких. В случае для 3-х входов - три любых таймера с двумя каналами ССР, режимом ОРМ и запуском таймера по перепаду входного сигнала.

Вы чего человека пугаете!

Пока нет исходных данных таких как максимальная длинна импульса и максимальная частота подачи импульсов. Я точно сказать не могу!!!  но даже на глазок одного МК Atmega   работающего на частоте 16МГц хватит,  чтоб программно читать состояние трех пинов на вход и управлять тремя на выход добавляя задержку.

Конечно с условием что он больше ничем занят не будет!  И код писать на C++ или Asme, без Ардуиносвских digitalRead.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Автор где конкретные данные по работе форсунок?

На сколько открываются при бензине и сколько хотите чтоб было на газ?

С какой частотой они делают впрыск?

Желательно осциллограмму на максимальных оборотах двигателя и на минимальных, с курсорными замерами времени импульса.

Тогда конкретно подскажут успеет мега или нет.

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Можно и на Wiring:

bool pin0state=0,
     prev_pin0state=0;

unsigned long statetime=millis(),
              delta=0;

void setup(){
  pinMode(0,INPUT_PULLUP);
}

void loop(){
  prev_pin0state=pin0state;
  pin0state=!digitalRead(0);
  if(!prev_pin0state && pin0state) statetime=millis();
  delta=millis()-statetime;
  if(prev_a4state && !a4state){
    if(delta>=40 && delta<45) action(1);
    if(delta>=60 && delta<65) action(2);
    if(delta>=80 && delta<85) action(3);
  }
}

void action(byte n){
  // service code here
}

 

a5021
Offline
Зарегистрирован: 07.07.2013

ssss пишет:
Не, вы можете конечно со мной поспорить, но а5021 может ненавязчиво вам рассказать, сколько у меня в рукаве козырей.

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

Вот и сейчас он пытается мухлевать. Вообще задача решается элементарнейшим образом на ардуине. Пришел импульс, в обработчике внешнего прерывания запускаем таймер с нужной длительностью в регистре сравнения выходного канала. Канал сравнения в режиме PWM или CTC формирует выходной импульс. В обработчике сработавшего прерывания по совпадению таймер останавливаем. Профит.

ssss
Offline
Зарегистрирован: 01.07.2016

a5021 пишет:

Вообще задача решается элементарнейшим образом на ардуине. Пришел импульс, в обработчике внешнего прерывания запускаем таймер с нужной длительностью в регистре сравнения выходного канала. Канал сравнения в режиме PWM или CTC формирует выходной импульс. В обработчике сработавшего прерывания по совпадению таймер останавливаем. Профит.

Осталось только на Вангу сброситься, чтобы узнать значение "с нужной длительностью в регистре сравнения выходного канала". )))))))))))))))))))))

Песши ысчо! )))))))))))))

a5021
Offline
Зарегистрирован: 07.07.2013

Вы всегда к окультистам бегаете? Даже в совсем простых ситуациях? Стыдоба то какая!

 

  // считаем, что таймер 1 был
  // ранее проинициализирован в
  // режиме CTC, TOP=OCR1A
  // канал "B" в Clear on Compare

  TCCR1B &= ~(1<<CS12);  // таймер в останов
  TCNT1 = 0;             // счетчик в ноль
  OCR1B=0xFFFF;          // макс. длительность изначально

         // ждем передний фронт импульса
         
  while ((PINB & (1 << PINB0)) != (1 << PINB0)); 
  
  TCCR1B=(1<<CS12);      // поймали, запускаем таймер на счет.

         // т.к. канал B в режиме Clear on compare,
         // при старте счетчика он встает в 1
         // это пер. фронт выходного импульса

         // ждем задний фронт входного
         
  while ((PINB & (1 << PINB0)) == (1 << PINB0));

        // поймали, формируем длину выходного импульса

  OCR1B = TCNT1 * DESIRED_MULTIPLIER; // умножаем на коэфф. "уширения"

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

 

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Подозреваю, что для решения задачи ТС достаточно три ждущих мультивибратора... Это и надёжнее выйдет, с газом шутки плохи...

a5021
Offline
Зарегистрирован: 07.07.2013

У ждущих мультивибраторов, если мы говорим о схемах на дискретной логике, есть времязадающие цепи, которые могут хорошо "гулять" от температуры. Не оказалось бы это еще более гадкой проблемой, чем вопрос обеспечения надежного функционирования МК.

ssss
Offline
Зарегистрирован: 01.07.2016

a5021 пишет:

в совсем простых ситуациях

Угу, осталось только ещё пару входов обслужить. Хватит таймеров и ожиданий в цикле? ))))))))))))))

А на СТМ32Ф0 ещё и ТФТ прикрутить можно, пусть графики рисует, время импульсов показывает, лог на СД-карточку скидывает. )))))))))))

a5021
Offline
Зарегистрирован: 07.07.2013

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

ВН
Offline
Зарегистрирован: 25.02.2016

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

 

a5021
Offline
Зарегистрирован: 07.07.2013

Да можно и без прерываний. Все-таки лаги от них (уж не знаю, насколько в данном применении это критично). Если взять мегу, то там таймеров хватит, чтобы на каждой линии свой канал захвата использовать. Если задача имеет жесткие требования по быстродействию, то этот вариант будет предпочтительней.

Yer
Offline
Зарегистрирован: 12.02.2016

Yer
Offline
Зарегистрирован: 12.02.2016

Желтый сигнал идет на первый цилиндр а синий на второй цилиндр форсунки 

diger67
Offline
Зарегистрирован: 25.07.2015

Все с таким рвением начали обсуждать каким образом регулировать ширину импульса. И дураку понятно что с помощью шим, хоть софтовым, хоть хардварным. Как я понимаю импульсы - это импульсы сформированные из сигналов обратной связи. Так вот Yer, если вы не хотите чтобы ваш дом, дача, машина взлетели на воздух. Прежде всего надо вывести формулу зависимости ширины входного импульса и на основании нее формировать ширину выходного импульса с учетом коэффициэнта актанового числа. Иначе воспользовавшись советами данными вам вы рискуете, очень рискуете.

a5021
Offline
Зарегистрирован: 07.07.2013

diger67 пишет:
Все с таким рвением начали обсуждать каким образом регулировать ширину импульса. И дураку понятно что с помощью шим, хоть софтовым, хоть хардварным.

Возможно вы лучше знаете, что там будет понятно дураку, но это не шим. Ни о какой модуляции в данной задаче речь не идет. Целью обработки внешнего сигнала является увеличения длительности поступившего импульса и только.

Цитата:
Как я понимаю импульсы - это импульсы сформированные из сигналов обратной связи.

Не правильно вы понимаете. Это управляющие импульсы. В противоположность обратной связи, их можно назвать прямым действием.

Цитата:
Прежде всего надо вывести формулу зависимости ширины входного импульса и на основании нее формировать ширину выходного импульса с учетом коэффициэнта актанового числа.

Да-да. Выведите ее скорее. Нет сил больше ждать. И "коэффициэнт актанового числа" достал тут уже всех.

a5021
Offline
Зарегистрирован: 07.07.2013

Yer пишет:
Желтый сигнал идет на первый цилиндр а синий на второй цилиндр форсунки

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

di_mot
Offline
Зарегистрирован: 12.08.2016

Уж не УОЗ или около того это смахивает?..
И смысл подгонять под каждый цилиндр?
Пусть за один оборот коленвала все 6 импульсов, каждый на свой цилиндр, пройдут одинаковой длинны.
А на следующем обороте коленвала - можно и поменять длинну импульса. Чай не двиг из F1.
Или настолько нужно точно форсировать двиг? :-)

a5021
Offline
Зарегистрирован: 07.07.2013

Я так понимаю, что чисто из того, что газ -- это немного другое топливо, форсунки должны запускать его в цилиндры немного дольше. Вот и вся недолга.

Yer
Offline
Зарегистрирован: 12.02.2016

идея хорошая но как его реализовать на деле не подскажете 

a5021
Offline
Зарегистрирован: 07.07.2013

Берите ардуину, пробуйте написать. Что не будет получаться, спрашивайте.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Yer пишет:

идея хорошая но как его реализовать на деле не подскажете 

Привет.

По вашему скрину, я правильно посчитал что сигнал длится 3mS я так понял для газа вы будете пробовать подавать 4, 5, 6, 7, 8mS?

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

Это нужно чтоб понять сколько наносекунд есть на реакцию чтоб включаться внутри фронта, это сделать можно и сторожевой таймер естественно нужно настроить, чтоб в случае зависания МК не было проблем у двигателя и у пилота!)

И еще один вопрос почему вы не сделаете как все, загружается прошивка в мозги авто которая понимает что вы перешли на газ и корректирует подачу и углы опережения и еще там много чего, все эти прошивки есть у установщиков ГБО.

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Замерил скорость реакции такой конструкции, получилос 18nS точнее мои приборы не позволяют.,

Код подробно комментирован, вам как пример пойдет.

//Мониторим ногу 6 Arduino, 
//если появляется HIGH включаем пин 7 Arduino 
void setup() {
  DDRD |= (1 << 7);// устанавливаем вывод PB7 как выход (Arduino 7)
}
void loop() {
  if (PIND & (1 << PIND6)) { //читаем PD6, если лог 1 (Arduino 6)
    PORTD |= (1 << 7);// устанавливаем высокий уровень PD7 (Arduino 7)
  }
  PORTD &= ~(1 << 7);// устанавливаем низкий уровень PD7 (Arduino 7)
}

 

diger67
Offline
Зарегистрирован: 25.07.2015

a5021 пишет:

diger67 пишет:
Все с таким рвением начали обсуждать каким образом регулировать ширину импульса. И дураку понятно что с помощью шим, хоть софтовым, хоть хардварным.

Возможно вы лучше знаете, что там будет понятно дураку, но это не шим. Ни о какой модуляции в данной задаче речь не идет. Целью обработки внешнего сигнала является увеличения длительности поступившего импульса и только.

Цитата:
Как я понимаю импульсы - это импульсы сформированные из сигналов обратной связи.

Не правильно вы понимаете. Это управляющие импульсы. В противоположность обратной связи, их можно назвать прямым действием.

Цитата:
Прежде всего надо вывести формулу зависимости ширины входного импульса и на основании нее формировать ширину выходного импульса с учетом коэффициэнта актанового числа.

Да-да. Выведите ее скорее. Нет сил больше ждать. И "коэффициэнт актанового числа" достал тут уже всех.

Закрыл бы ты рот недоумок. Может в гавнокодерстве ты и "мАСТЕР", но в системах безопасности твои знания ниже плинтуса. Насмотрелся я на результаты таких самоделкиных.

a5021
Offline
Зарегистрирован: 07.07.2013

Даже интересно, как вы так все определяете. Паранормальные способности открылись?

diger67
Offline
Зарегистрирован: 25.07.2015

bodriy2014 пишет:

И еще один вопрос почему вы не сделаете как все, загружается прошивка в мозги авто которая понимает что вы перешли на газ и корректирует подачу и углы опережения и еще там много чего, все эти прошивки есть у установщиков ГБО.

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

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

Yer пишет:

идея хорошая но как его реализовать на деле не подскажете 

Советую вместо loop использовать while, как показали мои замеры она в 2,6раза быстрее.

Код на loop   инвертирует порт с частотой 1МГц

void setup() {
  DDRD |= (1 << 7);
}
void loop() {
    PORTD |= (1 << 7);
    PORTD &= ~(1 << 7); 
}

В то время ка код с while делает тоже за 2,6МГц

void setup() {
  DDRD |= (1 << 7);
}
void loop() {
  while (1) {
    PORTD |= (1 << 7);
    PORTD &= ~(1 << 7); 
  }
}

 

bodriy2014
bodriy2014 аватар
Offline
Зарегистрирован: 12.05.2015

diger67 пишет:

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

Думаю да, если в двигателе есть форсунки, значит он управляется электроникой.  

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

diger67
Offline
Зарегистрирован: 25.07.2015

a5021 пишет:

Даже интересно, как вы так все определяете. Паранормальные способности открылись?

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