Как стать автором
Обновить
147
0.1
Максим Лашкевич @BelerafonL

Инженер-программист

Отправить сообщение

Очень интересная история, спасибо! Для "домашних мастеров" было бы интересно узнать чуть больше конкретики - откуда брать схему и разводку платы для BoardView, с чего начинать диагностику для конкретных симптомов (чек лист), в каких точках что замерять и почему они подозрительны.

Было бы неплохо увидеть конкретные рецепты (или ссылки на них) - откуда скачать, в каком облаке что купить, как загрузить, как запустить, как сделать автокомплит кода на основе этой штуки в VScode или подобное.

Спасибо, оно самое!

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

Ну вот первые что есть на али на запрос "зарядка для телефона". От 80р до 180р.

https://aliexpress.ru/item/1005002142704842.html
https://aliexpress.ru/item/1005002724174077.html
https://aliexpress.ru/item/1005005950523090.html

Думаю, там внутри всё тоже что у вас на фото.

Всё познаётся в сравнении. Думаю, это ещё хорошая. На озоне такие за 600р. А вот если зайти на али, то там за 178р с бесплатной доставкой на 4 порта, квик чардж 3.0, разноцветная и 39552 человека купили. Вот такую бы автор разобрал...

Проблема бросков тока в данной задаче при резком изменении задания напряжения решается либо введением задатчика интенсивности на изменение напряжения, либо введением контура тока (токоограничения) в системе управления.

У нас есть опенсорсный проект - https://bitbucket.org/niietcm4/motorcontroldemo/src

Это среднестатистический сферический в вакууме проект для векторного и скалярного управления для трёхфазного шестиключевого инвертора. Для микроконтроллера НИИЭТ К1921ВК01Т, который сделан по мотивам даташитов тексаса. Периферия ШИМ - там почти полная копия тексаса. Но шариться по чужим исходникам, чтобы что-то найти и доказать, трудное дело - например, в этом проекте motorcontroldemo частота ШИМ и мёртвое время и минимальная скважность настраиваются пользователем через CAN, и что там стоит по дефолтам из исходников выяснить почти невозможно. Поэтому я и спросил у вас, какие частоты, времена и периоды, чтобы не тратить кучу времени на вычитку вашего проекта.

Насчёт вопроса про регистры - какие опасные, какие безопасные. Я так вопрос бы не ставил именно про регистры, лучше сформулировать так: подход реализации программного мёртвого времени через смену периферийной функции портов на GPIO и возвращение её назад сильно более опасный, чем реализация МВ периферийным модулем ШИМ, который отлажен годами производителем микроконтроллеров. Если искать аналогии, то для меня это как ехать на одноколесном велосипеде жонглируя шариками, или на автомобиле с пристёгнутыми ремнями безопасности.

Если же вы серьезно рассматриваете гипотезу о том, что у вас от помех PLL проца глюканул, и поэтому ШИМ сбился, и так повезло что только ШИМ, а всё остальное работает... То я бы при наличии такой гипотезы остановил бы все опыты дальнейшие, воспроизводил бы только эту проблему, усугубил её и менял схемотехнику до полного её устранения и даже потенциальной возможности повторения. Чип не должен таким образом сбоить от слова совсем в реальной задаче. Обходить проблему программно, меняя вид помехи воздействуя на GPIO, имея в голове что первопричина это сбой тактирования, это категорически неправильный подход. Это маскирование симптомов, а не болезни.

По поводу запуска АЦП - в тексасе тоже можно запускать АЦП по условиям компараторов таймера ШИМ. Но чисто из удобства захотелось запускать от отдельного таймера, который можно подвигать. Иногда оба (а их у тексаса два) компаратора таймера заняты под ШИМ, и тогда запускать АЦП нечем (кроме нуля и периода таймера). Чуть гибче выходит отдельным таймером. И этот другой таймер аппаратно синхронизируется с таймером ШИМ с заданной пользователем фазой - тут костыля не вижу, я не обхожу какую-то багу проца, где шаг влево или вправо это сквозной ток и бабах. Это один из штатных вариантов использования периферии.

Никто не запрещает делать задержки по 8 нсек, имея просто достаточные опции по делителям таймеров и достаточные регистры мёртвого времени. В тексасе нету проблемы сделать МВ как 8нс, так и 8мкс. Кроме того, в новых микроконтроллерах тексаса появился ШИМ высокого разрешения HRPWM, где можно отмерять ширину импульса с разрешением внутри одного такта процессора. Мой посыл в том, что странно что в микроконтроллерах ренесанс из-за ограничения МВ на максимальную шину 8нс приходится изобретать программные костыли. Мы делали проекты с частотами ШИМ от 1 до 500кГц на тексасах и ни в какие такие ограничения не попадали, чтобы нам МВ или разрешения таймера ШИМ не хватало, и от этого прям портилась точность задания напряжения ощутимо для задачи. Где частота ШИМ низкая, ключи медленные, там ставим делители на таймеры ШИМ, и тогда и регистр МВ начинает работать для более широких значений. Для высоких частот ШИМ работаем без делителей. Разве в ренесансе не так? Можно конкретики - какая у вас частота ШИМ, какое мёртвое время на ключах, какой период таймера ШИМ в Uint32 и какое максимальное МВ получается отсчитать?

По поводу сдвига момента запуска АЦП - опыт подтверждает теорию (расчёт). А иногда не подтверждает и надо разбираться. Просто всегда удобно подвигать момент запуска и проверить, что он настроен правильно. Поэтому используется для запуска АЦП отдельный таймер, и никогда не используется просто запуск по нулю(периоду) основного таймера ШИМ. Ну просто чтобы была степень свободы.

В тексасах типа TMS320F28335 мы вполне комфортно задаём мёртвые времена (МВ) порядка единиц микросекунд. Типичное мёртвое время для мощных ключей на киловольт и килоампер 4мкс. Ни о каких ограничениях типа наносекунды речи не идёт. Частоту тактирования таймеров ШИМ мы иногда понижаем раза в 2-4 относительно частота ядра. Но не чтобы обеспечить большое мёртвое время, там регистра и так хватает, а чтобы сделать очень низкие частоты ШИМ порядка 1кГц.

Я не очень понял, к чему относилось "Но у него слишком маленький максимальный интервал 8 ns на штатной частоте" - у него это у тексаса или ренессанса? Очень странное короткое мёртвое время. Неюзабельное я бы сказал. 8наносекунд это что, несколько десятков тактов ядра? Там регистр мёртвого времени 8 бит что ли, притом что таймеры 32 бита? Какая частота ядра? У тексаса 100-200Мгц.

Делать МВ каким-либо ещё образом, типа сдвигов уставки сравнения, это прямо крайне опасно - и ожидаемо приводит к проблемам типа вашей.

По поводу центрирования момента измерения тока в середине периода таймера (или нуля, смотря как полярность настроена). Да, это стандартный способ измерения токов в шунтовых датчиках тока в нижних ключах инвертора. И да, мёртвое время без магии упреждения сдвигает центр импульса немного относительно периода таймера. Но целиться ровно-ровно в середину импульса по нашему опыту неверно - есть задержка в переходном процессе на операционниках, т.е. после того, как нижние ключи включились, и типа можно измерять, надо выждать паузу на устаканивание сигнала на входе АЦП микроконтроллера - дождаться, пока включится ключ, потекут токи по резистору шунтовому, операционник отработает и зарядит выходной кондер на входе АЦП. Поэтому в общем случае мы всегда в таких задачах запускаем АЦП от отдельного таймера, который сдвинут относительно таймеров ШИМ на заданную пользователем задержку. И подбираем этот сдвиг опытным путём в зависимости от настроек МВ, задержки операционников, времени коммутации ключей и т.п.

А порты перепрограммировать просто опасно - нет гарантии, что вы сделали это правильно для всех-всех случаев, и что кто-то помимо вас, кто полезет в проект, эту тонкую настройку не сломает приоритетом прерываний, сменой частоты ШИМ или чем-то таким. Аппаратное МВ в периферийном модуле микроконтроллера имеет сильно большую защиту от дурака и надёжность. Очень странно, что там 8нс. Что-то не так... Этого никому не хватит. Притом, что в микроконтроллере продуманы аж такие вещи как упреждение генерации фронта МВ, странно что длительность МВ такая маленькая.

Да нет, где сотни вольт и ампер ставят обычный микроконтроллер и прямо его ШИМ выходы A, B ведут на управление драйверов ключей. Вот где больше тысячи вольт и ампер - там приходится делать многоуровневый инвертор и некоторые разработчики применяют ПЛИС. Но мы делаем и то и другое напрямую на микроконтроллерах (обычно Texas, но и на других делали) без дополнительных аппаратных блокировок мёртвого времени. И ни разу проблемы со сквозняками не было. Как в периферийном модуле мёртвого времени МК задали, так оно и получается.

Советую всё же сделать пример, воспроизводящий проблему и опубликовать на форумах ренесанса, а сюда кинуть линк - мы с коллегами тоже глянем на воспроизводящий баг код и осцы. Желательно, чтобы кода было не больше страницы - инит и запуск ШИМ на 50% скважности, и после программной задержки в несколько периодов ШИМ воспроизведение баги за счёт изменения уставки сравнения. Такой код был бы легко читаем и воспроизводим.

В мощных преобразователях частоты (сотни вольт и ампер) драйвера сами мёртвое время не вставляют - видел такое, но очень редко. Более того, есть драйверы независимые на один ключ, которые про ключ соседний и его сигналы управления ничего не знают. Если бы такая серьезная бага была в микроконтроллере, который претендует на управление электродвигателями, то её заметили бы если не первые, то вторые пользователи. А если микроконтроллер с его устоявшейся периферией ШИМ существует уже много лет, то это намекает, что там должно быть с этим всё ок. Касаться уставкой сравнения нуля или периода таймера - не какая-то экзотическая ситуация, а прямо скажем каждодневная.

Как говорится, понятно, вычёркиваем. (из планов смотреть на эти контроллеры).

Но производителю я бы написал - на форуме или где там принято, зарегаться с гугловской почты и подробно расписать проблему. С примером кода, осциллограммами и вариантами что пробовали. Всё равно я уверен на 95%, даже после вашего ответа, что решение есть и штатный модуль мёртвого времени должен работать.

Почитал рассуждения про мёртвое время, что есть опасность, что оно может в каких-то случаях не выдерживаться, и поэтому автор перешел на прямое управление портами ввода-вывода (костыль крайней меры). Как электроприводчик, который каждый день это программирует, могу сказать что такое поведение микроконтроллера - нонсенс. В микроконтроллерах модуль мёртвого времени как раз и делают для того, чтобы оно выдерживалось вообще всегда, при любых, каких угодно изменениях уставок сравнения таймеров ШИМ. И пользователь навсегда забывал об опасности сквозных токов. С Renesas Synergy не работал, но во всех других микроконтроллерах, что мне доводилось использовать, мёртвое время было гарантировано и работало вообще всегда. Иначе такой микроконтроллер на выброс. Для включения наглухо нижнего или верхнего ключа достаточно задать уставку сравнения равной нулю или периоду таймера. Всё.

Думается, автору нужно лучше перечитать даташит на модуль ШИМ и обойтись штатными средствами выдерживания мёртвого времени. Нужно обратить внимание на использование теневых (буферных) регистров сравнения - чтобы новая уставка сравнения начинала отрабатываться не в момент записи в регистр программой, а на следующем периоде ШИМ при переходе таймера через ноль.

Если же действительно мёртвое время не выдерживается, то надо локализовать место и сделать минималистический демо-пример ошибки, снять осциллограммы с выхода микроконтроллера для управления верхним и нижним ключом и писать производителю микроконтроллера. Это слишком серьезная "бага".

К сожалению, после прочтения статьи так и не получил внятного ответа, что такое CFG Scale...

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

Не понял, почему не заходить? Чем отличается подобное устройство от телевизора, микроволновки, роутера, ардуино, лампы с вайфай, которые включены даже ночью? Да, светодиодная лента испускает свет, достаточный для ночного пользования. А роутер просто на эту мощность греется...

Готовые светильники на батарейках с али с датчиком движения имеют таймер включенного состояния порядка 10 секунд. Как пользователь такого светильника в уборной, с уверенностью сообщаю, что бесит невероятно. Нужен таймер порядка 10 минут хотя бы и надежный датчик движения. Из бюджетных светильников таких нет. Лучше пусть всегда горит от сети. Рубль в месяц, но не раздражает.

Почему нет? Светодиодная лента на 12В, запитанная от блока питания 3-5В или типа того. Будет потреблять порядка 0.5Вт и пусть себе горит всегда. Думаю, питание ардуино + блок питания + питание лампы вайфай будут столько и потреблять сами.

"почему еще не изобрели лампочку, которая ночью бы светили тусклее чем днем" - потому что ставят две разные лампочки, для основного и дежурного освещения.

Спасибо за статью. В статье и комментариях все рассуждения основаны на исконном знании откуда "розлив" - сверху или снизу, и в какой комнате как. А как это узнать-то? Я как-то спрашивал своих местных сантехников - одни сказали сверху, другие сказали снизу, третьи сказали не знают. Как можно достоверно узнать, в какой комнате куда течёт теплоноситель? Тепловизор есть, но по нему разницы температур в стояке не заметил. А как ещё определить - не знаю. Думаю, полезно в статье добавить способы определения направления разлива... или я его пропустил?

1
23 ...

Информация

В рейтинге
2 839-й
Откуда
Москва и Московская обл., Россия
Зарегистрирован
Активность