8-битный ШИМ с частотой 1кГц - нужно сделать 8 каналов на mega2560.

Тема в разделе "Arduino & Shields", создана пользователем iva2000, 23 апр 2012.

  1. iva2000

    iva2000 Нерд

    Позволяет ли mega 2560 одновременное независимое управление 8-ю 8-битными шимами с частотой не менее 1кГц? Если нет, то почему и с какой частотой это возможно?
    Может ли процессор жить своей жизнью, слушая какие-то еще датчики, считая что-то, управляя чем-то еще, и попутно время от времени (допустим раз в 0,1сек) изменять скважность шима в восьми каналах, работающих с частотой 1кГц или выше?
    Спрашиваю, потому, что спец, которого я об этом спрашивал, сомневается.
     
  2. nailxx

    nailxx Официальный Нерд Администратор

    Да, это возможно. Микроконтроллер работает на частоте 16 МГц, следовательно счётчик PWM пробегает 256 значений (8 бит то есть) с частотой 16 000 000 / 256 = 62500 Гц. В случае fast PWM, когда счётчик сбрасывается когда доходит до потолка, 62,5 КГц — максимум, который вы можете получить. В случае phase-correct PWM, когда при достижении потолка счётчик начинает считать обратно до нуля, максимум — это 62,5 / 2 = 31,25 КГц. Некоторые пины на Arduino управляются таймерами на fast PWM, некоторые phase-correct PWM.

    Вы можете понизить частоту, настроив 3 младших бита регистра TCRxB на ATmega, где X — номер таймера. На официальной вики есть примеры.

    Имейте в виду, что функции delay, millis, microseconds, библиотека Servo и некоторые другие предполагают, что их таймеры трогать не будут. Поэтому если вы понизите частоту они будут работать некорректно.

    А по поводу параллельности и вызова чего-либо каждые 0,1 сек — это возможно. Вам нужно воспользоваться аппаратными прерываниями по таймеру.
     
  3. iva2000

    iva2000 Нерд

    Nailxx, большое вам спасибо!
     
  4. iva2000

    iva2000 Нерд

    Открыт тендер на реализацию 8-канального ШИМ-а за деньги. Может быть здесь есть кто-то, кто может мне помочь.

    2012.04.24 ТЗ на 8-битное ШИМ-управление
    http://goo.gl/xXJFG

    Надеюсь, это не противоречит правилам форума
     
  5. nailxx

    nailxx Официальный Нерд Администратор

    Не противоречит. Если кто возьмётся, будем только рады, что косвенно помогли.
     
  6. Корней

    Корней Гик

    Ну раз 16 мегагерцовый МК не способен выдать 8 каналов шим с частотой 1кГц, остается только одно: аппаратный ШИМ на 8ми 556 таймерах, скважность будет управляться 8мью цифровыми потенциометрами.:rolleyes: Вместо потенциометров можно использовать переменные резисторы, управляемые сервоприводами.
     
  7. nailxx

    nailxx Официальный Нерд Администратор

    Дык как же невозможно, если возможно?! На ATmega2560 4 аппаратных таймера. На каждом таймере по 3 компаратора. Итого 4×3 = 12 аппаратных ШИМ-каналов с максимальной частотой 31,25 КГц при phase-correct PWM.
     
  8. Корней

    Корней Гик

    В смайлах табличики "Сарказм" не было. Вот я и использовал :rolleyes:
     
  9. nailxx

    nailxx Официальный Нерд Администратор

    Не дочитал до переменных резисторов, управляемых сервоприводами :)
     
  10. Unixon

    Unixon Оракул Модератор

    По даташиту меги вроде как получается, что у каждой пары-тройки каналов частоты будут совпадать, но может отличаться скважность, а при одинаковой скважности гарантированно будет совпадать еще и фаза. Т.е. управление 8 ШИМ каналами не полностью независимое. Так получается?
     
  11. nailxx

    nailxx Официальный Нерд Администратор

    Всё верно. То есть совсем-совсем независимое возможно для 4-х каналов. Но действительно ли существуют прикладные сценарии, когда это важно?! Автор пояснит?
     
  12. Корней

    Корней Гик

    8 килогерцовых 8-битных фазонезависимых шимов на 16мегагерцовом risc-контроллере можно сделать без аппаратной поддержки вообще. Если "в лоб", то "в притык", конечно. Но можно. Соответственно, чем больше операций будет переложено на аппаратуру, тем больше будет свободных тактов. Или можно уменьшить точность ШИМ, не всегда 8бит приниципиально отличается от 7-ти или 6-ти.
     
  13. iva2000

    iva2000 Нерд

    Есть 8 ШИМ-управляемых микросхем, которыми нужно управлять. Частота ШИМ - не менее 1кГц.
    Желаемая точность 1% - удовлетворительно, 0,5% - хорошо. 8 бит - это точность 1/256 или 0,4%, то есть хорошо.
    Да, управление должно быть независимым.