Параллельная работа ШИМ на разных ножках

victor
Offline
Зарегистрирован: 30.03.2013

 

Уважаемые коллеги! Прошу совет. Опыта работы в arduino нет. Работаю с PIC-микроконтроллерам (asm, microC). Польстился на рекламу отладочной платформы DL-chipKIT Max32 (на базе 32-битного PIC32MX795F512) совместимой с arduino. Мне необходимо реализовать устройство управления с 3 независимыми каналами ШИМ, 5 каналов АЦП, примерно 20 дискретных входов и 20 дискретных выходов. ШИМ/АЦП обновление/опрос каждые 0,01 с, дискретные  - 0,1 с. Не нашел внятного ответа на вопрос: «Какими средствами реализован ШИМ и возможно ли средствами arduino реализовать на разных выходах микроконтроллера независимые ШИМ?» Если кто делал, что-то подобное подскажите.

leshak
Offline
Зарегистрирован: 29.09.2011

Эм... немного не по адресу. Если у вас камень пиковский - то это в даташитах PIC-ка нужно смотреть что он умеет, а что не умеет (тем более не очень ясно что подразумевается "независимые ШИМ"). Тем более 32-битый (сама ардуина только начала осваивать AVR32).

Нет никаких особых "ардуино средств". Все средства - это просто всмомогательные библиотеки/функции обертки над обычным AVR/C. Просто что-бы не пугать начинающего сразу необходимостью разбиратся с портами/битами (ценой размера этих библиотек).

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

В случае AVR - независимые шим (если я правильно понял про что вы) - вообщем-то ничего для этого не нужно. AVR имеет аппаратный PWM. Выдал на него, скажем analogWrite(PIN,VALUE); и пошел дальше (делать что-то другое, включать PWM на другом пине) - и он будет там генерится сам по себе (пока не скажешь обратное). На 99% уверен что и у пика то же самое возможно. Но как - это скорее вы лучше меня знаете раз "Работаю с PIC-микроконтроллерам (asm, microC)" ;)

victor
Offline
Зарегистрирован: 30.03.2013

Спасибо leshak, я по базовому образованию инженер-механик. Это сказывается ;). Ваш пост мне помог. Я понял, где поискать информацию. Вы правы на PIC есть аппаратный ШИМ, даже на нескольколько каналов в зависимости от микроконтроллера, но в примерах в MPIDE (аналог класического Arduino) для отладочной платформы DL-chipKIT Max32 мне попался пример, где ШИМ реализован с помощью функции SoftPWMServoPWMWrite() по очереди на всех ножках (около 80 шт.)! Видимо, здесь идет речь о программной реализации ШИМ. Буду разбираться с SoftPWMServoPWMWrite() и analogWrite(PIN,VALUE). Спасибо.

victor
Offline
Зарегистрирован: 30.03.2013

Да, действительно SoftPWMServoPWMWrite() озволяет реализовать на 85 pins одновременно программный ШИМ. В описании функции написано, что при этом расходуется только 10 % временных ресурсов микроконтроллера. Все задействованные по ШИМ pins имеют одну частоту и синхронный запуск по переднему фронту. Однако, на точность поддержания коэффициента заполнения ШИМ может влиять работа других частей программы, не связанной с работой ШИМ. Для моей задачи это должно подойти, т.к. процессы, которыми необходимо управлять достаточно медленные. Короче, буду приобретать железо и пробовать. Возможно даже, обойдусь аппаратными возможностями функции analogWrite(PIN,VALUE).

Еще раз спасибо за то, что откликнулись на мой пост.

leshak
Offline
Зарегистрирован: 29.09.2011

Ну с софт-pwm-мом действительно могут быть проблемы с одновременностью (хотя смотря как реализовывать). Используют его когда аппаратных не хватает.

Если вам нужно много - то есть еще отдельные порто-расширители PWM-моские. Отдельная микруха котроая, скажем по I2C может принять команду "а включика PWM на совоей ноге и держи".

А еще обратите внимание на слово Servo в названии вашей функции.

А AVR-ардуины, тоже есть отдельно analagWrite и отдельно библоитека Servo

anagloWrite - это, если можно так выразится, генерация "стандартного PWM" ("стандарт" в мире ардуины). Частота pwm-ма 490.196Hz , а аналогWrite меняет только процент заполнения.

У сервомашинок исторически сложились немного другие характеристики сигнала (да еще могут немного варьироваться от производителя). Поэтому для них - отдельные либы.

victor
Offline
Зарегистрирован: 30.03.2013

Для DL-chipKIT Uno32 (это тоже на PIC32) есть примеры использования функции analagWrite(). Глючит интернет, не могу пробиться к схеме-описанию на DL-chipKIT Uno32, посмотреть, есть на тех ножках, что в примерах, аппаратный ШИМ. Про "У сервомашинок исторически сложились немного другие характеристики сигнала (да еще могут немного варьироваться от производителя). Поэтому для них - отдельные либы." я не знал, спасибо. В любом случае выбора особого нет, мне плата DL-chipKIT Max32 подходит по цене и по количеству входов-выходов. Если не прокатит с ардуиной, буду на этом железе делать проект на С (на борту имеется разъем для программатора).