Модуль MicroPython для управления 16-ти канальным ШИМ контроллером, PCA9685. В дальнейшем контроллер! Контроллер предназначен для управления СветоИзлучающими Диодами (СИД) или другими нагрузками, управляемыми ШИМ.
Просто подключите контакты (VCC, GND, SDA, SCL) платы контроллера к соответствующим контактам MicroPython платы, ESP или любой другой с залитой прошивкой MicroPython! Вывод OE, платы контроллера, можно никуда не подключать. На плате он подключен к шине GND через резистор 10 КОм, поэтому выходные каскады контроллера ШИМ включены постоянно. Вы можете управлять ими, задействовав свободный GPIO MicroPython платы, настроив его, как ВЫХОД!
Контроллер доступен по широкому диапазону адресов на шине I2C в диапазоне 0x40..0x7F, с некоторыми исключениями. Адрес можно настроить перемычками на самой плате контроллера!
Напряжение питания PCA9685 от 2,3 В до 5,5 В!
Загрузите прошивку micropython на плату NANO(ESP и т. д.), а затем файлы: main.py, pca9685mod.py и папку sensor_pack полностью! Затем откройте main.py в своей IDE и запустите/выполните его.
В случае подключения СИД к выходам платы контроллера, всегда используйте двух контактный разьем дополнительного питания, поскольку общий ток до 16-ти СИД будет уже достаточным, чтобы влиять на питание micropython платы. Допустим, вы подключили 16 СИД. Токоограничивающий резистор расчитали на ток 5 мА. Итого: 16x5=80 мА дополнительной нагрузки на стабилизатор напряжения MicroPython платы! Поэтому, в таком случае, используйте линию +5V_USB. На нее ставьте П-образный ФНЧ, типа C-L-C. После ФНЧ ставьте пару конденсаторов в ||, электролит на 33-100 мкФ и керамический на 10 нФ. Напряжение с фильтра подаете на токоограничивающие резисторы, которые подключены к АНОДАМ СИД. Катоды СИД подключаете к выходам каналов ШИМ, платы контроллера. Выходы должны быть настроены на схему с открытым стоком!!! Более 5 мА, ток через СИД делать не желательно. Если вам нужен ток, через СИД более 5 мА, тогда вам нужен дополнительный мощный драйвер, включенный между выходом канала ШИМ и мощным СИД или любой другой нагрузкой!!! В этом случае, открытый сток вам не нужен, используйте выход по схеме "totem pole", или как это по русски? Естественно, что питание N-мощных драйверов будет производится от отдельного(!) источника, помехи от которого, не должны влиять на работу MicroPython платы. Мощности источника питания +5V_USB скорее всего не хватит! Для USB 2.0 это 5х0.5=2.5Вт. Шины GND, обеих источников, нужно уметь правильно соединять, но это уже выходит за рамки этого пояснения!
Мне не удалось понять, почему, когда канал настроен так:
controller.configure_led_out(inverted=False, open_drain=True)
присвоение каналу значения 100 % ведет к полному погасанию СИД и наоборот.
Поэтому я настроил каналы так:
controller.configure_led_out(inverted=True, open_drain=True)
Значение от 0 до 100, присвоенное выходу канала, означает время в %, которое выходной ключ открыт в периоде ШИМ. Допустим, вы присвоили 50, тогда половину периода ШИМ ключ будет открыт, а другую половину закрыт!
Допустим вы присвоили каналу 49, но после чтения вы получили значение 48. Это происходит из-зи ошибки округления, которую я не считаю важной. Если у вас есть идеи по улучшению кода, предлагайте!
Плата имеет на борту 8 СИД с общим АНОДОМ(!). Анод подключается к + внешнего источника питания. Минус внешнего источника питания подключается к GND платы c PCA9685. Катоды СИД платы подключаются к входам PWM (желтые штыри) платы c PCA9685!