IGO61

Фуоз-676 (Продолжение)

3 265 сообщений в этой теме

AvrelijBer    0

Всем привет! НужОн совет!
Есть АЗЛК М-2140 84-го года, стоит контактное транзисторное зажигание, хочется попробовать ФУОЗ - с чего бы правильнее начать (плата, прошивка)? Думал сначала просто как октан-корректор, потом + ДАД, + термо, + контакт на карб.
Паять умею, с ардуино общался (коптеры).
Спасибо!
зы. чем больше читаю тему, тем больше понимаю (где-то на 25-й странице), что сам не разберусь
ззы. не понял - где я карму попортил свою (см. аттач)

Untitled-1.png

Изменено пользователем AvrelijBer

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Shia-Tan    2

Добрый день. Разработал собственный простенький вариант прошивки с использованием прерываний. Так как в ассемблере я новичок то ошибок в коде наверное много. Выкладываю сюда asm в надежде, что опытные люди подскажут мне, что я мог сделать, по их мнению, неправильно. Исходники подробно прокомментированы и понять алгоритм, заложенный в программе, не сложно. Жду ваших замечаний.

676_interrupt.asm

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    168

 Всем привет!

Shia-Tan, своё видение вопроса - это хорошо. Но, прочитав лишь "шапку" программы, заметил принципиальную ошибку. Из описания можно сделать вывод, что до 162об/мин импульсы зажигания не будут формироваться. Если это так, то в межсезонье или зимой, на дохлом аккуме машин просто не заведётся. Это опыт не одного поколения "зажигателей". Если бы программа до этих оборотов просто транслировала сигнал со входа на выход без опережения, а выше них (162об/мин) формировала бы УОЗ, то претензии не возникало бы.

Пока так, поизучаю по возможности сам текст. 

 

Изменено пользователем IGO61

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sl_64    3

Shia-Tan Привет, на мой взгляд ошибка у тебя в том что основной цикл, main пустой. Ты всю программу

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

1) определяем источник

2) выставляем флаг (при инициализации создали свой флаговый регистр),переписываем значения таймера, перезагружаем таймер .........ну и так далее .

3)сбрасываем бит регистра прерывания

4)выходим из прерывания.

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Shia-Tan    2

IGO61, спасибо про морозы и слабый аккумулятор не подумал, устраню.

sl_64,  не согласен, главный цикл сделан пустым специально, чтобы как раз не плодить лишних вспомогательных переменных и не беспокоиться о сохранении перед и восстановлении регистров после прерывания. Если во время расчетов,  которые были бы главном цикле, пришло бы прерывание (а такое вполне возможно) то пришлось бы придумывать дополнительные "костыли" и усложнять логику обработки входных сигналов. А так я гарантированно обрабатываю текущее прерывание до конца и даже если в это время произошло другое я могу очистить его флаг как-будто его и не было если это нужно по логике программы. А правда чем  плох пустой главный цикл, какие технические проблемы могут из-за этого возникнуть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
donec    132
3 часа назад, Shia-Tan сказал:

А правда чем  плох пустой главный цикл, какие технические проблемы могут из-за этого возникнуть?

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

6.png.07f498920f4fc3cf98347fe7b3cb002a.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Загрузка...
sl_64    3
13 часа назад, Shia-Tan сказал:

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

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

так контроллер и будет работать. ИМХО при таком подходе теряется весь смысл использовать прерывания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Shia-Tan    2

sl_64  Добрый день,  в этой версии я старался упростить реализацию алгоритма, избавиться от циклов постоянной проверки состояния на входе от ДХ и отслеживания момента когда нужно "искрить". Прерывания, в этом случае, подходят идеально, существенно упрощают код, делают алгоритм менее запутанным. Уточню насчет "как будто его не было". Прерывания от ДХ по НУ и ВУ никогда не помешают друг другу, а вот от TMR1, в случае его опоздания с "искрой", возникшее во время обработки пр. по НУ  (такого в принципе не должно быть но мало ли что, к примеру ошибка в расчетах опережения)  в дальнейшем может помешать, поэтому на всякий случай  BCF PIR1,0 т.к. "искрить" по таймеру уже поздно,  "отискрились" чуть раньше по НУ.  Секции обработки НУ и ВУ являются критическими их прерывать нельзя, только поэтому я полностью запихнул их в обработчик прерывания. Чем занять процессор между прерываниями пока не придумал - предложите.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    168

Всем привет!

У меня вопрос/предложение. А зачем используется вход "INT" и в обработчике переключается режим "по спаду/по фронту"?  Можно просто применить режим прерывания по смене уровня на входе. А в обработчике оценивать, что пришло на вход - спад или фронт и направлять программу в ту или иную сторону.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Shia-Tan    2

Просто неопытен еще и реализовал то, что показалось проще. Из datasheet не понял как при смене уровня на входе потом определять на какой из 5 ног PORTA этот уровень сменился, к тому же на них будут навешаны ДАД, ОК, термометр... Не возникнет ли прерывание от них?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Pilulkin    161

Здравия всем!
И у меня вопросики. Использование WDT - оценивали ли Вы возможную пользу и вред от его использования в этом устройстве? И какая-то абракадабра в таблицах УОЗ. На картинке наглядно (Это преобразованный старший и младший байты в десятичное число. Задержка ессно будет зеркальным отображением относительно горизонтали)

Gr.JPG.aa8b5886ff493d26a814429ea6a34856.JPG
К стати не просветите каким образом штатные системы карбюратора обеспечивают стабилизацию ХХ при изменении нагрузки на ДВС?

Изменено пользователем Pilulkin

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Shia-Tan    2

Pilulkin  Добрый день. Польза, как мне кажется, это перезапуск программы при сбое.  Вреда не усмотрел. Если он возможен, то при каком стечении обстоятельств и в чем он может выразиться?

Про абракадабру. Я тоже сначала не мог понять что же такое я получил. В приложенных файлах график УОЗ в градусах выглядит красиво, а микросекундах  аж страшно становится), взгляните пожалуйста на исходники для расчетов (насколько помню Вы с Delphi 7 знакомы),  может быть где-то ошибка?

Image.png

calcAngle.7z

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    168
43 минуты назад, Shia-Tan сказал:

 Из datasheet не понял как при смене уровня на входе потом определять на какой из 5 ног PORTA этот уровень сменился, к тому же на них будут навешаны ДАД, ОК, термометр... Не возникнет ли прерывание от них?

В регистре INTCON разрешаете прерывание по смене уровня на входах порта А (общий "включатель") - бит RAIE=1. А в регистре IOCA (банк 1, локальный "включатель", по пинам) выставляете в 1 тот пин, который собираетесь обслуживать в прерывании. Соответственно, придётся подправить схему, чтоб не было конфликта сигналов от ДАД и т.п.

В работе по смене уровня на выбранном пине произойдёт прерывание (бит RAIF =1 в регистре INTCON). В обработчике оцениваете состояние (НУ или ВУ) пина и переходите, куда планируете  по тому или иному уровню.

Не забываем после обработки сбрасывать бит RAIF в регистре INTCON в ноль - он сам не сбрасывается (чтоб не зациклиться в обработчике).
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Shia-Tan    2
1 час назад, Pilulkin сказал:

К стати не просветите каким образом штатные системы карбюратора обеспечивают стабилизацию ХХ при изменении нагрузки на ДВС?

Они никаким образом не обеспечивают стабилизацию ХХ при изменении нагрузки на ДВС. Фразу в комментариях к программе где это упоминается можно считать непреднамеренной оговоркой.

16 минут назад, IGO61 сказал:

В регистре INTCON разрешаете прерывание по смене уровня на входах порта А (общий "включатель") - бит RAIE=1.....

Спасибо, не догадался до такого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sl_64    3
1 час назад, Shia-Tan сказал:

к тому же на них будут навешаны ДАД, ОК, термометр... 

И обработку всего этого вы тоже планируете загнать в прерывание? 

Если нет , то как быть с этим

18 часов назад, Shia-Tan сказал:

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Pilulkin    161
1 час назад, Shia-Tan сказал:

Pilulkin  Добрый день. Польза, как мне кажется, это перезапуск программы при сбое.  Вреда не усмотрел. Если он возможен, то при каком стечении обстоятельств и в чем он может выразиться?

Вот в этом перезапуске и кроется подвох. Во время рестарта состояние выходов по большому счету неопределено. И кто гарантирует, что сигнал на искрение не возникнет в самый неподходящий момент (на противоходе так сказать - не путать с нормальным УОЗ). А если вис контроллика систематический? Т.е. с периодичностью в 1,152 сек будет перегружаться контроллик и искрить непонятно в когда :-). Безопаснее дать заглохнуть двигателю ИМХО. Это так, то что лежит на поверхности.
По поводу абракадабры обстоятельно посмотрю на следующей неделе. Надо понять, как Вы отрабатываете задержку (ведь согласитесь, что мы не опережаем, а задерживаем :yes:).  Но опять таки на мой незрячий глаз попробуйте установить НУОЗ ну градусов 9 (это ведь вполне нормальный НУОЗ, по крайней мере не заоблачный) и рассчитайте таблички/графики.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Shia-Tan    2
17 часов назад, Pilulkin сказал:

Вот в этом перезапуске и кроется подвох.

Спасибо, WDT действительно нужно отключить.

 

17 часов назад, Pilulkin сказал:

Надо понять, как Вы отрабатываете задержку

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

18 часов назад, sl_64 сказал:

И обработку всего этого вы тоже планируете загнать в прерывание? 

Да, по моим прикидкам обработка 3-х АЦП в самом худшем случае займет ~120 мксек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sl_64    3

Всем привет.

Игорь извини что в твоей теме задаю вопросы.

Кто точно знает  соотношение шторка–окно распределителя зажигания  для 4х цилиндрового двс?

Где то попадалась инфа что 70 на 30 % ,так ли это?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    168

Всем привет!

В угловых величинах так: 60градусов - просвет, 120 градусов - металлическая шторка. Это для стандратного 4-цилиндрового ВАЗовского дрыгателя.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Pilulkin    161

Или я не понял вопрос или 60+30+60+30+60+30+60+30=360
dvuxkonturnoe-zaghiganie-001.jpg.11043ecbdec4b84c54afb02020385cf9.jpg
Игорь, ты для "левой" :D шторки градусы привел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
sl_64    3

Если 70 на 30 % правильно то у меня получилось 63 на 27 градусов.

Из за чего был задан вопрос- Shia-Tan строит свою прогу  исходя из этих значений (58 и 32 градуса соответственно)

 Pilulkin ,а есть у вас возможность замерить шторку и окно "правую"  штангенциркулем. 

Изменено пользователем sl_64

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Pilulkin    161

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

К стати 70%х30% неправильно. А вот скважность 3 или 1/3 (кто как считает)  и характеризует сигнал для коммутатора.

Изменено пользователем Pilulkin

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IGO61    168
2 часа назад, Pilulkin сказал:

Или я не понял вопрос или 60+30+60+30+60+30+60+30=360
Игорь, ты для "левой" :D шторки градусы привел.

Эт я косанул с ответом. Да, для шторок в трамблёре должно быть 60 градусов - шторка, 30 - просвет и так четыре раза. Это я попутал с "бабочкой" на коленвалу.
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Shia-Tan    2
2 часа назад, sl_64 сказал:

Shia-Tan строит свою прогу  исходя из этих значений (58 и 32 градуса соответственно)

Как я пришел к таким размерам. Измерил диаметр, он оказался 48 мм. Измерения производил штангелем с дисплеем. Померил прорезь, как правильно заметил уважаемый Pilulkin, это размер хорды. В моем случае ~ 13.2 мм. Затем посчитал углы равнобедренного треугольника со сторонами 24 мм, 24 мм, 13.2 мм получил углы 31.92, 74.04, 74.04. Учитывая то, что при измерении мог ошибиться на 2-3 сотых принял угол равным 32 гр. предполагая, что конструкторы сего трамблера все-таки ребята не глупые и закладывали возможность его применения с цифровыми блоками зажигания, где 32 очень удобная величина. Чтобы не считать вручную использовал https://www.calc.ru/raschet-treugolnika.html

Изменено пользователем Shia-Tan
ошибка в цифре

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Shia-Tan    2

Только что сходил к машинке, проверить не ошибся ли я с размерами. Теперь измерил шторку, получилось 23,3 мм. посчитал треугольник 24 на 24 на 23,3, получил 58,08 60,96, 60,96.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас