Аппаратный ШИМ против программного
Re: Аппаратный ШИМ против программного
XDA, если канал один, то ставим таймер на время между импульсами ногу в ноль, при срабатывании переставляем его на время импульса ногу в единицу, при срабатывании переставляем на время между импульсами... Не нужно таймер дергать 256 раз в промежутке.
Если делать так, как описали вы, то потенциально можно с этой самой частотой в 500Гц, и несколькими частотами ниже (каждый второй, каждый третий тик) обрабатывать сразу несколько каналов, нет смысла городить на каждый канал такое.
Это первое что в голову пришло, я не занимался изучением вопроса. Поверхностно сталкивался вместе с робостроителями, которым надо на слабой меге на одном таймере крутить много много серв. Там задача точно такая же.
Если делать так, как описали вы, то потенциально можно с этой самой частотой в 500Гц, и несколькими частотами ниже (каждый второй, каждый третий тик) обрабатывать сразу несколько каналов, нет смысла городить на каждый канал такое.
Это первое что в голову пришло, я не занимался изучением вопроса. Поверхностно сталкивался вместе с робостроителями, которым надо на слабой меге на одном таймере крутить много много серв. Там задача точно такая же.
skype: frig_frig
Re: Базовая плата: управление актуаторами
А он между прочим прав. У вашей реализации джитер диспетчера. исходя их sleep(time to switch) и так вы ничего РАБОЧЕГО не построите!russian wrote: Сегодня у меня настроение не фонтан, поэтому я продолжу жечь напалмом: это просто УЖАС, а не рассуждение. Я сейчас очень неприятно возможно скажу, но это описание проблемы "500*256" можно смело делать нарицательной фразой, смысл которой: пожалуйста, позвольте программистам программировать.
Проектировать ШИМ не имея требований к этому ШИМ - занятие абсолютно бессмысленное. Где то будет работать ваша реализация. Где то 500*256 а где то вы оба обламаетесь и только реальный аппаратный ШИМ прокатит. Это так сказать - с моей компетенции...
Re: Аппаратный ШИМ против программного
если каналов 9?frig wrote:XDA, если канал один, то ставим таймер на время между импульсами ногу в ноль, при срабатывании переставляем его на время импульса ногу в единицу, при срабатывании переставляем на время между импульсами...
Re: Аппаратный ШИМ против программного
Джиттер будет в любой программной реализации (когда таймер не напрямую управляет ножкой), но проявляться может при стечении некоторых обстоятельств. Вопрос в его величине по отношению к дискрету ШИМ. Как я понимаю, самый худший случай будет тогда, когда одновременно нужно поменять уровни всех сигналов и в принципе эту величину можно оценить.
Re: Аппаратный ШИМ против программного
У нашей текущей? Так переписывают же вроде прямо сейчас. Или у нашей переписанной?У вашей реализации джитер диспетчера.
Согласен. Да и требования к разным каналам разные и нет смысла все делать с одной точностью.Проектировать ШИМ не имея требований к этому ШИМ - занятие абсолютно бессмысленное. Где то будет работать ваша реализация.
А если каналов 9, то надо спросить у кого-то умного, а не у меняесли каналов 9?
Мне в голову приходит только вариант, о котором я писал в том сообщении.
Только с поправкой, что частоты также могут быть разными, я там затупил, мне это свойственно. В любом случае 5% производительности на канал не получается. Возмутило именно это.Если делать так, как описали вы, то потенциально можно с этой самой частотой в 500Гц, и несколькими частотами ниже (каждый второй, каждый третий тик) обрабатывать сразу несколько каналов, нет смысла городить на каждый канал такое.
Еще вариант - с перестановкой таймера для обработки нескольких каналов. В голове видится аналог некой магнитофонной ленты в массиве, в которой записано какую ногу(или ноги) при следующей отработке таймера в какое положение надо поставить и времени перестановки таймера. Т.е. таймер опять таки дергается не с максимальной частотой, а отрабатывает "зазоры". Остается открытым вопрос в расчете этой ленты и может ли она быть цикличной.
Но быстро у меня в голове не сложилось как это правильно сделать и есть серьезные опасения, что обработка там будет весьма непростой и может сожрать весь профит. В любом случае с ростом количества каналов при таком подходе вычислительная сложность будет расти и рано или поздно профит станет нулевым. Но как рано это произойдет - я не знаю.
В общем повторюсь - это просто размышления на тему и спросить лучше кого-то умного.
skype: frig_frig
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
Напоминаю, что тестовые замеры есть вот тут
Все могут открыть файл faster_fast_irq.logicdata и обсуждать предмет намного более предметно. Открывается он вот этой програмой
Из смешного - у этого файла на форуме id=1, это первый аттач на форуме
Все могут открыть файл 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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
russian, я верно понимаю, что эти сигналы сгенерированы тем старым и потенциально неточным кодом? Я верно понимаю, что 0,1% погрешности это то, о чем мы говорим?
skype: frig_frig
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
Самый неточный - это "thread sleep" иплементация, эта имплементация сейчас единсвенная готовая именно в исходниках rusEfifrig wrote:russian, я верно понимаю, что эти сигналы сгенерированы тем старым и потенциально неточным кодом? Я верно понимаю, что 0,1% погрешности это то, о чем мы говорим?
"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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
тогда добавляются 9 переменных счётчика, соответственно добавляется тактов на их обсчёт. вывод останется один, ну и такты на заход-выход в прерывание.Maxi wrote:если каналов 9?frig wrote:XDA, если канал один, то ставим таймер на время между импульсами ногу в ноль, при срабатывании переставляем его на время импульса ногу в единицу, при срабатывании переставляем на время между импульсами...
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
Re: Аппаратный ШИМ против программного
Эти замеры не годятся потому что их надо повторить с минимум 9-ю одновременно работающих PWM..russian wrote:Напоминаю, что тестовые замеры есть вот тут
Все могут открыть файл faster_fast_irq.logicdata и обсуждать предмет намного более предметно. Открывается он вот этой програмой
Из смешного - у этого файла на форуме id=1, это первый аттач на форуме
По сути же.
нужно 5 PWM 8бит 15гц расширяемых до 8 - это адсорбер-бустконтроль-2 клапана фазовращателя-бензонасос (что то еще). Естественно их надо делать по методу предложному выше в едином цикле в таймере. период таймера само собой 66ms/256=260mks
Дальше электронный дроссель и моментный рхх - это 1 pwm но он должен иметь разрешение 16 бит минимум и частоту от 50 до 500гц программируемую. и два выхода - работающих в синфазном или противофазном режиме. И я не вижу как его сделать иначе чем аппаратно.
(до катушек-форсунок мы еще даже не дошли)
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
Отнють нет, ничего повторять не нужно. Если открыть глаза, то там сейчас 8 каналов - у меня на анализаторе больше каналов просто нет. Зумим, зумим, зумим - и, оппа, магия - нижние два канала это тоже ШИМ, только очень высокой частоты.Maxi wrote:Эти замеры не годятся потому что их надо повторить с минимум 9-ю одновременно работающих PWM..
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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
немного об аппаратной реализации точного по времени дёргания ногами (это и ШИМ, и форсунки, и зажигание)
+ метода: исключительно точный по времени, джиттер минимальный, задействование аппаратных ресурсов, возможность реализовать не только ШИМ, но и BAM и дельта-сигма
- метода: повышенные программные накладные расходы на изменение параметров ШИМа, расход памяти пропорционально точности ШИМа.
реализация:
предположим нам нужно 8 8битных ШИМов, частота любая, в пределах возможности железа.
резервируем буфер на 256 байт. каждый бит в байте олицетворяет состояние соответствующего канала ШИМ.
рассмотрим только 1й бит. чтобы сделать ШИМ, нужно заполнить массив значениями вида 111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000
где число единиц и есть скважность ШИМа.
изменение скважности ШИМа - цикл по буферу с изменением соответствующего числа ячеек.
инициализируем DMA вывод через SPI с прерыванием по окончанию передачи. в прерывании перезапускаем DMA на начало массива.
скорость передачи настраивается в соответствии с необходимой частотой ШИМа.
аппаратная часть:
берём микросхему 74HC595 - это сдвиговый регистр с защёлкой и подключаем её к SPI выходу платы.
микросхему 74VHC393 - это двоичный 4х разрядный счётчик, вход подключаем к тактовому сигналу SPI, а 3 бит вывода подключаем к защёлке сдвигового регистра.
это приводит к тому, что каждый 8 бит состояние сдвигового регистра автоматически защёлкивается.
+ метода: исключительно точный по времени, джиттер минимальный, задействование аппаратных ресурсов, возможность реализовать не только ШИМ, но и BAM и дельта-сигма
- метода: повышенные программные накладные расходы на изменение параметров ШИМа, расход памяти пропорционально точности ШИМа.
реализация:
предположим нам нужно 8 8битных ШИМов, частота любая, в пределах возможности железа.
резервируем буфер на 256 байт. каждый бит в байте олицетворяет состояние соответствующего канала ШИМ.
рассмотрим только 1й бит. чтобы сделать ШИМ, нужно заполнить массив значениями вида 111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000
где число единиц и есть скважность ШИМа.
изменение скважности ШИМа - цикл по буферу с изменением соответствующего числа ячеек.
инициализируем DMA вывод через SPI с прерыванием по окончанию передачи. в прерывании перезапускаем DMA на начало массива.
скорость передачи настраивается в соответствии с необходимой частотой ШИМа.
аппаратная часть:
берём микросхему 74HC595 - это сдвиговый регистр с защёлкой и подключаем её к SPI выходу платы.
микросхему 74VHC393 - это двоичный 4х разрядный счётчик, вход подключаем к тактовому сигналу SPI, а 3 бит вывода подключаем к защёлке сдвигового регистра.
это приводит к тому, что каждый 8 бит состояние сдвигового регистра автоматически защёлкивается.
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
Re: Аппаратный ШИМ против программного
Я правильно понимаю, что в этом случае частота получается одинаковая на все 8 каналов?
Re: Аппаратный ШИМ против программного
Может стоит повторить с более реальными частотами но в более жестких условиях (DC=0.1% 99.9%)russian wrote:Отнють нет, ничего повторять не нужно. Если открыть глаза, то там сейчас 8 каналов - у меня на анализаторе больше каналов просто нет. Зумим, зумим, зумим - и, оппа, магия - нижние два канала это тоже ШИМ, только очень высокой частоты.Maxi wrote:Эти замеры не годятся потому что их надо повторить с минимум 9-ю одновременно работающих PWM..
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
Времени нет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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
да, именно так. но при этом очень просто сделать, например, сдвиг по фазе между ШИМами,Sergey89 wrote:Я правильно понимаю, что в этом случае частота получается одинаковая на все 8 каналов?
так же на любом канале можно реализовать ШИМ с в два раза большей частотой, но на 1 бит разрешения меньше. и т.д.
и самое главное - это не вносит практически никаких дополнительных финансовых затрат, мелкая логика стоит минимально...
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
Друзья, вы слона не замечаете - что вы порт SPI этим займёте полностью?XDA 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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
У нас их целых 3, но вот практической ценности в таком числе ШИМ каналов с одинаковой частотой я пока не могу придумать. Peak and hold для форсунок можно сделать ещё проще, а остальные актуаторы вроде совсем разные частоты требуют. Разве что 4 фазовращателя кто-то захочет крутить.
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
Вот только один их них например делит пины с АЦП. Остаётся примерно два. Если один из двух убить на эту странную реализацию ШИМ - какая в итоге будет выгода? 3 провода вместо восьми, плюс ведро геммороя?Sergey89 wrote:У нас их целых 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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
SPI ремапица на другие пины. А выгода такая, что имеем 8 ШИМ каналов с аппаратной точностью, но интереснее было бы сделать с разными частотами. В таком виде как сейчас предложено я не вижу практического применения, т.к. проще на аппаратные таймеры повестить что можно, а что нельзя сделать софтом. Геморроя не больше чем при реализации программного ШИМ на одном канале таймера
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
Я вижу только два набора SPI пинов на не-АЦП пинах: PB3-PB4-PB5 и PB13-PB14-PB15. Есть еще варианты какие-то?Sergey89 wrote:SPI ремапица на другие пины
Причём с пином 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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
а мы сейчас про дискавери говорим? я говорил про отдельный камень.
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
А... Космические корабли бороздят просторы вселенной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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
russian, смысл упираться в discovery? То мы говорим о переносимости между аппаратными платформами, то упираемся в отладочную плату, которая вообще кроме как для отладки больше ни для чего не подходит.
ИМХО все это в итоге все равно может быть реализовано в коде и достаточно гибко. Есть свободные аппаратные таймеры - используем их. Нет - используем программную реализацию. Баланс должен быть. Но раз уж мы все равно используем как минимум один аппаратный таймер, то почему-бы не использовать тогда другие свободные?
ИМХО все это в итоге все равно может быть реализовано в коде и достаточно гибко. Есть свободные аппаратные таймеры - используем их. Нет - используем программную реализацию. Баланс должен быть. Но раз уж мы все равно используем как минимум один аппаратный таймер, то почему-бы не использовать тогда другие свободные?
skype: frig_frig
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
Смысл огромный! Лично я планирую еще достаточно долго использовать только discovery. Разговоры об использовании чипа отдельно на текущем этапе - это как минимум флуд, а как максимум глупость.frig wrote:russian, смысл упираться в 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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
Есть разные мнения на этот счетРазговоры об использовании чипа отдельно на текущем этапе - это как минимум флуд, а как максимум глупость.
skype: frig_frig
- AndreyB
- Site Admin
- Posts: 14381
- Joined: Wed Aug 28, 2013 1:28 am
- Location: Jersey City
- Github Username: rusefillc
- Slack: Andrey B
Re: Аппаратный ШИМ против программного
И это прекрасно. В уважительном и аргументированном споре рождается истина.frig wrote:Есть разные мнения на этот счет
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
Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
Re: Аппаратный ШИМ против программного
И на этот счет тоже есть разные мненияТем более, что я прав
skype: frig_frig
Re: Аппаратный ШИМ против программного
Вообще надо бы - субары никто не отменял.Sergey89 wrote:У нас их целых 3, но вот практической ценности в таком числе ШИМ каналов с одинаковой частотой я пока не могу придумать. Peak and hold для форсунок можно сделать ещё проще, а остальные актуаторы вроде совсем разные частоты требуют. Разве что 4 фазовращателя кто-то захочет крутить.
Re: Аппаратный ШИМ против программного
Для справки- У Субар чаще всего 2 фазовращателя- на впуске.
4 фазы это только Н-6 3,6л моторы, STI08+, Legacy GT 02+ JDM only (EJ20Y)
4 фазы это только Н-6 3,6л моторы, STI08+, Legacy GT 02+ JDM only (EJ20Y)
Skype- max.mad486