Как создать инвертированный ШИМ на Due с помощью программного обеспечения

Здравствуйте, мне нужен фрагмент кода, который позволяет мне инвертировать сигнал ШИМ двух контактов ШИМ на должном уровне. Пример D1 будет 101010, а D2 будет 010101. Возможно ли это?

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

, 👍1

Обсуждение

инвертированные 75% такие же, как неинвертированные 25%, @jsotola

@jsotola Мне трудно представить, что, хотя они будут противодействовать, но частота не будет совпадать, 25% пропустят один цикл из 75%. Я что-то пропустил?, @Jack

возьмите лист бумаги и карандаш... нарисуйте 10 циклов 25% сигнала ШИМ... переверните бумагу вверх ногами... может я что-то упускаю, @jsotola

[Изображение](https://ibb.co/mbfz7Sf). Вышеупомянутый сигнал на изображении составляет 75%, а нижний — 25%. 25% отсутствует один цикл из 75%, @Jack

это ШИМ... https://www.nightsea.com/wp-content/uploads/2017/12/PWM-diagram.jpg, @jsotola

Да, у меня неправильное понимание PWM, извините. [Новое изображение](https://ibb.co/JrWhh7X) хотя и перевернуто, но мне нужно немного уменьшить его. Теперь это был бы другой подход, я думаю, что проще сделать, оба, я думаю, будут включать прямые манипуляции с регистрами., @Jack

Давайте [продолжим это обсуждение в чате](https://chat.stackexchange.com/rooms/103672/discussion-between-jsotola-and-jack)., @jsotola

вы можете использовать вентиль xor для инвертирования сигнала ШИМ. это позволяет вам легко отменить инвертирование сигнала с помощью другого контакта GPIO, питающего другой вход затвора., @dandavis

@dandavis хорошо, это подход, который я могу использовать, если не могу найти способ сделать это с помощью программного обеспечения. со всем, что я прочитал до сих пор, я считаю, что это можно сделать с помощью программного обеспечения, получить его немного сложно, @Jack


1 ответ


1

Не используя Arduino API, нет. Но вы можете напрямую манипулировать регистрами SAM3X8E.

Вам следует изучить раздел 38 техническое описание, где упоминается в списке объектов:

  • Независимые дополнительные выходы с 12-битным генератором мертвого времени (также называемого мертвой зоной или неперекрывающимся временем) для каждого канала
,

Манипуляции с регистрами мне не по плечу, надеюсь, есть примеры., @Jack

@ Джек Вероятно, есть, но, вероятно, не здесь. Хотя форумы Atmel могут быть хорошими., @Majenko