прошу помощи бывалых

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

Доброго дня Уважаемые гуру. Вот на конец то решился на пробную сборку блока зажигания для своего квадрика. сразу же напишу какую работу я проделал дабы не казаться тем что на форум залез без какой либо информации.
1. сняты осциллограммы с Picup
2. сняты  осциллограммы с катушки зажигания
3. сняты осциллограммы с выхода родного блока на тахометр
+
4. сняты осциллограммы с ДАД(как опция)
5. визуально сняты УОЗ на разных диапазонах вращения коленчатого вала(видео)
6. имеется схема подобного зажигания только на другом МК
7. в программе Proteus собрана  и опробована виртуальная схема формирователя импульсов с Picup
Столкнулся с проблемой на данном этапе-это сформировать импульс на тахометр с формирователя импульсов. целый день мучаайдяюсь пытаясь найти решение. Гугле в решений этого вопроса не помог, ответа на поставленные ему вопросы я не нашел. В программе FLProg эту задачу тоже не смог решить. глубоко копнул в свою память вспомнив устройства на логике по делителю импульсов, но ни одна из всплывших в памяти схем на триггере ток же не подходит. Не вижу свет в конце тонеля, по этому и пишу сюда.
собственно решение есть и звучит оно просто, но я не могу собрать этот кубик рубик в змейку. Прошу вас о помощи объяснить как реализовать.
задача: с выхода Picup следуют 4 импульса синусоидального вида которые теперь преобразованы формирователем в 4 прямоугольных импульса. импульс на тахометр начинается с переднего фронта первого, прямоугольного импульса и заканчивается задним фронтом четвертого прямоугольного импульса..... 
прошу подсказки.
за ранее спасибо за ответы

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

Да и хочу добавить. вчера виртуально собрал схему управления подъемом буровой вышки(это так для работы) с шим управлением. в протеусе замечательно работает. буду реализовать в жизнь

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

livek пишет:

буду реализовать в жизнь

Удачи!

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

спасибо!

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

вот почитав темку для новичков нашел свое решение но... туда необходимо добавить еще двойное нажатие на кнопку чтоб получить именно тот сигнал который требуется. но как?

int flag=0; 

void setup()    
{ 
       
    pinMode(13, OUTPUT);         
      
        
} 

void loop() 

{ 
        
     if(digitalRead(14)==HIGH&&flag==0)//если кнопка нажата    
     // и перемення flag равна 0 , то ... 
     { 
           
       digitalWrite(13,!digitalRead(13)); 
       flag=1; 
        //это нужно для того что бы с каждым нажатием кнопки 
        //происходило только одно действие 
        // плюс защита от "дребезга"  100% 
        
     } 
        
      if(digitalRead(14)==LOW&&flag==1)//если кнопка НЕ нажата 
     //и переменная flag равна - 1 ,то ... 
     { 
           
        flag=0;//обнуляем переменную flag 
     } 
} 

 

5N62V
Offline
Зарегистрирован: 25.02.2016

livek пишет:

вот почитав темку для новичков нашел свое решение но... туда необходимо добавить еще двойное нажатие на кнопку чтоб получить именно тот сигнал который требуется. но как?

Ну хз, если честно  - не понятно в чем суть проблемы, и что Вы делаете , чтобы ее решить.  Вам нужно устройство, которое формировало бы импуль длительностью той пачки из 4х импульсов?  И что такое Picup? Каким боком тут кнопка?    Чем яснее Вы сформулируете, тем выше шанс получить подсказку или прямую помощь.  Приведенный Вами код вряд ли решает недоописанную Вами проблему. :)

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

Picup это катушка импульсов ДПКВ(датчик положения коленчатого вала) вот за один оброт коленвала на Picup проходит две синусоиды которые компаратором изменены в прямоугольные импульсы. скажем так что вход контроллера к которому подключена кнопка подключим на выход формирователя импульсов, при этом на выходе контроллера следует получить один импульс от переднего фронта первого импульса формирователя до заднего фронта четвертого импульса, и дальше по кругу.
PS не понимаю как фото загрузить. на осциллограмме это видно и понятно

 

5N62V
Offline
Зарегистрирован: 25.02.2016

Ну и при чем тут кнопка? Она в описании задачи отсутствует.

С контроллером более менее понятно: он мониторит приходящие от ДПКВ импульсы, привязываясь к фронту любого (?) из них формирует фронт выходного импульса, а по факту спада четвертого формирует спад выходного импульса. Я правильно понял? 

Тогда по сути он формирует 1 отрицательный импульс с периодом оборачивания коленвала. Да?

Как тахометр работает? Обычно он просто считает импульсы. Может не надо махаться с привязыванием фронтов/спадов, а просто делитель на 4 забабахать?

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

Ну и при чем тут кнопка? Она в описании задачи отсутствует.

С контроллером более менее понятно: он мониторит приходящие от ДПКВ импульсы, привязываясь к фронту любого (?) из них формирует фронт выходного импульса, а по факту спада четвертого формирует спад выходного импульса. Я правильно понял? 

Тогда по сути он формирует 1 отрицательный импульс с периодом оборачивания коленвала. Да?

Как тахометр работает? Обычно он просто считает импульсы. Может не надо махаться с привязыванием фронтов/спадов, а просто делитель на 4 забабахать?


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

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

Ну и при чем тут кнопка? Она в описании задачи отсутствует.


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

5N62V
Offline
Зарегистрирован: 25.02.2016

залейте осциллограмму на любой обменник, а ссылку давайте сюда.

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

хорошо, спасибо.
странно то что формирователь импульсов по приведенной схеме совсем на выходе не прямоугольные импульсы

 

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015
livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

понял спасибо

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

http://dropmefiles.com/1fRC6

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

 

5N62V
Offline
Зарегистрирован: 25.02.2016

livek пишет:

хорошо, спасибо.
странно то что формирователь импульсов по приведенной схеме совсем на выходе не прямоугольные импульсы

 

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

Так Вы не в курсе как Ваш тахометр работает? Если он измеряет частоту приходящих синих импульсов, то на неудобство  можно забить, и формировать импульс по положительным фронтам. А если он меряет длительность синего импульса, то забить не получится.

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

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


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

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

Так Вы не в курсе как Ваш тахометр работает? Если он измеряет частоту приходящих синих импульсов, то на неудобство  можно забить, и формировать импульс по положительным фронтам. 


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

5N62V
Offline
Зарегистрирован: 25.02.2016

livek пишет:

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

может я не ту схему формирователя выбрал((((
 

я опять потерялся.... Вы хотите импульс на тахометр сформировать, или угол опережения зажигания выставить? 

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

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

я опять потерялся.... Вы хотите импульс на тахометр сформировать, или угол опережения зажигания выставить? 


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

5N62V
Offline
Зарегистрирован: 25.02.2016

livek пишет:

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

Ок. Предлагаю сначала самый простой вариант: предполагаем, что тахометр считает частоту прихода импульсов.  Вам на входной пин надо подключить подтягивающий к земле резистор кОм 10, и диод анодом на землю. Ну и кондючок , наверное на 1...10 нан. В итоге на вход будут приходить два положительных импульса. Могем сформировать импульс, фронт которого будет привязан к фронту первого импульса , а спад - к спаду второго. Вот код, который по идее должен работать на мини, нане, уне

// вход - DD5
// выход - DD6
bool stage = 0;

void setup() {
  pinMode(6, OUTPUT);
}

void loop(){

  while (!(PIND & (1 << 5))); // ждем прихода импульса на пин 5
  if (!stage) {
    PORTD |= 1 << 6; //перевели пин 6 в HIGH
    stage = !stage;
    while (PIND & (1 << 5)); //ждем спада первого импульса
  }
  if (stage) {
    stage = !stage;
    while (PIND & (1 << 5)); //ждем спада второго импульса
    PORTD &= ~(1 << 6); //перевели пин 6 в LOW
  }

}

Критика приветствуется! :) В коде отсутствует анализ привязались ли мы в начале к первому импульсу, или ко второму, но исходя из предположения, что тахометр считает частоту приходящих фронтов/спадов - нам это как бы совсем немножко пох.

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

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

Ок. Предлагаю сначала самый простой вариант: 

/

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


огромное спасибо за поддержку! загружу в эмулятор и проверю. если рассматривать родную осциллограмму с Picup d k.бом случае она начнет считать с первого импульса. если Вы заинтересованы в этом проекте я предлогаю вам партнерство. обсудить можно  все в личке

5N62V
Offline
Зарегистрирован: 25.02.2016

livek пишет:

обсудить можно  все в личке

Тема мне интересна. только я тут лички не обнаружил. Может есть мыл?

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

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


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

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

Тема мне интересна. только я тут лички не обнаружил. Может есть мыл?


в личке в смысле в ВК или в каком нибудь месенджере. допустим я основательно перешел на телеграм с вайберов и вацапов

5N62V
Offline
Зарегистрирован: 25.02.2016

livek пишет:

простите я не уточнил контроллер куда подключаем? к компаратору? или сразу на picup?

Вход подключаем к точке, откуда снималась осциллофограмма №1. Уж стоит там компаратор или нет - я не знаю. Убедитесь, что амплитуда импульсов не более 5В.

Выход ардуины - ко входу тахометра.  

Как Вас искать в ВК? Или может скайп?

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

Выход ардуины - ко входу тахометра.  

Как Вас искать в ВК? Или может скайп?


на осциллограмме на выходе импульсов тахометра точно такие же импульсы как на входе только амплитудой меньше
 ВК: https://vk.com/livekhome киньте заявку в друзья
к сожалению скайпа нет

5N62V
Offline
Зарегистрирован: 25.02.2016

livek пишет:

 киньте заявку в друзья

Там у Вас что-то с настройками: подписаться могу, а в друзья добавить или месседж кинуть - нет

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

Там у Вас что-то с настройками: подписаться могу, а в друзья добавить или месседж кинуть - нет


это защита от всяких личностей)) а вы значит Дмитрий? Я вас добавил

5N62V
Offline
Зарегистрирован: 25.02.2016

Ошибку в коде обнаружил. Правилно так:

// вход - DD5
// выход - DD6
bool stage = 0;

void setup() {
  pinMode(6, OUTPUT);
}

void loop(){

  while (!(PIND & (1 << 5))); // ждем прихода импульса на пин 5
  if (!stage) {
    PORTD |= 1 << 6; //перевели пин 6 в HIGH
    stage = !stage;
    while (PIND & (1 << 5)); //ждем спада первого импульса
    return;
  }
  if (stage) {
    stage = !stage;
    while (PIND & (1 << 5)); //ждем спада второго импульса
    PORTD &= ~(1 << 6); //перевели пин 6 в LOW
  }

}

 

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

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

5N62V
Offline
Зарегистрирован: 25.02.2016

livek пишет:

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

О ! Значит все правильно работает теперь.  В 16 строке вставил return.

 

livek
livek аватар
Offline
Зарегистрирован: 29.07.2017

5N62V пишет:

В 16 строке вставил return.


заметил))