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

Про байтики и логику ЭБУ
Mad Max
Posts: 187
Joined: Wed Nov 13, 2013 12:34 pm
Location: Ukraine, Kharkov

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

Post by Mad Max »

Скажите, програмисты, а например Рхх, буст и абсорбер- если им сделать Шим програмный, а на выход только транзюки поставить.
Это сильно геморно процессору?
РХх работает только пока дроссель закрыт, абсорбер на малых нагрузках и средних оборотах а буст при Тпс>50%, но до отсечки.
Skype- max.mad486
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 »

Mad Max wrote:Скажите, програмисты, а например Рхх, буст и абсорбер- если им сделать Шим програмный, а на выход только транзюки поставить.
Это сильно геморно процессору?
Что именно ты имеешь ввиду? Прогрмный, в противоположность какому? В противоположность аппаратному таймеру с PWM?

Процессор делает 168 000 000 операий в секунду. 500 раз включить - выключить ШИМ в секунду на этом фоне - просто ноль. С моей точки зрения, ШИМы явно нужно делать прогрмно (собсвенно, уже сделаны именно так - РХХ у меня работает на програмном ШИМ)
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 +1
Какая-то особенная точность там все равно не нужна, так что программный это хороший вариант.
500 раз включить - выключить ШИМ в секунду на этом фоне - просто ноль.
Это если 500. А если 50, то как бы вообще даже стыдно об этом сказать :D
Я надеюсь, что оффтоп на этом закончим?
skype: frig_frig
Mad Max
Posts: 187
Joined: Wed Nov 13, 2013 12:34 pm
Location: Ukraine, Kharkov

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

Post by Mad Max »

просто я так понял, чты вы хотите поставить отдельный шим-контроллер, вместо обычных ключей.
Skype- max.mad486
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

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

Post by XDA »

russian wrote:
Mad Max wrote:Скажите, програмисты, а например Рхх, буст и абсорбер- если им сделать Шим програмный, а на выход только транзюки поставить.
Это сильно геморно процессору?
Что именно ты имеешь ввиду? Прогрмный, в противоположность какому? В противоположность аппаратному таймеру с PWM?

Процессор делает 168 000 000 операий в секунду. 500 раз включить - выключить ШИМ в секунду на этом фоне - просто ноль. С моей точки зрения, ШИМы явно нужно делать прогрмно (собсвенно, уже сделаны именно так - РХХ у меня работает на програмном ШИМ)
ну тут не всё так тривиально :)
вопрос в разрешении ШИМа. если 8 бит, то будет 500 * 256 = 128000 раз в секунду. если взять, допустим, 20 инструкций на обработку одного прерывания - получается уже 2 560 000. а это уже 1.5% от производительности.
это просто пример того, что с программным ШИМом стоит обращаться аккуратно.
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
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: вопрос в разрешении ШИМа. если 8 бит, то будет 500 * 256 = 128000 раз в секунду. если взять, допустим, 20 инструкций на обработку одного прерывания - получается уже 2 560 000. а это уже 1.5% от производительности.
это просто пример того, что с программным ШИМом стоит обращаться аккуратно.
Вообще ничего не понял. Что такое разрешение шима в битах? Откуда берётся 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
KOT
Posts: 291
Joined: Sun Nov 17, 2013 8:15 am
Location: Ukraine, Zaporizhia

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

Post by KOT »

Ради любопытсва Вы как переменные в STM как обозначаете? Есть какие-то ограничения в тех или иных задачах?
XDA то прав, для програмного ШИМа количество обработок подпрограммы шима умножениется на его разрядность. Програмный ШИМ как по мне хрень которую можно применять в устройствах типа телевизор, и другие побрякушки, от которых не зависит жизнь людей.
Но я вобще тот еще извращенец с асемблером и AVR...
vertexodessa
Posts: 5
Joined: Sun Dec 01, 2013 3:10 pm

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

Post by vertexodessa »

в чём проблема в аппаратным шимом?
vertexodessa
Posts: 5
Joined: Sun Dec 01, 2013 3:10 pm

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

Post by vertexodessa »

поставьте отдельный STM32F4 для програмного ШИМа, и передавайте ему параметры по шине CAN, вообще не вижу никаких проблем, пусть себе считает :D
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 »

vertexodessa wrote:поставьте отдельный STM32F4 для програмного ШИМа, и передавайте ему параметры по шине CAN, вообще не вижу никаких проблем, пусть себе считает :D
Если это шутка - то не очень смешная. Наверное балаганить не стоит :)
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 »

russian wrote:
XDA wrote: вопрос в разрешении ШИМа. если 8 бит, то будет 500 * 256 = 128000 раз в секунду. если взять, допустим, 20 инструкций на обработку одного прерывания - получается уже 2 560 000. а это уже 1.5% от производительности.
это просто пример того, что с программным ШИМом стоит обращаться аккуратно.
Вообще ничего не понял. Что такое разрешение шима в битах? Откуда берётся 256? Расскажи пожалуйста подробнее, и сразу уточни - к нам это точно относится? :)
чтобы сделать ШИМ с частотой следования импульсов 500 раз в секунду и 8 битным разрешением (т.е. 256 градаций скваженности) нужно выставить таймер на частоту 500*256 = 128 000 раз в секунду.
и каждый тик таймера сравнивать переменную со значением ШИМа с циклическим счётчиком. при превышении - выставлять на выход 1, или 0 в обратном случае.
вход - выход примерно 15 тактов минимум ( сохранение регистров, флагов в стеке, возврат обратно), далее минимум 5 тактов - реализация алгоритма ШИМа. итого порядка 20.
если писать обработчик целиком на С, без ассемблерных вставок, со всякими проверками то будет и все 50 тактов, а то и больше.
перемножаем 128 000 на 15+50 тактов - получается в секунду будет расходоваться 8 320 000 тактов в секунду(или 5.2% всей производительности) на ОДИН 500 герцовый шим.
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

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

Post by Sergey89 »

Не обязательно делать прерывание на каждый такт шима. Можно сделать прерывание через канал сравнения тогда, когда это нужно. И каждый раз выставлять в канале сравнения ближайшее событие. Но для этого нужна отсортированная очередь. Так, например, сделано в VEMS.
vertexodessa
Posts: 5
Joined: Sun Dec 01, 2013 3:10 pm

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

Post by vertexodessa »

объясните, для чего этот геморрой.. в чём выгода?
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

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

Post by XDA »

Sergey89 wrote:Не обязательно делать прерывание на каждый такт шима. Можно сделать прерывание через канал сравнения тогда, когда это нужно. И каждый раз выставлять в канале сравнения ближайшее событие. Но для этого нужна отсортированная очередь. Так, например, сделано в VEMS.
разумеется это так. просто я привёл пример чисто программного ШИМа. а то у меня сложилось мнение, что такой ситуации никто не боится, считая её исключительно малозатратной.
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

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

Post by XDA »

vertexodessa wrote:объясните, для чего этот геморрой.. в чём выгода?
например с помощью 74НС595 можно запросто огранизовать 200 390 герцовых ШИМов с разрядностью 8 бит = 100 килогерц на АТМЕГА48 20мгц.
но при условии, что атмега будет заниматься только ШИМами и ничем более, при жесточайшей потактовой оптимизации.
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
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 »

vertexodessa wrote:объясните, для чего этот геморрой.. в чём выгода?
в стм32ф4 не так много таймеров. с четырьмя цилиндрами в принципе еще как-то можно ужаться, но если делать больше цилиндров - то уже будет совсем тяжко. итого - проще сделать програмный ШИМ, чтоб было проще.
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
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 »

Я тему лочить не буду конечно, но коллеги - обсуждать здесь просто НЕЧЕГО
1) у нас УЖЕ есть програмный ШИМ в https://svn.code.sf.net/p/rusefi/code/trunk/firmware/hw_layer/pwm_generator.c
2) @ делает еще более хитрую версию, которая вероятно будет достаточно точной в том числе и для управления форсунками-зажиганием. Пока не доделает, комментировать здесь нечего - следите за тикетом https://sourceforge.net/p/rusefi/tickets/24/
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 »

Обсуждать будет нечего, когда кто-нибудь стресс тест проведёт. Сделает 10 каналов с разной частотой, запустит код на 10000 об/мин, прогонит каналы с разной скважностью и озвучит результаты.
vertexodessa
Posts: 5
Joined: Sun Dec 01, 2013 3:10 pm

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

Post by vertexodessa »

russian wrote:
vertexodessa wrote:объясните, для чего этот геморрой.. в чём выгода?
в стм32ф4 не так много таймеров. с четырьмя цилиндрами в принципе еще как-то можно ужаться, но если делать больше цилиндров - то уже будет совсем тяжко. итого - проще сделать програмный ШИМ, чтоб было проще.
а можно спросить? не так много, это сколько? просто я читал про всего лишь 17 таймеров с всего лишь 4 сравнениями каждый.. куда там всяким атмегам с мегасквиртами (в котором, кстати, шим аппаратно реализован :) )
frig
contributor
contributor
Posts: 569
Joined: Wed Oct 23, 2013 8:05 pm

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

Post by frig »

vertexodessa, мы стараемся не завязываться сильно на железо.

В общем вопрос в необходимом разрешении - для подогрева ламбды это одно, для буста другое, для управления форсунками - третье. Не нужно валить все в одну кучу в принципе. Сферическая точность в вакууме для подогрева лямбды - пустая трата времени.
Без конкретных задач и конкретных проблем говорить не о чем. Проблем то может и не быть вовсе!
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 »

vertexodessa wrote:а можно спросить? не так много, это сколько? просто я читал про всего лишь 17 таймеров с всего лишь 4 сравнениями каждый.. куда там всяким атмегам с мегасквиртами (в котором, кстати, шим аппаратно реализован :) )
Нет, требовать разжёвывать ТАК мелко нельзя. Идушь в гугл, открываешь даташит на stm32f4discovery плату. Записываешь на бумажку все пины, на которые выведены таймеры - указанием номера таймера и номера канала.

Когда будет здесь этот полный список - продолжим обсуждение :)
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
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:Обсуждать будет нечего, когда кто-нибудь стресс тест проведёт. Сделает 10 каналов с разной частотой, запустит код на 10000 об/мин, прогонит каналы с разной скважностью и озвучит результаты.
Мы оба осознаем, что на форуме уже есть результаты одного такого теста, кажется даже с полными исходниками тестового проекта? :)
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
vertexodessa
Posts: 5
Joined: Sun Dec 01, 2013 3:10 pm

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

Post by vertexodessa »

russian wrote:
vertexodessa wrote:а можно спросить? не так много, это сколько? просто я читал про всего лишь 17 таймеров с всего лишь 4 сравнениями каждый.. куда там всяким атмегам с мегасквиртами (в котором, кстати, шим аппаратно реализован :) )
Нет, требовать разжёвывать ТАК мелко нельзя. Идушь в гугл, открываешь даташит на stm32f4discovery плату. Записываешь на бумажку все пины, на которые выведены таймеры - указанием номера таймера и номера канала.

Когда будет здесь этот полный список - продолжим обсуждение :)
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00037051.pdf в МК максимум 47 ног, на которые настраиваются каналы таймера. Это так, для информации, т.к. Вы, видимо, вопрос не изучили, раз гуглом тыкаете.. далее обсуждать вопрос не вижу интереса.. удаляюсь из этой дискуссии
KOT
Posts: 291
Joined: Sun Nov 17, 2013 8:15 am
Location: Ukraine, Zaporizhia

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

Post by KOT »

Конечно концепции единой нет, участников много тянет каждый в свою сторону, лично мне не нравится когда сделано программно то что может быть на аппаратном уровне, взять к примеру MegasquirtAVR с аудиклаба, там они что-то намулячили с внешним прерыванием по зажиганию, позже я так понял переделали на захват таймера.
Ну не совсем в эту тему но давайте хоть вывода таймеров выведем на силовые дискретные выхода, чтоб если останутся лишние таймера то использовать не программный ШИМ.
User avatar
Sergey89
contributor
contributor
Posts: 839
Joined: Wed Sep 25, 2013 5:30 pm
Location: Russia, Velikiy Novgorod

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

Post by Sergey89 »

vertexodessa wrote:http://www.st.com/st-web-ui/static/acti ... 037051.pdf в МК максимум 47 ног, на которые настраиваются каналы таймера. Это так, для информации, т.к. Вы, видимо, вопрос не изучили, раз гуглом тыкаете.. далее обсуждать вопрос не вижу интереса.. удаляюсь из этой дискуссии
Во-первых таймеров 14. Во-вторых только у 6 таймеров 4 канала. У остальных по 1, 2 или вообще 0. В-третьих не все каналы получится вывести на ножки, не урезав другие аппаратные функции (в том числе АЦП). И не нужно забывать, что часть таймеров уходит под захват входных сигналов.
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 »

vertexodessa wrote:Это так, для информации, т.к. Вы, видимо, вопрос не изучили, раз гуглом тыкаете.. далее обсуждать вопрос не вижу интереса.. удаляюсь из этой дискуссии
У меня сегодня настроение видимо не очень, поэтому наверное Вас мы потеряем.
Но всё же: уважаемый, я попросил Вам открыть спецификацию на stm32f4discovery - а Вы тут показываете спецификацию на чип, стоящий на stm32f4discovery. Никакой разницы не улавливаете? :)
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
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:чтобы сделать ШИМ с частотой следования импульсов 500 раз в секунду и 8 битным разрешением (т.е. 256 градаций скваженности) нужно выставить таймер на частоту 500*256 = 128 000 раз в секунду.
и каждый тик таймера сравнивать переменную со значением ШИМа с циклическим счётчиком. при превышении - выставлять на выход 1, или 0 в обратном случае.
вход - выход примерно 15 тактов минимум ( сохранение регистров, флагов в стеке, возврат обратно), далее минимум 5 тактов - реализация алгоритма ШИМа. итого порядка 20.
если писать обработчик целиком на С, без ассемблерных вставок, со всякими проверками то будет и все 50 тактов, а то и больше.
перемножаем 128 000 на 15+50 тактов - получается в секунду будет расходоваться 8 320 000 тактов в секунду(или 5.2% всей производительности) на ОДИН 500 герцовый шим.
Ой, ой ой ой ой ой :(

Сегодня у меня настроение не фонтан, поэтому я продолжу жечь напалмом: это просто УЖАС, а не рассуждение. Я сейчас очень неприятно возможно скажу, но это описание проблемы "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
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 »

KOT wrote:Ради любопытсва Вы как переменные в STM как обозначаете? Есть какие-то ограничения в тех или иных задачах?
Вообще не понял вопрос. Вообще.
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
KOT
Posts: 291
Joined: Sun Nov 17, 2013 8:15 am
Location: Ukraine, Zaporizhia

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

Post by KOT »

russian wrote: Вообще не понял вопрос. Вообще.
Спасибо, вопрос отпал, я уже посмотрел исходники.
User avatar
XDA
Posts: 441
Joined: Wed Oct 23, 2013 7:28 pm

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

Post by XDA »

russian wrote:
XDA wrote:чтобы сделать ШИМ с частотой следования импульсов 500 раз в секунду и 8 битным разрешением (т.е. 256 градаций скваженности) нужно выставить таймер на частоту 500*256 = 128 000 раз в секунду.
и каждый тик таймера сравнивать переменную со значением ШИМа с циклическим счётчиком. при превышении - выставлять на выход 1, или 0 в обратном случае.
вход - выход примерно 15 тактов минимум ( сохранение регистров, флагов в стеке, возврат обратно), далее минимум 5 тактов - реализация алгоритма ШИМа. итого порядка 20.
если писать обработчик целиком на С, без ассемблерных вставок, со всякими проверками то будет и все 50 тактов, а то и больше.
перемножаем 128 000 на 15+50 тактов - получается в секунду будет расходоваться 8 320 000 тактов в секунду(или 5.2% всей производительности) на ОДИН 500 герцовый шим.
Ой, ой ой ой ой ой :(

Сегодня у меня настроение не фонтан, поэтому я продолжу жечь напалмом: это просто УЖАС, а не рассуждение. Я сейчас очень неприятно возможно скажу, но это описание проблемы "500*256" можно смело делать нарицательной фразой, смысл которой: пожалуйста, позвольте программистам программировать.

Друзья, у нас у всех разные уровни компетенций в различных областях. Я знаю, что НИЧЕГО не понимаю в электронике - поэтому веду себя в темах про электронику очень скромно. С другой стороны, у меня очень серьёзный уровень в программировании. Давайте дополнять сильные стороны друг друга.
хорошо, покажите класс!
приведите свои рассуждения для ШИМа в 500 герц с 8битным разрешением и 1м таймером с постоянной частотой :))))
Теория хороша в том и только том случае, если она может достоверно предсказать результаты каждого нового опыта
Post Reply