Page 1 of 4

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

Posted: Sat Nov 30, 2013 8:49 pm
by Mad Max
Скажите, програмисты, а например Рхх, буст и абсорбер- если им сделать Шим програмный, а на выход только транзюки поставить.
Это сильно геморно процессору?
РХх работает только пока дроссель закрыт, абсорбер на малых нагрузках и средних оборотах а буст при Тпс>50%, но до отсечки.

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

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

Процессор делает 168 000 000 операий в секунду. 500 раз включить - выключить ШИМ в секунду на этом фоне - просто ноль. С моей точки зрения, ШИМы явно нужно делать прогрмно (собсвенно, уже сделаны именно так - РХХ у меня работает на програмном ШИМ)

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

Posted: Sat Nov 30, 2013 9:10 pm
by frig
russian +1
Какая-то особенная точность там все равно не нужна, так что программный это хороший вариант.
500 раз включить - выключить ШИМ в секунду на этом фоне - просто ноль.
Это если 500. А если 50, то как бы вообще даже стыдно об этом сказать :D
Я надеюсь, что оффтоп на этом закончим?

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

Posted: Sun Dec 01, 2013 5:06 am
by Mad Max
просто я так понял, чты вы хотите поставить отдельный шим-контроллер, вместо обычных ключей.

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

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

Процессор делает 168 000 000 операий в секунду. 500 раз включить - выключить ШИМ в секунду на этом фоне - просто ноль. С моей точки зрения, ШИМы явно нужно делать прогрмно (собсвенно, уже сделаны именно так - РХХ у меня работает на програмном ШИМ)
ну тут не всё так тривиально :)
вопрос в разрешении ШИМа. если 8 бит, то будет 500 * 256 = 128000 раз в секунду. если взять, допустим, 20 инструкций на обработку одного прерывания - получается уже 2 560 000. а это уже 1.5% от производительности.
это просто пример того, что с программным ШИМом стоит обращаться аккуратно.

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

Posted: Sun Dec 01, 2013 1:33 pm
by AndreyB
XDA wrote: вопрос в разрешении ШИМа. если 8 бит, то будет 500 * 256 = 128000 раз в секунду. если взять, допустим, 20 инструкций на обработку одного прерывания - получается уже 2 560 000. а это уже 1.5% от производительности.
это просто пример того, что с программным ШИМом стоит обращаться аккуратно.
Вообще ничего не понял. Что такое разрешение шима в битах? Откуда берётся 256? Расскажи пожалуйста подробнее, и сразу уточни - к нам это точно относится? :)

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

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

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

Posted: Sun Dec 01, 2013 3:12 pm
by vertexodessa
в чём проблема в аппаратным шимом?

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

Posted: Sun Dec 01, 2013 3:17 pm
by vertexodessa
поставьте отдельный STM32F4 для програмного ШИМа, и передавайте ему параметры по шине CAN, вообще не вижу никаких проблем, пусть себе считает :D

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

Posted: Sun Dec 01, 2013 3:31 pm
by AndreyB
vertexodessa wrote:поставьте отдельный STM32F4 для програмного ШИМа, и передавайте ему параметры по шине CAN, вообще не вижу никаких проблем, пусть себе считает :D
Если это шутка - то не очень смешная. Наверное балаганить не стоит :)

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

Posted: Sun Dec 01, 2013 4:35 pm
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 герцовый шим.

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

Posted: Sun Dec 01, 2013 4:44 pm
by Sergey89
Не обязательно делать прерывание на каждый такт шима. Можно сделать прерывание через канал сравнения тогда, когда это нужно. И каждый раз выставлять в канале сравнения ближайшее событие. Но для этого нужна отсортированная очередь. Так, например, сделано в VEMS.

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

Posted: Sun Dec 01, 2013 4:47 pm
by vertexodessa
объясните, для чего этот геморрой.. в чём выгода?

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

Posted: Sun Dec 01, 2013 4:47 pm
by XDA
Sergey89 wrote:Не обязательно делать прерывание на каждый такт шима. Можно сделать прерывание через канал сравнения тогда, когда это нужно. И каждый раз выставлять в канале сравнения ближайшее событие. Но для этого нужна отсортированная очередь. Так, например, сделано в VEMS.
разумеется это так. просто я привёл пример чисто программного ШИМа. а то у меня сложилось мнение, что такой ситуации никто не боится, считая её исключительно малозатратной.

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

Posted: Sun Dec 01, 2013 4:50 pm
by XDA
vertexodessa wrote:объясните, для чего этот геморрой.. в чём выгода?
например с помощью 74НС595 можно запросто огранизовать 200 390 герцовых ШИМов с разрядностью 8 бит = 100 килогерц на АТМЕГА48 20мгц.
но при условии, что атмега будет заниматься только ШИМами и ничем более, при жесточайшей потактовой оптимизации.

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

Posted: Sun Dec 01, 2013 6:26 pm
by AndreyB
vertexodessa wrote:объясните, для чего этот геморрой.. в чём выгода?
в стм32ф4 не так много таймеров. с четырьмя цилиндрами в принципе еще как-то можно ужаться, но если делать больше цилиндров - то уже будет совсем тяжко. итого - проще сделать програмный ШИМ, чтоб было проще.

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

Posted: Sun Dec 01, 2013 6:29 pm
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/

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

Posted: Sun Dec 01, 2013 6:56 pm
by Sergey89
Обсуждать будет нечего, когда кто-нибудь стресс тест проведёт. Сделает 10 каналов с разной частотой, запустит код на 10000 об/мин, прогонит каналы с разной скважностью и озвучит результаты.

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

Posted: Sun Dec 01, 2013 7:02 pm
by vertexodessa
russian wrote:
vertexodessa wrote:объясните, для чего этот геморрой.. в чём выгода?
в стм32ф4 не так много таймеров. с четырьмя цилиндрами в принципе еще как-то можно ужаться, но если делать больше цилиндров - то уже будет совсем тяжко. итого - проще сделать програмный ШИМ, чтоб было проще.
а можно спросить? не так много, это сколько? просто я читал про всего лишь 17 таймеров с всего лишь 4 сравнениями каждый.. куда там всяким атмегам с мегасквиртами (в котором, кстати, шим аппаратно реализован :) )

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

Posted: Sun Dec 01, 2013 7:06 pm
by frig
vertexodessa, мы стараемся не завязываться сильно на железо.

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

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

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

Когда будет здесь этот полный список - продолжим обсуждение :)

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

Posted: Sun Dec 01, 2013 7:09 pm
by AndreyB
Sergey89 wrote:Обсуждать будет нечего, когда кто-нибудь стресс тест проведёт. Сделает 10 каналов с разной частотой, запустит код на 10000 об/мин, прогонит каналы с разной скважностью и озвучит результаты.
Мы оба осознаем, что на форуме уже есть результаты одного такого теста, кажется даже с полными исходниками тестового проекта? :)

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

Posted: Sun Dec 01, 2013 7:35 pm
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 ног, на которые настраиваются каналы таймера. Это так, для информации, т.к. Вы, видимо, вопрос не изучили, раз гуглом тыкаете.. далее обсуждать вопрос не вижу интереса.. удаляюсь из этой дискуссии

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

Posted: Sun Dec 01, 2013 7:42 pm
by KOT
Конечно концепции единой нет, участников много тянет каждый в свою сторону, лично мне не нравится когда сделано программно то что может быть на аппаратном уровне, взять к примеру MegasquirtAVR с аудиклаба, там они что-то намулячили с внешним прерыванием по зажиганию, позже я так понял переделали на захват таймера.
Ну не совсем в эту тему но давайте хоть вывода таймеров выведем на силовые дискретные выхода, чтоб если останутся лишние таймера то использовать не программный ШИМ.

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

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

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

Posted: Sun Dec 01, 2013 11:12 pm
by AndreyB
vertexodessa wrote:Это так, для информации, т.к. Вы, видимо, вопрос не изучили, раз гуглом тыкаете.. далее обсуждать вопрос не вижу интереса.. удаляюсь из этой дискуссии
У меня сегодня настроение видимо не очень, поэтому наверное Вас мы потеряем.
Но всё же: уважаемый, я попросил Вам открыть спецификацию на stm32f4discovery - а Вы тут показываете спецификацию на чип, стоящий на stm32f4discovery. Никакой разницы не улавливаете? :)

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

Posted: Sun Dec 01, 2013 11:58 pm
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" можно смело делать нарицательной фразой, смысл которой: пожалуйста, позвольте программистам программировать.

Друзья, у нас у всех разные уровни компетенций в различных областях. Я знаю, что НИЧЕГО не понимаю в электронике - поэтому веду себя в темах про электронику очень скромно. С другой стороны, у меня очень серьёзный уровень в программировании. Давайте дополнять сильные стороны друг друга.

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

Posted: Mon Dec 02, 2013 12:01 am
by AndreyB
KOT wrote:Ради любопытсва Вы как переменные в STM как обозначаете? Есть какие-то ограничения в тех или иных задачах?
Вообще не понял вопрос. Вообще.

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

Posted: Mon Dec 02, 2013 4:49 am
by KOT
russian wrote: Вообще не понял вопрос. Вообще.
Спасибо, вопрос отпал, я уже посмотрел исходники.

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

Posted: Mon Dec 02, 2013 6:14 am
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м таймером с постоянной частотой :))))