Перейти к содержанию
    

amaora

Участник
  • Постов

    815
  • Зарегистрирован

  • Посещение

  • Победитель дней

    4

Весь контент amaora


  1. В итоге все получилось, сделал легковесную библиотеку для решений систем линейных уравнений. Основное, что она делает: 1. Находит оптимальное решение по критерию минимизации L2-нормы невязки (наименьшие квадраты); 2. Использует QR разложение реализованное с помощью быстрых вращений Гивенса (без вычисления квадратного корня); 3. Использует компенсацию потери точности из-за округления с помощью каскадного обновления матрицы R (увеличивает требуемое количество памяти, почти ничего не стоит по производительности); 4. Не требует хранения всех входных данных, можно отдавать по одной строке; 5. Есть оценка СКО невязки и min/max сингулярных чисел; 6. Есть L2-регуляризация для систем с недостатком ранга (но это можно делать и простым добавлением специально выбранных уравнений); 7. Простая реализация на C, из внешних зависимостей функции fabsf и sqrtf; Проблема из п.3 проявляется на больших наборах данных, для single точности можно попробовать >1M уравнений, например в octave: octave:17> X = single(randn(5000000,5)); octave:18> Y = single(X * [1; 1; 1; 1; 1]); octave:19> ols(Y,X) ans = 1.0057 1.0057 1.0058 1.0058 1.0057 Ссылка на код - https://github.com/rombrew/lse
  2. Один датчик и доливать в определенное время, например после сеанса полива.
  3. Векторная ШИМ это пересчёт вектора напряжения из альфа-бетта координат в значения заполнения для каждой фазы которые уже можно отдать в таймер. Может использоваться с любым управлением, это лишь исполнитель заданного вектора напряжения. Векторное управление это регуляторы тока в подвижной связанной с ротором (по направлению потокосцепления) системе координат, на выходе даёт заданный вектор напряжения который идёт в векторную ШИМ. Требует датчик положения и скорости (АД сложнее). Бездатчиковое векторное управление это замена датчика положения в векторном управлении на математический метод оценивания положения по измерениям токов и напряжений. Капризная система с множеством ограничений, может развалится от замены датчиков тока на неподходящие или от того, что выборка АЦП была смещена по времени, от того, что не учли температурный коэффициент сопротивления обмоток и т.п. Это очень поверхностно.
  4. Да я и не спорю, что контуры импульсных токов надо уменьшать.
  5. Там как будто бы надо >200 мкФ чтобы повлиять на переходный процесс. Комплект из керамики и алюминиевых туда никак не умещается в нуле миллиметров.
  6. Ладно, перемерил на имеющейся плате формы напряжений, пока только на слабой нагрузке, и один канал в разных точках (а не два синхронно например), не хватает рук все держать. Измерял щупом с пружинкой. Исток-сток нижнего транзистора (Q2), максимум около 56в, питание ~50в. (Второй график, на большой нагрузке, выходит за 60в) Исток-затвор нижнего транзистора (Q2). Исток нижнего (Q2) - сток верхнего (Q1), AC. (Второй график, на большой нагрузке) На керамическом конденсаторе (C54), AC. (Второй график, на большой нагрузке) Ещё раз фрагмент платы, с конденсаторами. Когда будет по два транзистора параллельно, то фрагмент платы станет длиннее на эти два транзистора и немного шире. Полагаю это приведёт к ухудшению паразитных параметров, поэтому и хотелось заложить возможности для замедления. Может быть два затвора и без особых мер будут перезаряжаться достаточно медленно, но все таки сейчас переключение излишне быстрое как мне кажется.
  7. Потому что ОУ такие, а других данных от автора не поступало. Нужно около 100 мА в работе. Не больше 1м или даже 0.5м, нагрузка и датчики в одном конце, контроллер в другом. Всем спасибо, но переусложнять тоже не хочется, пока вот это обдумаю. На второй ОУ не смотрите, поленился ему диоды и плавкий резистор дорисовать. Не к реализации, а только на анализ схема.
  8. На том экземпляре переключение транзисторов очень медленное. У себя я раньше проводил эксперименты с добавлением ёмкости, замедление было. Зачем и куда Шоттки? Перенапряжение на выходном терминале, середина полумоста. На питании все гладко, конденсаторов хватает, пробовал разные варианты. Начиная с некоторой величины увеличивать мёртвое время смыла уже нет, ничего не изменится, только искажения модуляции. При уменьшении будет порог на котором появляется сквозной ток и повышенное потребление при нулевом токе нагрузки. А выбросы перенапряжения не сильно изменяются при этом. Питание подводят полигоны в нескольких слоях, конденсаторы чуть выше. Были варианты с керамическими конденсаторами на обратной стороне под транзисторами, отказался, не дают полезного эффекта, и затрудняют теплосъём. Вариант с двумя транзисторами параллельно будет иметь ещё большие паразитные индуктивности в силовой цепи.
  9. Да, указал верхний для упрощения описания. Все таки предлагаю разделять два случая: 1) Нарушение управления транзистором в следствии отклонения напряжения на затворе через ёмкостные связи на сток или исток. Может проявляться на одном транзисторе при его переключении, либо при переключении противоположного, важно dU/dt. Здесь запас в отрицательную сторону и возможности драйвера по току решают проблему. 2) Перенапряжение сток-исток из-за колебательного процесса перезаряда ёмкостей сквозным током. Демпфирование этого процесса будет связано с замедлением переключения каким либо путём. Как-то "отключить" эти ёмкости транзисторов нельзя, шунтирование внешним диодом не поможет. Внутренни диод все равно будет открываться и закрываться вместе с транзистором. Иногда могут образоваться условия для мягкого перезаряда Qrr, в зависимости от знака и величины тока нагрузки во время когда оба транзистора закрыты, в общем случае этого обеспечить нельзя. Мне нужно замедление для второго случая.
  10. Не понимаю, я же про выброс на исток-сток говорил. Мощнее драйвер быстрее откроет верхний транзистор, увеличится бросок сквозного тока через ёмкость исток-сток нижнего транзистора, увеличится выброс перенапряжения на исток-сток.
  11. Даже с двухполярным питанием не очень понимаю как сделать ограничение сохранив при этом низкое выходное сопротивление в обе стороны. А что запасов по напряжению нет на падение на ограничителе при большом токе это да. Что-то активное защёлкивающееся в состоянии перегрузки с отключением входа, слишком сложно и быстродействия не хватит.
  12. Эффективно по потерям энергии? Дополнительные 0.5 Вт в затворных цепях не имею значения при общих потерях >20 Вт. Это обратная связь через Cgd, комбинация параметров: выходное сопротивление драйвера + Rg, ёмкость Cgd, пороговое напряжение открытия, величина dU/dt. Но вопрос не об этом. Но тогда он и замедлять переключение перестанет. Пока не видел колебаний в затворных цепях, с этими драйверами, транзисторами, трассировкой. Есть выбросы на выходном терминале, которые видимо вызваны сквозным током перезаряда Qrr у закрытого транзистора и повлиять на это можно только замедлением.
  13. Да, резисторы уже есть как часть схемы диф. усилителя, диоды есть в ОУ (надеюсь на это). Добавлю ещё конденсаторы в обратную связь, чтобы не проходили ВЧ. Да, это тоже дорисую, но поможет только от КЗ в пределах питания. Проблема, что делать если КЗ с потенциалом до 110в. Мне известно лишь одно решение, добавить ограничители напряжения на выходы ОУ и плавкие предохранители. Посчитать, что все будет успешно срабатывать когда надо, и не будет когда не надо. Потом проверить как ёмкость ограничителя будет влиять на ОУ, возможно добавить компенсацию этой емкости. Перетёрлись провода, повредилась изоляция, попала вода в нагрузку, и т.д.
  14. Как будет выполнена прокладка проводов и изоляция это вне моей области. Я лишь рассматриваю варианты повышения безопасности в случае если КЗ уже произошло. В любом случае одного первого эшелона защиты будет мало.
  15. Интерфейс между ЦАП/АЦП и ресолвером. Рассматриваю варианты защиты линий от КЗ между собой и на потенциал ~100в, точнее там ШИМ от -10в до 110в, нарастание ~300нс. По входам наверно достаточно будет добавить НЧ фильтрацию. А по выходам REF_P/REF_N не знаю как. 1) Ограничители напряжения и плавкие предохранители, нужен ремонт после срабатывания, плохо; 2) ??
  16. Да, в этом и вопрос, я нахожу упоминания такого конденсатора Cg только в качестве одного из вариантов устранения эффекта Миллера. Но можно же и переходный процесс затянуть таким способом. Это лучше чем только лишь увеличивать Rg, что может в итоге привести к проявлению эффекта Миллера раньше, чем будет достигнут желаемый результат. У меня так и получалось, увеличивал Rg, чтобы устранить перенапряжения при переключении, но начинал проявляется эффект от ёмкости Cgd и драйвер переставал удерживать затвор в требуемом состоянии.
  17. Увидел в одном дешёвом BLDC контроллере использование конденсатора, включённого между затвором и истоком, для замедления переключения силовых транзисторов. В литературе по теме управления MOSFET/IGBT такое встречается редко. Из своего опыта, мне это кажется интересным способом управления временем переключения, хочу попробовать. Недостатки очевидны, но все же непонятно, почему редко так делают. 1) Просто реализовать, один дополнительный компонент; 2) Не увеличивает выходной импеданс драйвера, то есть не мешает ему держать напряжение на затвор-исток при высоких du/dt на затвор-сток; 3) Нагружает драйвер бесполезной ёмкостью, увеличиваются потери; Для большей определённости, фрагмент предполагаемой схемы и имеющейся трассировки в которой была необходимость замедлить переключение (пришлось уменьшить питание с 12в до ~10.5в).
  18. Можно вместо голых указателей использовать чуть более сложные объекты для доступа к выделенной памяти. Так, чтобы куча знала где лежат ссылки на ее объекты. Это позволит делать дефрагментацию без mmu. На C++ наверно кто-то так делает, но это сложно. Другой вариант. Использовать блоки фиксированного размера, и на них строить все необходимые структуры данных, например списки из блоков. Так можно и на C, но метод несовместим со старым и сторонним кодом который работает с большими кусками памяти.
  19. #define Func2(...) do { const Data t = __VA_ARGS__; Func(&t); } while (0) typedef struct { int A; int B; float C; } Data; void Func(Data *d) { printf("%i %i %f\n", d->A, d->B, d->C); } int main() { Func2({3,4,6.7}); }
  20. Последовательность умножений на весовые матрицы, а после каждого умножения может быть нелинейная функция. \(v_{out} = ... f(b_2 + W_2 f(b_1 + W_1 v_{in}))\)
  21. Для таких простых регуляторов есть теория управления, которая даёт результат гарантированного качества. Нейронный регулятор имеет смысл при управлении сложной нелинейной системой уровня шагающего робота. Можно конечно закрыть глаза и сделать вид, что ничего не знать не хочу, пусть регулятор сам учится, но тогда решение получится избыточно сложное. 1) Если исходные данные представлены в виде пар вход->выход (например можно прокатиться на управляемой системе с другом регулятором). Выбираем структуру сети, так чтобы она была достаточно сложной для аппроксимации зависимостей выходов от входов, но не слишком сложной, чтобы не происходило простого запоминания всех обучающих примеров. Обучаем известными методами: обратное распространение, линейная регрессия. 2) Если исходные данные представлены так же в виде вход->выход но теперь мы не считаем эти выходы эталоном, вместо этого добавляем оценку качества регулирования, оценка даётся для длинной временной последовательности (для эпизода). Стартуем с неким неоптимальным регулятором (например синтезированным по п.1), добавляем в управление случайным элемент и набираем много данных (эпизодов). Получаем уже данные в виде массива {набор пар вход-выход для всего эпизода}->{оценка качества}, исходя из этого рассчитываем например градиент коэффициентов регулятора по оценке качества, двигаем параметры по градиенту. Проводим с новым регулятором следующую серию испытаний и собираем данные эпизодов. Повторяем итерации до достижения необходимого качества. 3) Бывает, что есть только входы. Такую задачу может иметь смысл рассмотреть как часть п.1,п.2 в качестве предварительной обработки данных в случае большого количества входов. Несколько слоёв автоэнкодера или алгоритмы кластеризации. Это называют извлечением особенностей из исходных данных, так в глубоких сетях при работе с изображениями получается сопоставить изображение его текстовому описанию, например. В результате регулятору будет проще работать с этими сжатыми абстрактными особенностями, чем с сырым массивом данных.
  22. Есть и достаточно простые нейросети, которые даже обучать можно на мк. Нелинейный вариант FIR можно натренировать извлекать полезный сигнал, запоминать форму искажений для компенсации, наблюдатель состояния. Можно и IIR, но я пока не понял как их обучать. Делаю все на своей коленке, без python нейро-фреймворков. Нужно много данных, то есть либо готовых примеров вход-выход, либо если есть только входы то нужны еще и критерии качества выходов и еще больше данных и времени обучения. Это для задач, где обычное решение, синтезированное человеком не представляется возможным, неизвестна модель системы, слишком сложно и т.д.
×
×
  • Создать...