ФУОЗ +тахометр

mexaniktg
Offline
Зарегистрирован: 01.03.2015

dezz0riented я вот вместо датчика холла планирую ставить датчик на оптической паре. Хол может не корректно работать в близи сильного магнитного поля якоря генератора. Тоже есть идеи по поводу внедрения ардуино в планету. хочу дисплей внедрить и нанего выводить показания температуры оборотов напряжения и тд. На какой стадии твой проект? 

sergdvin
Offline
Зарегистрирован: 27.02.2016

Доброго врмени суток! Есть ли подвижки в проекте? Можно ли это реализовать на Atmega8?

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Подвижек нет, хватает дел поважнее, в том числе и с мотоциклом. Если когда и вернусь к теме, то буду переделывать - и код, и конструкцию.

Не вижу препятствий для реализации на меге 8.

UPD: если быть конкретнее, глянул - та старая прошивка (код скетча от которой я выкладывал) весит чуть меньше 7 метров. Это hex-файл, а значит в контроллере ещё раза в 2-3 меньше места займёт. А если его ещё переделать грамотно... Короче, хватит восьмерки :)

amator
Offline
Зарегистрирован: 27.03.2017

Эх жаль тема умерла :(
Читал взахлёб всю тему в ожидании счастливого конца, а его нет :(

Читал конечно не с проста, если тут еще есть кто, буду признателен за разъяснения по поводу корректировки данной программы под шторку (модулятор) в 120 градусов металла (от точки входа и начала зарядка катушки до точки выхода и искры 120 градусов сектор)

Я вообще полный профанище в программировании(последний раз связывался с программированием на первом курсе института и то там было простецкое всё на pascal и vbasic), arduino держу в руках вообще впервые...

Нужно чтоб двигатель одноцилиндровый имел две искры за оборот (в вмт и нмт с корректировкой уоз), для этого у меня будет применен модулятор с двумя лепестаки по 60 градусов, можно ли программу уважаемого dezz0riented, переделать под такой модулятор?

Тахометр меня не интересует, нужно лишь само формирование угла опережения

Я понимаю как смешно это читать программистам, но всё же буду признателен если разъясните

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Теоретически - можно, изменив одну-две строки в функции void ignite()

Практически - то был нубский код, лучше не втыкать в этот труп :) Переписать бы всё с прерываниями...

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

P.S.: Кстати, mexaniktg был прав насчет Холла, БСЗ нормально работало только с оптическим датчиком.

porta
Offline
Зарегистрирован: 29.11.2017

если вы делаете градицию 1000 2000 3000 5000 не надо использовать МП

яже думаю сделать все по другому.......

1 датчик (ена основе лазера) только для тахометра т сигнала на заряд катушки которая должна разрядится в свечу.

далее

даже при 6000 оборотах у нас есть 10000 микросекунд чтоб произвести рассчеты

угол 30 опереженияна этих оборотах будет равен примерно 833 микросекунды

теперь о горении свечи и смеси......примерно это 1500 микросекунды

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

 

slider
Offline
Зарегистрирован: 17.06.2014

тож задавался этой идеей.

да, там чем дальше в лес тем больше дров.

подстройка УОЗ от оборотов это понятно  (замер периода импульсов и корректировка УОЗ), 

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

голова вскипит от этих тонкостей с ДВС, ну нафиг его.   оно того не стоит.

в свое время поставил оптический модуль TCRT5000 с алиэкспресс за полбакса + к нему 7805 + б.у. катушка от японки (тойоты  двиг 2ZZGE). пришлось уоз поставить значительно раньше из-за задержки в катушке (повернуть датчик относительно крутящегося сектора). Поехало круто , оно и ладно.  Все не предусмотришь.

// Подождем эры дешевых электродвигателей и аккумуляторов , там всё гораздо проще чем с ДВС.  

porta
Offline
Зарегистрирован: 29.11.2017

slider пишет:

тож задавался этой идеей.

да, там чем дальше в лес тем больше дров.

подстройка УОЗ от оборотов это понятно  (замер периода импульсов и корректировка УОЗ), 

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

голова вскипит от этих тонкостей с ДВС, ну нафиг его.   оно того не стоит.

в свое время поставил оптический модуль TCRT5000 с алиэкспресс за полбакса + к нему 7805 + б.у. катушка от японки (тойоты  двиг 2ZZGE). пришлось уоз поставить значительно раньше из-за задержки в катушке (повернуть датчик относительно крутящегося сектора). Поехало круто , оно и ладно.  Все не предусмотришь.

// Подождем эры дешевых электродвигателей и аккумуляторов , там всё гораздо проще чем с ДВС.  

А если ты движок проэктируеш можно сказать с нуля?

 

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Гнусавый голос переводчика: "Я спина!"

Я, конечно, давно не писал. И даже особо не двигал проект (набивал руку на вещах попроще). Но всё же - не забрасывал окончательно. Значит ли это, что есть успех? Нет :P В принципе, я сделал другую плату и начал писать прошивку (с учётом советов SU-27-16 про таймеры, но в остальном по-своему). Однако, прежде чем заставить работать ФУОЗ, нужно заставить работать БСЗ. И вот с этим как раз проблемы.

Про то, что датчик Холла работать не будет, в теме уже сказали, и опыт это подтвердил. Попытался сделать свой оптический датчик, изготовил в количестве 2 шт - по сравнению с ДХ прогресс заметен, но ездить с ними всё равно нельзя.

Конструкция датчика такова: плата размером 40х25 мм с прорезью для захода модулятора (шторки). По сторонам прорези находятся выводные ИК-светодиод и фотодиод (отечественные, марка хз какая, светодиод 3мм), положенные на бок. Если в зазоре шторка, транзисторы открыты и на коммутатор идёт ноль. Если шторки нет - транзисторы закрыты, работает внутренняя подтяжка к плюсу (в коммутаторе). Резисторы SMD типоразмера 1206. Тот, что 250 Ом на светодиоде - на самом деле 3 резистора по 750, чтобы проще было мощщ рассеивать. Номиналы R2 и R4 менялись в процессе - изначально были 100 кОм и 4.7 к Ом, но "климатические испытания" в бане показали, что ток надо придушить.

Симптомы следующие. В прошлом пытался поездить на первом экземпляре датчика - можно было ехать минут 15-20, потом двигатель глох и не заводился без длительного перерыва. Задолбался толкать коня и после трёх таких тестов вернул обычное зажигание. В этом году решил попробовать ещё раз, поставил первый датчик (тихо-мирно лежавший в гараже) - не заводится вообще. VT1 реагирует на шторку, VT2 не меняет состояния (всё время закрыт, ЕМНИП). Хм, ладно... Достал второй датчик - с ним завелось. Хватило на 5 км пути, но смог сразу повторно завести. Развернулся, проехал назад ещё 3 км - заглох покрепче, завёл после передышки минут 15. Ещё была замечена такая аномалия - в момент включения зажигания была искра и через секунду ещё одна, хотя шторка через датчик не ходила в это время.

Есть предположения, где я мог ошибиться?

slider
Offline
Зарегистрирован: 17.06.2014

мож есть обоснование этой схемы , но мне кажется  1. ее сложность излишней 2. питать желательно хотябы от стабилизированного  напряжения,  с стаб.  током можно и обойтись.

и его надо затенять, чтоб свет лишний не попадал.
 

гляньте схему датчика в инете , который указывал выше . там фотодиод (-транзистор) , смещение резистором и главное - триггер шмитта на HC14  для гистерезиса (точного срабатывания).

/// у меня работает чётко с этим датчиком (зажигание из трех элементов 1.датчик 2.стаб 7805 3.катушка) .  Один трабл в том что для одноцилиндрового ДВС , сектор можно крутить в пределах 30-45градусов  при этом заводится и работает норм , поэтому не могу понять как выставить лучше , и так и так хорошо заводится и едет.  Разве что сделал так : нашел крайние положения сектора ~45гр при которых хуже заводится , и выставил посередине.   А по верхней мертвой точке не настроить , из-за задержки в обычной электронной катушке.

вот по этому раньше и задумывался про электронную схему, чтоб на ходу можно было покрутить резистор с ардуинкой, и понять при каком  УОЗ лучше тянет , так и оставить .   + при повышении оборотов ,чтоб ардуинка меняла УОЗ чтоб ДВС лучше пёр. Еще можно и датчик разряжения добавить , чтоб ардуинке понимать что нагрузка на двигатель возрасла, и тож по определенному подстроить УОЗ . 

///// поставьте готовое решение , типа январь5,7 , иль еще какой нить мозг ДВС и не тратьте время. До вас уже все придумали и посчитали.

////// пробовал модуль датчик холла - сразу нестабильно работает - полная лажа. С оптодатчиком все чётко.

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Что излишне сложного в 2х транзисторах? А вот про питание я тоже подумал. Стаб ставить не интересно, а вот конденсатор может и не помешал бы, надо будет проверить в будущем.

Выпаял VT2, прозвонил - целый, не пробит, не сожжён. Хм...

С удовольствием послушаю ещё идёи.

Teaby
Offline
Зарегистрирован: 15.07.2016

Приветсвую.

Помогите найти готовое решение стробоскопа для проверки УОЗ. Хотя вопрос конкретно каким способом подать импульс на Arduino (со свечи или коммутатора). На микросхему снимают с провода свечи через конденсатор и делитель напряжения.

Как быть с ардуиной и не выпалить пины????

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

dezz0riented пишет:

Есть предположения, где я мог ошибиться?

по схеме собран УПТ, т.е. усилитель постоянного тока без всякой термостабилизации.

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

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Teaby, что играет роль датчика положения коленвала?

BH, спасибо, странно конечно, в бане он работал... Ну допустим. Как бы Вы повысили термостабильность?

Отделять конденсатором не надо, потому что интересуют не просто импульсы - сигнал должен иметь скважность, соответствующую форме модулятора.

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Может поможет мой опыт по БСЗ столетней давности. http://moto-planeta.ru/635-ocherednojj-opticheskijj.-stremlenie-k.html

проехал несколько тысяч, потом Планета была продана. Может и сейчас где-то ездит. 

зы. Тогда еще не умели заказывать изготовление плат в Китае, а сейчас мотоциклы эти почти вымерли. 

Статье лет 18.

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Umka, спасибо, натыкался на эту схему. Хотел спросить как раз, насколько важно поставить именно LM211, а не LM311 или какой-нить LM393? 

Umka
Umka аватар
Offline
Зарегистрирован: 19.10.2012

Компаратор и есть компаратор. Можно и мосфет поставить, но с компаратором спокойнее, не надо думать о фронтах. 

Tango600
Offline
Зарегистрирован: 09.10.2018

Я последователь!

Только пока что дело дальше прошивки не дошло, я только начал.

Я оставлю это здесь, https://github.com/Tango600/EngineEmu, ладно?

Олег_Б
Offline
Зарегистрирован: 05.06.2014

SU-27-16 пишет:

Краткая теория

Перед подачей искры в катушке зажигания накопляется энергия. Накопление осуществляется замыканием катушки на землю. На осциллографе процесс накопления энергии выглядит вот так:

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

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

Увеличение времени накопления выше оптимального приводит лишь к перегреву катушки. Мощность искры от этого не увеличивается. Можете представить себе чашку чая — если чашка полная, то сколько туда не лей — полнее не станет, а вот штаны определенно можно промочить :)

Уменьшение времени приводит к недозаряду катушки и к уменьшению мощности искры. Этим страдают все трамблерные системы зажигания на оборотах выше 4-5тыс.

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

 

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

Немного неверно.

Для поджигания смеси необходима энергия, катушка зажигания рассчитана на выработку этой энергии. Энергия определяется проходящим через катушку током, для автомобильных моторов это около 7 ампер, или больше. На картинке "переходный процесс" - это коммутатор ограничил ток через катушку, когда тот достиг заданного. Если бы не ограничил, ток был бы больше, и искра была бы мощнее, а не "бесполезный нагрев". Однако, катушка, управляющий транзистор, рассчитаны на определённую, достаточную мощность искры, и могут не выдержать повышенного тока, так же увеличится эрозия электродов свечей из-за более мощной искры, однако смесь будет воспламеняться стабильнее. Ну и слово "эффективное" как-то неграмотно, ни к месту. Есть время накопления, и есть ограничение тока. После включения режима ограничения тока, вот где "переходный процесс", накопление прекращается, и коммутатор просто удерживает заданный ток через катушку. Поэтому там нет эффективного, и не-эффективного. 

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

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

 

Tango600
Offline
Зарегистрирован: 09.10.2018

Моя прошивка:
 

const int ignitionGap = 3000;

const byte pinInductor = 6;
unsigned long ignitionDelay = 0;
unsigned long stopTime = 0;
unsigned long lastStopTime = 0;
unsigned long startTime = 0;

volatile byte sensor = 0;
volatile long lastTime = 0;
volatile long deltaTime = 100000;

byte tablesLength = 9;
// RPM:                  2000,  3000,  4000,  5000,  6000,  7000, 8000, 9001, 10002
int tableRPMPoints[] = { 30000, 20000, 15000, 12000, 10000, 8571, 7500, 6666, 5999 };
int tableIgnDelays[] = { 348, 315, 291, 275, 265, 240, 220, 209, 205 };

void setup()
{
  pinMode(pinInductor, OUTPUT);
  attachInterrupt(0, OnSensor, RISING);
}

void OnSensor()
{
  deltaTime = micros() - lastTime;
  lastTime = micros();
  sensor = 1;
}

void loop()
{
  if (sensor == 1)
  {
    sensor = 0;
    if (deltaTime > 0 && deltaTime < 200000)
    {
      int i = 0;
      while (i < tablesLength && tableRPMPoints[i] > deltaTime)
      {
        i++;
      }
      if (i >= tablesLength)
        i = tablesLength - 1;

      if (tableIgnDelays[i] == 0)
        tableIgnDelays[i] = 1;
      ignitionDelay = (unsigned long)(deltaTime * (((unsigned long)tableIgnDelays[i] * 1000) / 360)) / 1000;

      startTime = lastTime + ignitionDelay;
      lastStopTime = stopTime;
      stopTime = startTime + ignitionGap;
    }
  }

  if ((startTime < micros() && stopTime > micros()) || lastStopTime > micros())
  {
    digitalWrite(pinInductor, HIGH);
  }
  else
  {
    digitalWrite(pinInductor, LOW);
  }
}

Все операции с плавающей точкой заменены на целочисленные.

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Tango600, на чем проверять собираетесь?

Код "по-компьютерному" смелый :) Опрос вместо прерываний, операции с long и float... Но ДВС медленная штука, с точки зрения быстрого микроконтроллера, так что прототип может и заработает. Это так, на будущее.

Tango600
Offline
Зарегистрирован: 09.10.2018

Просто я программист.

Где опрос? Там прерывания, а как ещё иначе??

Расчёт выражения с float занимает 44 микросекунды, проверял, так что всё успеется.

Прошивка обкатана на том эмуляторе ссылку на кторый я дал выше. На github'е.

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014

Tango600 пишет:

Где опрос? Там прерывания, а как ещё иначе??

Ну ладно, вижу, что OnSensor() объявлена, но не вызывается руками. А при каких условиях она вызывается? Где attachInterrupt?

Tango600 пишет:

Прошивка обкатана на том эмуляторе ссылку на кторый я дал выше. На github'е.

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

Tango600
Offline
Зарегистрирован: 09.10.2018

Забыл attachInterrupt(); да она там должна быть.

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

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

Tango600
Offline
Зарегистрирован: 09.10.2018

Отредактировал код, заменил все операции с плавающей точкой на целочисленные.

Tango600
Offline
Зарегистрирован: 09.10.2018

Подключал Ардуину к двигателю, точнее к датчику положения колневала, индуктивному, через резистор 20 кОм. Вопреки моим ожиданиям ничего не сгорело, в Ардуине была зашита прошивка "тахометр".

Вот такая:

volatile long lastTime = 0;
volatile int sensor = 0;
volatile long deltaTime = 0;
long lastDisplay = 0;
long mesaries = 0;
long allDeltaTime = 0;
int ledPin = 13;
int gap = 500;

void OnSensor()
{
  deltaTime = micros() - lastTime;
  lastTime = micros();
  sensor = 1;
}

void setup()
{
  Serial.begin(9600, SERIAL_8N1);
  Serial.println("");
  Serial.println("Init...");
  pinMode(ledPin, OUTPUT);

  digitalWrite(ledPin, HIGH);
  delay(gap);
  digitalWrite(ledPin, LOW);
  delay(gap);
  digitalWrite(ledPin, HIGH);
  delay(gap);
  digitalWrite(ledPin, LOW);

  attachInterrupt(0, OnSensor, RISING);

  Serial.println("RPM: 0 / Rotation time: 0");
}

void loop()
{
  if (sensor == 1)
  {
    sensor = 0;
    if (deltaTime > 0)
    {
      allDeltaTime = allDeltaTime + deltaTime;
      mesaries++;
    }
    if (millis() - lastDisplay > gap && mesaries > 0)
    {
      int rpm = 60000 / ((allDeltaTime / mesaries) / 1000);

      Serial.print("RPM: ");
      Serial.print(rpm);
      Serial.print(" / Rotation time: ");
      Serial.println(deltaTime);
      lastDisplay = millis();
      allDeltaTime = 0;
      mesaries = 0;
    }
  }
}

Tango600
Offline
Зарегистрирован: 09.10.2018

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

Tango600
Offline
Зарегистрирован: 09.10.2018

Выбрал такую схему.

Плата, в программе Sprint-Layout 6.

https://www.dropbox.com/s/y41dltdkx94zb9f/%D0%9F%D0%BB%D0%B0%D1%82%D0%B02.lay6?dl=1

Рисунок платы.

dezz0riented
dezz0riented аватар
Offline
Зарегистрирован: 27.07.2014
В этом году наконец-то закончил начатое. И с БСЗ разобрался, и с ФУОЗ. Думаю, потихоньку опишу результаты, но не все одним махом - других дел тоже хватает. Про БСЗ насколько хватило мозгов подробно написал в другом месте. Здесь остановимся на датчике, потому что именно о нем шла речь в прошлый раз.
 
Короче, последовал совету Umka, сделал с компаратором, вроде перестало глохнуть. Взял LM393, надеюсь темп диапазона 0..70 градусов хватит. ИК-светодиод и фототранзистор на Али парами продаются, PT204 и IR204.
Упрощенная схема вот. Я добавлял еще диод для защиты компаратора от обратной полярности (т.к. разъем без ключа) и синий светодиод для удобства настройки, ну это уже необязательные компоненты.
схема оптического датчика (зажигание)
Резисторы перед светодиодом - 1206 х 2 шт. При этих номиналах и 14 В бортсети они будут выделять 0.37 Вт в тепло, а один корпус 1206 расчитан на 0.25 Вт.
 
ФУОЗ делал на Atmega8, писал в Atmel Studio. Про него как-нибудь потом. Надо еще определиться, как код вставлять в таком случае...
Tango600
Offline
Зарегистрирован: 09.10.2018

Приведённую мной схему не использовать, не работает как надо.