All streams
Search
Write a publication
Pull to refresh
83
0
Send message
Насчет того, что разный, совершенно согласен. Но гигабайты RAM — это уже не совсем эмбеддед… Хотя, естесственно, и такой компьютер может быть встроен в какой-нибудь прибор. Правда, там все ограничения, типично ассоциируемые со встроенными решениями, уже неактуальны.

сможете показать, чем этот код на современном C++ уступает по эффективности/ресурсоемкости коду на C89/C99?


Начнем с того, что этот код не скомпилируется под, скажем, SDCC… Насчет Cosmic — тоже не уверен. Пробовать лень. Если попробуете — расскажите.
Чтобы разработчик задумался и переписал бы код, например, так:


Да-да, это очень правильно. Только мы сейчас об эмбеде, а не о модном и гламурном мире C++ '11 и прочих F#.

Если вы пишете для встроенной системы, то хороший тон — соблюдать правила если не C89, то максимум C99. Это гарантирует наибольшую переносимость между разными компиляторами и архитектурами. Так что забудьте про auto и прочее — просто надо внимательно подходить к написанию кода (не исключая использования статических анализаторов).
Гм. Наверное, вот где проходит та граница, которая отличает инженера (схемотехника/разработчика/программиста встроенных систем) от программиста-прикладника. :) Мне бы, например, было проще (и интереснее, очевидно же, что такие проекты делаются не только и не столько из практических соображений, сколько ради интереса) написать свою прошивку, попутно разобравшись с работой и настройкой PID и прочими занимательными вещами, имеющими отношение к физике работы станции. А кому-то интереснее колупать код до просветления. :)

Я не к тому, что кто-то лучше или хуже; я к тому, что как же интересно осознавать, что все мы такие разные. :) Так-то вообще работа проделана фундаментальная и статья получилась интересной, спасибо.
К сожалению, сейчас не вспомню источник, но где-то я читал, что в силу соотношения токов в обмотках сетевые обратноходовые преобразователи получаются эффективнее, чем в случае низковольтного входа. Соответственно, в сетевых источниках эта топология целесообразна до более значительных мощностей. Видимо поэтому информация разнится (50/100 Вт).
Интересно, спасибо.
Это да, кто чем занимается… Как-то по проектам сложилось так, что от меня больше требуется либо портативное оборудование, которое будет работать долго, либо прецизионное оборудование (лабораторные измерения), либо прецизионное портативное оборудование. :D

Силовая электроника меня, правда, тоже интересует. Давно хочу собрать для духовного развития диммируемый источник питания для восьмидесятиваттного светодиода (входное напряжение — 10.5… 15 В). После всего прочитанного надумал применить прямоходовый преобразователь, потому что расчетные пиковые токи для обратноходового получились у меня совершенно дикие. Кроме того, я так подозреваю, что ОС прямоходового преобразователя легче компенсировать.

Из минусов прямоходового преобразователя, как я понимаю, тут можно отметить то, что в трансформаторе мотать больше витков — ведь выходная часть это по сути step-down (причем в плане стабилизации тока светодиода это как раз таки привлекательно), причем коэффициент заполнения не может быть больше 50%. Так что, как я понимаю, при минимальном входном напряжении трансформатор должен обеспечивать минимум 80 В (падение на светодиоде — порядка 36 В). То есть соотношение витков — минимум 1:8.

Для обратноходового в DCM, как я уже говорил, у меня получились дичайшие токи, а в случае CCM не хочется возиться с компенсацией знаменитого right-half plane zero.

Вообще, я находил информацию, что обратноходовая топология имеет смысл до мощностей порядка 50 Вт.

Естесственно, брать готовые драйвера «подключи по даташиту и все будет хорошо» не хочется, ибо цель — образовательная. Скорее всего буду делать на чем-то типа UC3842.

Правда, все никак не соберусь что-то реально сделать в этом направлении.

Приветствуются ваши комментарии к вышенаписанному. :)
Справедливости ради, я очень полюбил ПЛИС, когда мне понадобилось реализовать минимум 54 независимых ШИМ-канала с частотами несущей не менее килогерца. :)
Спорить не буду, т.к. многокиловаттными установками на практике не занимался; даже совсем наоборот, в плане аналога я тут все наноамперы с микровольтами вылавливаю, да выжимаю последние десятые джоуля из ионисторов. Силовой электроникой просто интересуюсь.

Но вообще, конечно, мне сложно представить, что на плате штатно могут быть ТАКИЕ наводки, от которых котроллеру станет настолько плохо, чтобы в нем заглючило ВСЕ, вплоть до совершенно асинхронных блоков.
Подтверждаю: механизм аварийного отключения выхода таймера работает совершенно независимо от ядра. Что бы там где ни повисло, защита сработает — именно для этого она предназначена. Чтобы она не сработала, должен случиться какой-то совсем капитальный сбой — скажем, сам контроллер должен выгореть целиком, или вроде того.

When a break occurs (selected level on the break input):
• The MOE bit
[это бит, разрешающий таймеру управлять выходными линиями] is cleared asynchronously, putting the outputs in inactive state, idle state or in reset state (selected by the OSSI bit). This feature functions even if the MCU oscillator is off.

Reference Manual, стр. 291.

И далее:

The break inputs is acting on level. Thus, the MOE cannot be set while the break input is active (neither automatically nor by software). In the meantime, the status flag BIF cannot be cleared.

То есть, напортить не получится и watchdog не помешает. Более того, изменение конфигурации защиты может быть заблокировано:

In addition to the break input and the output management, a write protection has been implemented inside the break circuit to safeguard the application. It allows you to freeze the configuration of several parameters (dead-time duration, OCx/OCxN polarities and state when disabled, OCxM configurations, break enable and polarity). You can choose from 3 levels of protection selected by the LOCK bits in the TIMx_BDTR register. Refer to Section 14.4.18: TIM1 break and dead-time register (TIMx_BDTR)
. The LOCK bits can be written only once after an MCU reset.


К слову, этот блок очень гибко настраивается. Например, на его основе можно сделать аналог MC34063. :)

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

• Each output channel is driven with the level programmed in the OISx bit in the TIMx_CR2 register as soon as MOE=0. If OSSI=0 then the timer releases the enable
output else the enable output remains high.
• When complementary outputs are used:
– The outputs are first put in reset state inactive state (depending on the polarity).
This is done asynchronously so that it works even if no clock is provided to the
timer.
–If the timer clock is still present, then the dead-time generator is reactivated in order to drive the outputs with the level programmed in the OISx and OISxN bits after a dead-time. Even in this case, OCx and OCxN cannot be driven to their active level together. Note that because of the resynchronization on MOE, the dead-time duration is a bit longer than usual (around 2 ck_tim clock cycles).
– If OSSI=0 then the timer releases the enable outputs else the enable outputs remain or become high as soon as one of the CCxE or CCxNE bits is high.


В общем, там все серьезно.
Тут возникает вопрос в другом, где взять программиста который будет делать без malloc в другом стиле мышления


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

Именно по этой причине я, в числе многих других людей, при случае всегда разъясняю, чем отличаются игры с Ардуино от настоящей разработки устройств, которые планируется производить серийно или использовать в каких-то достаточно критичных применениях.

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

Если устройство имеет очень серьезную программную часть (насыщенный интерфейс пользователя, содержательные вычисления и т.п.), то обычно разработчик(и) железа оборачивают взаимодействие с аппаратурой в API, учитывающий все нюансы, и уже его отдают программистам.
Вот чесслово, не понимаю смысла в матовых филаментных лампах. Да, филаментная технология — именно что декоративная разновидность LED-технологии для тех случаев, когда хочется ламповой теплоты. Это ее основное преимущество. Для остальных случаев есть светодиоды в классических корпусах, от которых гораздо проще отводить тепло.

Я считаю, что в плане светодиодного освещения будущее за светильниками, изначально спроектированными для светодиодов (без патронов E27), причем собранными на основе чипов по 0.5… 3 Вт, не мощнее. У них есть сразу два плюса: распределение выделяемого тепла по существенной площади, что позволяет отводить его простыми средствами, и равномерность светораспределения за счет обилия элементарных источников света, что уменьшает эффект ослепления.

Светодиоды мощнее 3 Вт тоже полезны, конечно, но в своей нише — проекторы, софиты, прожектора и т.п. Там нет проблемы и теплоотвод с вентилятором поставить.
Есть догадки с чем это связано?


Дроссель гудит на субгармониках?
Аналогично, залогинился специально, чтобы поставить плюс за работу на регистрах. :)

Если говорить откровенно, то я не знаю как данный раздел преподнести на доступном языке.


Я бы просто сказал, что, чтобы получить синус, ШИМ надо проинтегрировать. Что такое интегрирование здешняя аудитория точно знает. :)

Или можно сказать, что мы выделяем нижнюю гармонику, которая будет соответствовать модулирующему сигналу.
Да-да, дальше надо расписать на четыре доски уравнения для однородной линии передачи без потерь, после чего добить вычислениями с этой самой матрицей рассеяния. :) Так любят делать в наших институтах. Я, правда, этих выкладок уже не вспомню, хотя, вроде бы, сдавал.

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

К слову, я не вижу смысла «дальше рассказывать, что это такое». Ну, разве только если читающий не заком с понятием электрической мощности и совсем не в курсе того, что энергия может отражаться, но это уже другая история. Как по мне, скажем, фраза «отношение мощности на выходе к мощности на входе» уже исчерпывающе объясняет смысл параметра. Тем не менее, в своей версии определений (см. выше) я сознательно отказался от терминов типа «мощность» — что такое энергия каждый понимает хотя бы интуитивно, потому так проще.
Просто вот например в статье есть два словца — IL и RL. Это Insertion Loss и Return Loss — нормально рассказать что это — это по одной статье на слово.
К сожалению нельзя на пальцах объяснить то, чему люди учатся по несколько лет.


Я попробую для примера. Вот намеренно упрощенные определения. Ужмем несколько лет в две фразы. :)

Insertion Loss — параметр, показывающий, сколько энергии теряется на чем-то, включенном в линию передачи сигнала.

Return Loss — параметр, показывающий качество согласования линии с чем-то, включенным в нее.
Собственно, я всегда писал и пишу под STM32 без всяких HAL, SPL и Cube. Код получается понятнее и компактнее, а главное — предсказуемее. Уровень абстракции от оборудования у меня всегда самописный.
Ну, во-первых, как ревнитель правописания я имею право выключить понимание сарказма. :D Истинный последователь Розенталя не может шутить, когда дело касается родного языка!

Если говорить об аргументации, я прежде всего хотел отметить, что здравый смысл возобладал. Называть величину в женском роде, если она названа в честь мужчины, — как минимум странно (но феминистки были бы довольны, да). Так что это тот случай, когда здравый смысл был закреплен в стандарте.
У меня, кстати, первая мысль тоже была «что за лазер из фольги?»
Но, правда, не смог сходу придумать «понятный всем» практический пример из теории управления.


Нутк, первое, что приходит в голову при слове «Z-преобразование» — расчет рекурсивных цифровых фильтров. Правда, не уверен насчет понятности всем. Хотя программисты по идее должны бы знать, что это такое. Вообще, честно сказать, мне, как радиотехнику по диплому, Z-преобразование роднее кватернионов. :)

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

Information

Rating
Does not participate
Registered
Activity