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

engel65536

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

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

  • Посещение

Репутация

9 Обычный

Информация о engel65536

  • Звание
    Участник
    Участник

Информация

  • Город
    Array

Посетители профиля

2 477 просмотров профиля
  1. Либо, если без ПИД, можно сделать "по-глупому". Задайте целевую освещённость и зону нечувствительности для неё. На каждом "шаге" смотрите, куда попадает текущая освещённость: в зоне нечувствительности ничего не делаем, ниже её увеличиваем ШИМ на заданный шаг, выше неё снижаем ШИМ на тот же заданный шаг. Для корректного задания ширины зоны нечувствительности и величины шага изменения ШИМ нужно будет подумать и снять какие-то экспериментальные данные. Чем лучше подберёте значения, тем лучшее быстродействие получите.
  2. STM32F0 DMA TIM3_CH2

    С учётом того, что описание общее для TIM2 и TIM3 - ничего удивительного, что там описан DMA для CH2. В F0 DMA на TIM3.CH2 нет.
  3. Прежде, чем разбираться, я бы посоветовал привести конфигурацию в порядок. Верните их обратно. Их отсутствие ничего не улучшит, а вот ухудшить может легко. Если нет внешней и внутренней подтяжки и вывод сконфигурирован как цифровой вход, то он легко может потреблять огромные токи - причём в зависимости от погоды на Марсе. Или сконфигурируйте как выход, или включите подтяжки, или сконфигурируйте как аналоговый вход. Это нужно сделать для всех выводов. По моему мнению, пока эти два пункта не выполнены, смотреть на потребление и разбираться с ним смысла не имеет.
  4. Делаете циклическое увеличение целочисленного значения и на каждой итерации пересчитываете своё дробное значение из него.
  5. Будет куча проблем, как уже писали выше - и с привязкой к координатам платы, и с тем, что вы замучаетесь выставлять плоскость XY принтера параллельно плоскости закреплённой платы, и со многим другим. Но если именно по вашему вопросу и с учётом именно "попробовать" - то всё просто, оно уже всё есть - разве что куча нудной работы в пункте 3: 1. Гуглим "gerber to dxf" 2. Соответственно, конвертируем пробный гербер в dxf. 3. В любом механическом каде выдавливаем этот dxf в деталь с нужной толщиной, экспортируем в формат stl (возможно, тут нужно будет ручками повычищать кучу всякого шлака из dxf). 4. Скармливаем stl в ваш любимый слайсер, долго и нудно играемся настройками и пробной печатью, чтобы убедиться, что всё тлен и ну его нафик 🙂
  6. Доброго утра. С STM32MP не работал, но указанные вами числа наводят на простую мысль. Вы не могли настроить input capture так, что ловите обе полярности фронта? 0.5 мс, как по мне, вполне похожа на длительность PPS-сигнала. Тогда вы будет получать у себя при захвате не период, а период за вычетом длительность импульса. Правда, не знаю, куда тогда теряется второе измерение захвата, которое должно показать малую величину, равную длительности импульса. Ну и если проблема не в этом - вы проверяли, что ваша частота тактирования правильная? Маловероятно, но всё же - или PLL не так настроен, или частота переключается во время работы. Я бы сделал с какого-нибудь таймера PWM с периодом в 1 с, смотрел бы осциллографом PPS-сигнал и выхлоп PWM, вручную подогнал бы фазу PWM через отладчик и посмотрел бы, не разбегаются ли сигналы на ваши 0.06%.
  7. Создали указатель на стеке, пока что указывает "в никуда". Создали указатель на стеке, указывает на выделенную память под структуру в куче. Создали структуру на стеке. Они нигде не используется, эту строчку можно удалить. Литерал в статической памяти (создаётся при старте программы), указатель теперь указывает на него Поле структуры (сама структура в куче), являющееся указателем, указывает на литерал в статической памяти. Ещё один литерал в статической памяти, указатель теперь указывает на него. Старый литерал никуда не исчез. Поле структуры (сама структура в куче), являющееся указателем, указывает на литерал в статической памяти. Кстати, (strart+1) на самом деле не существует, под него никто память не выделил - malloc был только на один элемент, не на два. Это ошибка. Выведет первый литерал - "asd11111". Выведет второй литерал - "qwe222222". Не считая ошибки с невыделенной памятью под эту структуру. По вашим вопросам. Сами строки (символы) в вашем случае хранятся в статической памяти, это литералы, на которые вы просто нацеливаете свои указатели. Возможно, компилятор вообще положит (но он не обязан) их в flash. Правда, вы используете char*, а не const char* - могут быть нюансы. В вашем случае с использованием литералов - никогда, они всегда будут лежать в статической памяти. В этот момент уничтожатся только поля структуры, являющиеся указателями, данные, на которые они указывают, никуда не денутся.
  8. Tools->Design rule check (не Design->Rules!), галочки в списке правил Rules to check для online/batch стоят?
  9. А какая стоимость для вас приемлемая? И вы уверены, что своё "нано"-производство будет выгодней? Затраты на закупку оборудования, на его поддержание, на человека, который это всё окучивает. У лазерных резчиков расценки грубо - 10 рублей за метр реза. Материал можете свой принести. При нормальном объёме заказа (десятки-сотни) выйдет недорого. Это гравёр. Резать он может и сможет, но на пределе возможностей. По описанию непонятно - а он умеет управляться нормальными G-кодами, а не брать картинку с флешки? Если нет, то забудьте про него, нормального качества вы не добьётесь. Не исключено, что при том количестве дыма, который выделяется при резании (по сравнению с гравировкой), его оптика очень быстро "кончится". Можно прикулибинить туда отсос дыма, но это так себе решение для производства, а не для баловства. И вы уверены, что толщины 1 мм (без каких-либо рёбер жёсткости) вам будет достаточно? 1 мм - весьма хлипкая пластинка.
  10. Вам действительно нужно именно своими силами? Если нет, то могу предложить пару вариантов. Они работают в том случае, если плоская заготовка для вас годится (то есть или лицевая панель сама по себе плоская и может быть заменена своей пластиной, без каких-либо выступающих элементов, или вы можете клеить свою панель на штатную, в которой вырезаете "абы как" дырки произвольной формы, перекрывающие требуемые отверстия в лицеой панели). Первый - оргстекло. Рисуете чертёж контура и всех отверстий, отдаёте на лазерную резку - цены весьма демократичные. Такие конторы есть в любом городе, обычно могут делать на своём материале (то есть вы только отдаёте чертежи, потом забираете готовое). Получаете красивые детальки с правильными отверстиями где надо. Оргстекло будет прозрачное бесцветное, если не заморачиваться с поиском крашеного. Теперь рисуете, что хотите видеть на панели, и сдаёте детали и рисунок в типографию. Этот способ позволяет полноцветную печать, то есть можете хоть картину рисовать. Мы как-то делали по такому процессу детали, получалось хорошо, дёшево и быстро (пара недель) - но это были не лицевые панели. Насчёт износостойкости краски ничего сказать не могу. Возможен вариант с другим пластиком вместо оргстекла, но тут нужно общаться с теми, кто будет делать - лазером не все режут всё подряд, плюс вопросы как будет ложиться краска. Второй - алюминий. Опять же чертёж, теперь сдаёте тем, кто режет лазером метал - это обычно не те, кто занимается оргстеклом. Такая резка будет несколько (в разы) дороже оргстекла. Отдаёте на окраску (порошком, например), красите в чёрный или другой тёмный цвет. Потом идёт к тем, кто режет пластик лазером - они обычно умеют делать гравировку - и отдаёте крашеные детали на гравировку. Лазер выжигает краску до алюминия, в итоге вы получаете тёмную панель и светлые надписи на ней. Этот процесс мы рассматривали, но никогда не делали. Будет дороже и дольше первого, ограничено в двух цветах (краска и голый алюминий), но скорее всего очень износостойко и надёжно.
  11. День добрый. Попробуйте мой OutJob. UC3843-Eval-lut.OutJob
  12. Добрый день. Если для вашей аппаратной части зависание управляющих сигналов недопустимо, то я бы сказал, что решать эту проблему нужно аппаратно. Самое банальное и простое решение - ставите конденсаторы в разрыв сигналов и за ними притягиваете сигналы к безопасным уровням. Любые программные уловки, о которых вы думаете, легко могут на сработать, просто будучи непредумышленно, по случайности выключенными. Если же аппаратная часть нормально переносит зависание, то мне не совсем понятна суть вашей проблемы. Вы хотите сделать так, чтобы останов/зависание не привело к чему? Не лучше ли в такой ситуации делать на DMA не аварийный механизм, а штатный? Реализовать динамическую индикацию на таймерах и DMA так, чтобы она работала полностью независимо от ядра - и больше нет проблемы с вочдогом, потому что записать нечему.
  13. Как-то так. Это правило на расстояние между медью (не отверстием) переходного и падом.
  14. А следует ли этот Шкаф какому-то стандарту? Складывается ощущение, что или он какой-то специфичный, или его разработчики любят велосипеды. Судя по всему, у этих реализована автоподстройка частоты. В противном случае я не представляю, как UART физически может принимать данные при 20% отклонении частоты. Есть, но не во всех - AN4908 об этом рассказывает. Может быть, у ТС подходящая серия, и на ней можно задействовать autobaud? Насчёт autobaud в GD32 ничего не знаю.
  15. Доброго дня. Уточните, какая именно частота гуляет. Период поступления байт или битовая скорость. Если гуляет битовая скорость на 20%, то тут, насколько мне известно, ни один UART работать не будет - если один байт это 10 бит (стартовый, 8 бит данных, стоповый), то при разбеге частоты между передатчиком и приёмником в 10% у нас к концу байта будет смещение на один целый бит. Если гуляет период между байтами, то здесь нет никакой проблемы. Интерфейс UART работает только с байтами, не с посылками из нескольких байт, и ему нет вообще никакой разницы, с какой частотой ему приходят байты. То есть какие бы ни были паузы между байтами (от нулевой до бесконечной), UART на это никак не реагирует. Блок UART синхронизируется по первому (стартовому) биту, не байту. И эта синхронизация работает до последнего бита в байте (стопового). На приём последующего байта приём предыдущего не влияет никак. Может быть, у вас поверх UART работает какой-то протокол (например, Modbus с его 3.5×Tchar), который воспринимает паузу между байтами как окончание фрейма, а затем (из-за того, что получил не всю посылку) признаёт фрейм ошибочным? Кстати, я правильно понял, что Баян1 (на STM32) вы не пробовали с связке со Шкафом? Я сильно подозреваю, что этот Баян1 будет вести себя в этих условиях точно так же, как и Баян2 на GD32.
×
×
  • Создать...