
Комментарии 34
Эт - прямо вот хорошо! Отложил в закладки - мало ли когда понадобится!
Единственное в чем наверное разочарую - компилятор скорее всего вырезал ваши трюки с кешированием переменных при расчете. Там конечно надо посмотреть ассемблерный листинг, но в большинстве случаев оно прекрасно видит ситуации когда идет цепочка присваиваний a->b->c и помечает 'b' как no-effect. Ну и дальше вообще убирает его из внутреннего представления программы. Раньше в чистых Сях был допустим трюк со словом 'register' - который рекомендовал компилятору выделить регистр для хранения локальной переменной в блоке. Но работало это не всегда - и в современных процессорах обычно компилятор распределяет регистры лучше человека. Если вы все-таки хотите туда вмешаться - то надо смотреть не-портабельные расширения платформы или компилятора (прагмы, аттрибуты переменных и проч).
Если сейчас набегут варвары, которые будут кричать что ваша поделка не имеет смысла и ее изготовление обошлось дороже покупки готовой в Китае с доставкой - гоните их в сад! Умение повторить - это минимальный уровень владения технологией. Без этого нет и не будет следующих шагов: ни улучшения/адаптации, ни разработки нового.
Удачи!
Спасибо. Оптимизации точно повлияли. Первая версия алгоритма работала примерно в 3-4 раза медленнее. Я мониторил начало и конец прерывания по осциллографу. Не могу утверждать, что ни одна из оптимизаций не была вырезана компилятором, но что-то явно помогло.
А при сборке в параметрах компилятора какая оптимизация задана?
Я скорее всего в дебаге шил с флагом -00.
Ну вот поэтому ручные оптимизации помогают: просто потому что с -o0 компилер собирает "как есть"... А так начиная с -o2 уже руками чаще всего лучше не сделаешь (если это не какие-то специфические случаи)
А в чем вообще смысл шить управление силовой электроникой в дебаге без оптимизаций ? Все равно же не имеете роскоши подключиться отладчиком, остановиться, почитать переменные, и т.д. - система реального времени под отладчиком ведет себя совершенно не так как без него... Я содрал для себя подход у ракетчиков - система пишет в отдельную микросхему (мне нравится FRAM) телеметрию по кругу. После рабочего цикла или аварии - читаем микросхему, анализируем логи... Но сборка кода ведется с O2 или Os - иначе сколько раз было что с O0 - работает, с O2 - падает из-за какой-то невнимательности с указателями или UB. Если не уверены - смотрим ассемблер (к сожалению современный C++ довели до того, что без чтения ассемблера - обойтись сложно).
У меня не C++ , а C, ну не суть. Оптимизации компилятора меня вообще не волнуют, я обычно всё в дебаге шью с -o0 и ни разу не было проблем. Отлаживать можно через Cube Monitor очень удобно(не в этом проекте). Если нужна отладка до микросекунд, то можно выводить цифровые сигналы на логический анализатор или аналоговые на осциллограф. Вроде костыли, а большего и не нужно.
Оптимизации компилятора меня вообще не волнуют [..] шью с -o0 ..
странно это
В системах реального времени надо четко контролировать данные, особенно, если работаешь в прерывании. Компилятор может кэширлвать данные, которые меняются переыерийным устройством в произвольный момент. Компилятор мог это не учитывать и работать с неактуальными копиями в кэше.
Вот это распространенное ошибочное мнение, которое кочует из уст в уста и до сих пор популярно...
Оптимизация - неотъемлемая часть современного компилятора и самая сильная его сторона. Именно она позволяет использовать язык комфортно: ну нужно думать как написать "быстро", как не объявить лишние переменные и т.д. От применения ситнаксического сахара в большинстве случаев не поменяется вообще ничего - компилятор это соптимизирует.
"Компилятор мог это не учитывать и работать с неактуальными копиями в кэше." - давайте не путаться в терминологии. Все с чем работает компилятор заканчивается на этапе компиляции. Дальше с кодом работает процессор. Кэши процессора - удел самого процессора (за редким исключением вроде барьеров памяти, но здесь явно не об этом). Скорее всего имело ввиду работа с переменной в регистре, при этом когда на эту память мапилась периферия? Уже в заголовках библиотек от производителя чипа все что нужно помечено как volatile. Поэтому компилятор знает о таких переменных и будет обращаться к ним правильно. Если нет - это косяк кода, не компилятора, нужно правильно пользоваться инструментом.
volatile, упомянутый выше - и зло и благо. Нужно именно разобраться как он работает, в идеале не лениться лезть в ассемблерный выхлом компилятора. Он нужен ровно там, где нужен, иначе он мешает той самой оптимизации.
В общем и целом - современный компилятор очень мощный инструмент. Не боритесь с ним, используйте.
Воспоминание разблокировано. Серьезность темы электропривода я понял в момент, когда керамический конденсатор размером около 1210 прожег в плате такую дыру, что можно было палец просунуть. После этого я тоже начал считать импульсные токи)
Да, в этом что-то есть... У меня похожее было: неправильно посчитанный дроссель BUCK-конвертера насыщался и у электролитического конденсатора ноги грелись почти до выпаивания... Нагреть конденсатор это видимо какое-то становление начинающего электроника... Нагреть сердечник дросселя при холодной обмотке в принципе тоже :D
У меня так однажды мелкий дисковый конденсатор на 0.1мкф отгорел от драйвера TB6600HG
Компаратор сравнивает падение напряжения на шунте с опорным напряжением и отключает ключи на фиксированный интервал времени.
Мало того, что такое решение просто некрасивое, оно еще и сомнительное с точки зрения электромагнитной совместимости.
Это оптимальное решение для драйверов слабых двигателей. Недостатком может быть сниженная точность управления током на микрошаге, и акустический шум.
так называемый Fast Decay и Low Decay режим.
А в вашем проекте это не используется? Ключи в фазе PWM-off просто закрываются, и остаются закрыты до момента PWM-on?
У меня симметричный ШИМ просто переключает диагональные ключи. Получается типа Fast Decay, но с фиксированной частотой ШИМ и аккуратной регулировкой с помощью ПИ регулятора. По обмотке всегда течёт ток либо в одном, либо в другом направлении. Это абсолютно правильно и нормально. Костыль с Low Decay введен в примитивные драйверы из-за отсутствия нормального регулятора
Я так понял, что использование разных режимов decay актуально когда ток регулируется по синусоиде, и для разных фаз (фаза увеличения тока, и фаза уменьшения тока) оптимальным будет разный режим decay. Это не связано только лишь с использованием fixed off-time.
Отлично сделано!
Но ведь ШИМ остался, и помехи тоже остались. Чтобы от помех избавиться, имеет смысл на выход выводить уже сглаженный сигнал. Или хотя-бы фильтр поставить, чтобы фронты немного сгладить.
Я ещë не очень понял, зачем USB- UART. Выбранный мк и без него может по USB получить прошивку.
И защита лишней не бывает: входы оптронов чувствительны ко всему, особенно при переполюсовке.
Спасибо!
1) Я стремился не избавиться от помех, а нормировать их по частоте, чтобы они нормально фильтровались.
2) Да , я знал про USB DFU, но у меня была библиотека Modbus RTU написанная под USART и я хотел использовать её.
3) Че то я не замечал выгорания оптронов от переполюсовки никогда. Резистор их всегда успешно спасал.
Че то я не замечал выгорания оптронов от переполюсовки никогда. Резистор их всегда успешно спасал.
Вам везёт, наверное. Но обычно светодиоды очень боятся статического разряда. Если бы они где-то в середине платы стояли - не страшно. А прямо на интерфейсе - без защиты от высокого обратного напряжения им уже не очень хорошо будет.
Особенно "спасёт" диод конденсатор, включённый параллельно токоограничивающему резистору :)
Странно. У меня прямо противоположный опыт. В моём понимании светодиод это неубиваемый стабилитрон с побочным эффектом в виде свечения)) Шучу конечно, но у меня светодиод всегда был самой выносливой деталью. Вот лазерный диод неженка, это да)
Совсем недавно STM32 исчезали с российского рынка, потом появились по удесятеренной цене, потом цена снова стала адекватной. Чтобы не зависеть от европриборов, используйте чайнаприборы. Семейство сh32. Раз уж все равно пишете код и тексты с пом. китайских нейросетей (это одобряю).
Мои разработки выпускаются мелкими сериями по 5-50 штук под заказ. На такое и оригинальные stm32 найдутся на скаладах чип и дипа по 300р/шт.
Переход на ту же народную CH32F103 или CH32V307 на RISC-V сейчас и правда выглядит за самый очевидный и бюджетный шаг.
Однако, если мы думаем за долгосрочную стабильность и безопасность (ради чего всё и начиналось), имеет смысл посмотреть также в сторону отечественных микроконтроллеров. И вот почему:
Прямая замена пин-в-пин. Вместо китайских клонов есть смысл глянуть на тот же Миландр. Например, их серия К1986ВЕ91Т (Cortex-M0) или более мощные К1986ВЕ92ФИ (Cortex-M3) — с них выйдет отличная замена старым STM32F103. Под них уже есть горы готового софта, и не надо мучаться с китайскими библиотеками.
Свой RISC-V без сюрпризов. Если вам так сильно приглянулся RISC-V в чипах CH32V, то у нас сейчас активно продвигается проект “Амур” (MIK32) от Микрона. Для простых задач автоматизации и датчиков он подходит идеально, а логистика по нему идет полностью внутри страны, без таможен и банковских блокировок.
Техническая поддержка на родном языке. Архитектура CH32 хорошая, но китайская документация… У отечественных вендоров инженеры ответят сразу на понятном языке, вышлют нормальные схемы и помогут переписать код под проект.
Рост экосистемы. Да, наши чипы раньше стоили сильно дороже. Но сейчас, когда пошли большие тиражи, всё поменялось в лучшую сторону.
и током в несколько раз больше максимального тока обмотки. Рассматривается возможность применения транзистора IRF540NPBF.
В несколько - это не по инженерному, это что, запас, что ли?
ирф540 - разработка 70х, сейчас, наверное, в soic-8 есть аналоги, которым и радиаторы не понадобятся.
График зависимости коэффициента увеличения сопротивления перехода сток-исток от температуры
Это не переход, грубая ошибка
Время включения транзистора
Считается не по емкостям, а по Qgtot
Максимальное напряжение Uк, В
100
Для к73-17 и частоты 50кГц - максимальная амплитуда напряжения составляет 2В. то есть вот это
Эквивалентное последовательное сопротивление:

выкиньте
В документации рассеиваемая мощность не указана, но известны габариты 27.5мм*20мм 30мм. Это достаточно крупный корпус, можно грубо оценить рассеиваемую мощность в 1 Вт
Инженеры аплодируют Вам в лицо.
керамических шунтирующих конденсаторов малой ёмкости вплотную к контактам ключей для шунтирования ВЧ помех.
Параметр
Минимальное значение
Ожидаемое значение
Напряжение, В
100
100
Ёмкость, мкФ
11.2
18.8 (20.6)
почитайте про DC bias
надеюсь, в софтовой части всё не столь вопиюще)
1) Что значит не по инженерному? Придирка необоснованная
2) IRF540 старый , но очень хороший транзистор за свою цену 50р/шт. Покупать супер крутые ключи за 500р я не планировал.
3) Что значит не переход? Не вижу ошибку.
4) Как раз по ёмкости и заряду считается.
5) Где написано про 2 вольта? Откуда вы это взяли?
6) Я мог любую цифру ляпнуть, хоть 1, хоть 0.1 , я сам задаюсь рассеиваемой мощностью. Это инженерный рассчет, где слово "инженерный" = "приблизительный". Числа выбираются по совокупности факторов.
7) Я отлично знаю про DC bias, поэтому керамические конденсаторы взяты на номинальное напряжение 250 вольт. 100 вольт я написал для сборки в целом, потому что плёночные на 100, а они не склонны к DC bias.
1) Что значит не по инженерному?
Давай возьмём запас в сколько-то раз, наверное, проканает - вот это оно и есть, слова аксакала, а не инженера
2) IRF540 старый , но очень хороший транзистор за свою цену 50р/шт. Покупать супер крутые ключи за 500р я не планировал.
Нет. Сейчас за меньше доллара можно взять ключи, на порядок лучшие по FOM. Не говоря уже о монтаже теплоотвода. Это всё равно, как если б в качестве процессора использовать С51.
3) Что значит не переход? Не вижу ошибку.
Потому, что не знаете даже, что такое p-n-переход
4) Как раз по ёмкости и заряду считается.
Читайте мануал. Ёмкость - параметр линейного режима, а ключ работает внезапно в ключевом.
5) Где написано про 2 вольта? Откуда вы это взяли?
И опять - даташит
6) Я мог любую цифру ляпнуть, хоть 1, хоть 0.1 , я сам задаюсь рассеиваемой мощностью. Это инженерный рассчет, где слово "инженерный" = "приблизительный". Числа выбираются по совокупности факторов.
Я про "расчёт" допустимой мощности по габаритам.
Инженерный - ни в коем случае не приблизительный - это оптимальный по параметру "необходимая точность*затраты". Вы даже в этом показываете свой уровень(
7) Я отлично знаю про DC bias, поэтому керамические конденсаторы взяты на номинальное напряжение 250 вольт. 100 вольт я написал для сборки в целом, потому что плёночные на 100, а они не склонны к DC bias.
Я не знаю, что Вы знаете и что поставили. Я, как и все другие, смотрим на то, что Вы написали, а написали Вы как будто ничего этого не знаете.
Ваши претензии выглядят неубедительно. Вы не обосновываете свои замечания, вы просто занимаетесь диванной экспертизой и пытаетесь полить дерьмом работу.
Даже, если у меня реально есть какие-то ошибки или излишние упрощения это не повод пытаться выставить меня идиотом.
Эта разработка не обязана была быть жемчужиной человеческой мысли, она не пойдёт в серию и не полетит в космос. Я вполне осознанно шёл на компромиссы и упрощал там, где по моему мнению можно упростить. Говорить, что я не знаю что такое p-n переход или DC bias это просто оскорбление.
Я всё обосновал, даже с даташитами, просто у Вас не хватает квалификации, чтоб это понять. Не буду спорить, исход всегда закономерен.
Я не писал идиот, я писал - грубая ошибка. И местами ещё сдерживался.
Я вполне осознанно шёл на компромиссы и упрощал там, где по моему мнению можно упростить. Говорить, что я не знаю что такое p-n переход или DC bias это просто оскорбление.
Тогда какие претензии к работе над Вашими ошибками??
Да, Вы не знаете, что такое p-n-переход, если путаете его с каналом полевика. И да, по Вашим расчётам - Вы не знаете, не учитывете DC-bias, это не оскорбление, много начинающих об этом и не слышали, никто не становится мастером сразу...
"Мужик, будь проще - к тебе тогда люди понятутся..." (C) Анекдот.
А по сути - если у тебя есть время и желание предложить улучшение в проект - то предлагай. Желательно не телеграфным стилем, а так чтобы тебя мог понять человек со средней подготовкой.
При этом объяснять что у полевого транзистора "не переход" - не нужно. Мы это все понимаем, но в разговорной речи (в отличие от экзамена на кафедре) - нам не слишком важно какая именно физика пускает или нет электроны в транзисторе. Поэтому мы говорим "переход", хотя понимаем что в полевом транзисторе это другое...
И какие у тебя проблемы с расчетом включения/выключения полевика по емкости затвора ? Ничего что заряд, емкость и напряжение связаны линейным законом ? Нашел в даташите Qtot - считай по нему. Нашел в даташите графики емкости от напряжения - считай по ним. Все равно получится примерно одно и то же (физику не обманешь методикой расчета).
Ну а если у тебя времени и желания по-человечески общаться нет - тогда лучше сдерживаться, и не провоцировать механизм кармы на затыкание рта в принудительном порядке...
Я вижу, что в 1ю очередь, этого желания нет у Вас, а помогать людям бесплатно или б@же упаси, без просьбы - скверная примета. Тыкать будете равным или подчинённым, с учителями говорить вежливо.
Ничего что заряд, емкость и напряжение связаны линейным законом
Потом опять напишете - мы все понимаем, что не линейным, но говорим так, нам физика не важна)
базовое непонимание того, зачем в ДШ приводят 2 "связанные" велиичины.
и не провоцировать механизм кармы на затыкание рта в принудительном порядке...
Молчать, чтобы не расстраивать идиотов - мотто современного мира)
Драйвер шагового двигателя с векторным управлением