Аппаратный ШИМ против программного

Про байтики и логику ЭБУ
frig
contributor
contributor
Posts: 569
Joined: Wed Oct 23, 2013 8:05 pm

Re: Аппаратный ШИМ против программного

Post by frig »

XDA, если канал один, то ставим таймер на время между импульсами ногу в ноль, при срабатывании переставляем его на время импульса ногу в единицу, при срабатывании переставляем на время между импульсами... Не нужно таймер дергать 256 раз в промежутке.
Если делать так, как описали вы, то потенциально можно с этой самой частотой в 500Гц, и несколькими частотами ниже (каждый второй, каждый третий тик) обрабатывать сразу несколько каналов, нет смысла городить на каждый канал такое.
Это первое что в голову пришло, я не занимался изучением вопроса. Поверхностно сталкивался вместе с робостроителями, которым надо на слабой меге на одном таймере крутить много много серв. Там задача точно такая же.
skype: frig_frig
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Базовая плата: управление актуаторами

Post by Maxi »

russian wrote: Сегодня у меня настроение не фонтан, поэтому я продолжу жечь напалмом: это просто УЖАС, а не рассуждение. Я сейчас очень неприятно возможно скажу, но это описание проблемы "500*256" можно смело делать нарицательной фразой, смысл которой: пожалуйста, позвольте программистам программировать.
А он между прочим прав. У вашей реализации джитер диспетчера. исходя их sleep(time to switch) и так вы ничего РАБОЧЕГО не построите!

Проектировать ШИМ не имея требований к этому ШИМ - занятие абсолютно бессмысленное. Где то будет работать ваша реализация. Где то 500*256 а где то вы оба обламаетесь и только реальный аппаратный ШИМ прокатит. Это так сказать - с моей компетенции...
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Аппаратный ШИМ против программного

Post by Maxi »

frig wrote:XDA, если канал один, то ставим таймер на время между импульсами ногу в ноль, при срабатывании переставляем его на время импульса ногу в единицу, при срабатывании переставляем на время между импульсами...
если каналов 9?
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Аппаратный ШИМ против программного

Post by Sergey89 »

Джиттер будет в любой программной реализации (когда таймер не напрямую управляет ножкой), но проявляться может при стечении некоторых обстоятельств. Вопрос в его величине по отношению к дискрету ШИМ. Как я понимаю, самый худший случай будет тогда, когда одновременно нужно поменять уровни всех сигналов и в принципе эту величину можно оценить.
frig
contributor
contributor
Posts: 569
Joined: Wed Oct 23, 2013 8:05 pm

Re: Аппаратный ШИМ против программного

Post by frig »

У вашей реализации джитер диспетчера.
У нашей текущей? Так переписывают же вроде прямо сейчас. Или у нашей переписанной?
Проектировать ШИМ не имея требований к этому ШИМ - занятие абсолютно бессмысленное. Где то будет работать ваша реализация.
Согласен. Да и требования к разным каналам разные и нет смысла все делать с одной точностью.
если каналов 9?
А если каналов 9, то надо спросить у кого-то умного, а не у меня :D
Мне в голову приходит только вариант, о котором я писал в том сообщении.
Если делать так, как описали вы, то потенциально можно с этой самой частотой в 500Гц, и несколькими частотами ниже (каждый второй, каждый третий тик) обрабатывать сразу несколько каналов, нет смысла городить на каждый канал такое.
Только с поправкой, что частоты также могут быть разными, я там затупил, мне это свойственно. В любом случае 5% производительности на канал не получается. Возмутило именно это.

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

В общем повторюсь - это просто размышления на тему и спросить лучше кого-то умного.
skype: frig_frig
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

Напоминаю, что тестовые замеры есть вот тут

Все могут открыть файл faster_fast_irq.logicdata и обсуждать предмет намного более предметно. Открывается он вот этой програмой

Из смешного - у этого файла на форуме id=1, это первый аттач на форуме :)
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
frig
contributor
contributor
Posts: 569
Joined: Wed Oct 23, 2013 8:05 pm

Re: Аппаратный ШИМ против программного

Post by frig »

russian, я верно понимаю, что эти сигналы сгенерированы тем старым и потенциально неточным кодом? Я верно понимаю, что 0,1% погрешности это то, о чем мы говорим?
skype: frig_frig
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

frig wrote:russian, я верно понимаю, что эти сигналы сгенерированы тем старым и потенциально неточным кодом? Я верно понимаю, что 0,1% погрешности это то, о чем мы говорим?
Самый неточный - это "thread sleep" иплементация, эта имплементация сейчас единсвенная готовая именно в исходниках rusEfi
"fast irq" имплементация, которая по ссылке - это точнная, но многожрушая. Это прототип как раз по формуле "500*256"
Сейчас в работе "smart fast irq", которая будет такая же по точности, как и "fast irq" - но не будет потреблять ресурсы по формуле "500*256"
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

Re: Аппаратный ШИМ против программного

Post by XDA »

Maxi wrote:
frig wrote:XDA, если канал один, то ставим таймер на время между импульсами ногу в ноль, при срабатывании переставляем его на время импульса ногу в единицу, при срабатывании переставляем на время между импульсами...
если каналов 9?
тогда добавляются 9 переменных счётчика, соответственно добавляется тактов на их обсчёт. вывод останется один, ну и такты на заход-выход в прерывание.
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Аппаратный ШИМ против программного

Post by Maxi »

russian wrote:Напоминаю, что тестовые замеры есть вот тут

Все могут открыть файл faster_fast_irq.logicdata и обсуждать предмет намного более предметно. Открывается он вот этой програмой

Из смешного - у этого файла на форуме id=1, это первый аттач на форуме :)
Эти замеры не годятся потому что их надо повторить с минимум 9-ю одновременно работающих PWM..


По сути же.
нужно 5 PWM 8бит 15гц расширяемых до 8 - это адсорбер-бустконтроль-2 клапана фазовращателя-бензонасос (что то еще). Естественно их надо делать по методу предложному выше в едином цикле в таймере. период таймера само собой 66ms/256=260mks

Дальше электронный дроссель и моментный рхх - это 1 pwm но он должен иметь разрешение 16 бит минимум и частоту от 50 до 500гц программируемую. и два выхода - работающих в синфазном или противофазном режиме. И я не вижу как его сделать иначе чем аппаратно.

(до катушек-форсунок мы еще даже не дошли)
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

Maxi wrote:Эти замеры не годятся потому что их надо повторить с минимум 9-ю одновременно работающих PWM..
Отнють нет, ничего повторять не нужно. Если открыть глаза, то там сейчас 8 каналов - у меня на анализаторе больше каналов просто нет. Зумим, зумим, зумим - и, оппа, магия - нижние два канала это тоже ШИМ, только очень высокой частоты.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

Re: Аппаратный ШИМ против программного

Post by XDA »

немного об аппаратной реализации точного по времени дёргания ногами (это и ШИМ, и форсунки, и зажигание)
+ метода: исключительно точный по времени, джиттер минимальный, задействование аппаратных ресурсов, возможность реализовать не только ШИМ, но и BAM и дельта-сигма
- метода: повышенные программные накладные расходы на изменение параметров ШИМа, расход памяти пропорционально точности ШИМа.

реализация:
предположим нам нужно 8 8битных ШИМов, частота любая, в пределах возможности железа.
резервируем буфер на 256 байт. каждый бит в байте олицетворяет состояние соответствующего канала ШИМ.
рассмотрим только 1й бит. чтобы сделать ШИМ, нужно заполнить массив значениями вида 111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000
где число единиц и есть скважность ШИМа.
изменение скважности ШИМа - цикл по буферу с изменением соответствующего числа ячеек.

инициализируем DMA вывод через SPI с прерыванием по окончанию передачи. в прерывании перезапускаем DMA на начало массива.
скорость передачи настраивается в соответствии с необходимой частотой ШИМа.

аппаратная часть:
берём микросхему 74HC595 - это сдвиговый регистр с защёлкой и подключаем её к SPI выходу платы.
микросхему 74VHC393 - это двоичный 4х разрядный счётчик, вход подключаем к тактовому сигналу SPI, а 3 бит вывода подключаем к защёлке сдвигового регистра.
это приводит к тому, что каждый 8 бит состояние сдвигового регистра автоматически защёлкивается.
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Аппаратный ШИМ против программного

Post by Sergey89 »

Я правильно понимаю, что в этом случае частота получается одинаковая на все 8 каналов?
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Аппаратный ШИМ против программного

Post by Maxi »

russian wrote:
Maxi wrote:Эти замеры не годятся потому что их надо повторить с минимум 9-ю одновременно работающих PWM..
Отнють нет, ничего повторять не нужно. Если открыть глаза, то там сейчас 8 каналов - у меня на анализаторе больше каналов просто нет. Зумим, зумим, зумим - и, оппа, магия - нижние два канала это тоже ШИМ, только очень высокой частоты.
Может стоит повторить с более реальными частотами но в более жестких условиях (DC=0.1% 99.9%)
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

Maxi wrote:Может стоит повторить с более реальными частотами но в более жестких условиях (DC=0.1% 99.9%)
Времени нет :(
Исходники отдельного тестового проекта доступны. Я просто совсем уверен, что там всё в порядке, поэтому для меня приоритет повторения теста просто нулевой :(
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

Re: Аппаратный ШИМ против программного

Post by XDA »

Sergey89 wrote:Я правильно понимаю, что в этом случае частота получается одинаковая на все 8 каналов?
да, именно так. но при этом очень просто сделать, например, сдвиг по фазе между ШИМами,
так же на любом канале можно реализовать ШИМ с в два раза большей частотой, но на 1 бит разрешения меньше. и т.д.

и самое главное - это не вносит практически никаких дополнительных финансовых затрат, мелкая логика стоит минимально...
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

XDA wrote:и самое главное - это не вносит практически никаких дополнительных финансовых затрат, мелкая логика стоит минимально...
Друзья, вы слона не замечаете - что вы порт SPI этим займёте полностью?
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Аппаратный ШИМ против программного

Post by Sergey89 »

У нас их целых 3, но вот практической ценности в таком числе ШИМ каналов с одинаковой частотой я пока не могу придумать. Peak and hold для форсунок можно сделать ещё проще, а остальные актуаторы вроде совсем разные частоты требуют. Разве что 4 фазовращателя кто-то захочет крутить.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

Sergey89 wrote:У нас их целых 3...
Вот только один их них например делит пины с АЦП. Остаётся примерно два. Если один из двух убить на эту странную реализацию ШИМ - какая в итоге будет выгода? 3 провода вместо восьми, плюс ведро геммороя?

Это мёртрвая идея. Скажу откровенно - люди, серьёзно это обсуждающие меня пугают :)
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Аппаратный ШИМ против программного

Post by Sergey89 »

SPI ремапица на другие пины. А выгода такая, что имеем 8 ШИМ каналов с аппаратной точностью, но интереснее было бы сделать с разными частотами. В таком виде как сейчас предложено я не вижу практического применения, т.к. проще на аппаратные таймеры повестить что можно, а что нельзя сделать софтом. Геморроя не больше чем при реализации программного ШИМ на одном канале таймера :)
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

Sergey89 wrote:SPI ремапица на другие пины
Я вижу только два набора SPI пинов на не-АЦП пинах: PB3-PB4-PB5 и PB13-PB14-PB15. Есть еще варианты какие-то?
Причём с пином PB4 кажется есть какие-то нюансы.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

Re: Аппаратный ШИМ против программного

Post by Sergey89 »

а мы сейчас про дискавери говорим? я говорил про отдельный камень.
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

Sergey89 wrote:а мы сейчас про дискавери говорим? я говорил про отдельный камень.
А... Космические корабли бороздят просторы вселенной :)
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
frig
contributor
contributor
Posts: 569
Joined: Wed Oct 23, 2013 8:05 pm

Re: Аппаратный ШИМ против программного

Post by frig »

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

ИМХО все это в итоге все равно может быть реализовано в коде и достаточно гибко. Есть свободные аппаратные таймеры - используем их. Нет - используем программную реализацию. Баланс должен быть. Но раз уж мы все равно используем как минимум один аппаратный таймер, то почему-бы не использовать тогда другие свободные?
skype: frig_frig
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

frig wrote:russian, смысл упираться в discovery?
Смысл огромный! Лично я планирую еще достаточно долго использовать только discovery. Разговоры об использовании чипа отдельно на текущем этапе - это как минимум флуд, а как максимум глупость.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
frig
contributor
contributor
Posts: 569
Joined: Wed Oct 23, 2013 8:05 pm

Re: Аппаратный ШИМ против программного

Post by frig »

Разговоры об использовании чипа отдельно на текущем этапе - это как минимум флуд, а как максимум глупость.
Есть разные мнения на этот счет :D
skype: frig_frig
User avatar
AndreyB
Site Admin
Posts: 14292
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Аппаратный ШИМ против программного

Post by AndreyB »

frig wrote:Есть разные мнения на этот счет :D
И это прекрасно. В уважительном и аргументированном споре рождается истина.

PS: Тем более, что я прав :)
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
frig
contributor
contributor
Posts: 569
Joined: Wed Oct 23, 2013 8:05 pm

Re: Аппаратный ШИМ против программного

Post by frig »

Тем более, что я прав :)
И на этот счет тоже есть разные мнения :D
skype: frig_frig
User avatar
Maxi
Sr Consultant
Sr Consultant
Posts: 786
Joined: Wed Oct 23, 2013 4:25 pm

Re: Аппаратный ШИМ против программного

Post by Maxi »

Sergey89 wrote:У нас их целых 3, но вот практической ценности в таком числе ШИМ каналов с одинаковой частотой я пока не могу придумать. Peak and hold для форсунок можно сделать ещё проще, а остальные актуаторы вроде совсем разные частоты требуют. Разве что 4 фазовращателя кто-то захочет крутить.
Вообще надо бы - субары никто не отменял.
Mad Max
Posts: 187
Joined: Wed Nov 13, 2013 12:34 pm
Location: Ukraine, Kharkov

Re: Аппаратный ШИМ против программного

Post by Mad Max »

Для справки- У Субар чаще всего 2 фазовращателя- на впуске.
4 фазы это только Н-6 3,6л моторы, STI08+, Legacy GT 02+ JDM only (EJ20Y)
Skype- max.mad486
Post Reply