Modul s PCA9685

PWM expandér PCA9685


Asi před dvěma měsíci se mi dostal do ruky 12-bit, 16 kanálový PWM expandér PCA9685 určený hlavně pro ovládání LED.  Po kratším prozkoumání mohu konstatovat, že se jedná o relativně obecné zařízení. Navíc lze toto zakoupit jako hotový modul (ebay.com, či DX.com) za velmi slušnou cenu.

Při troše počítání jsme schopni generovat standardní pulsy (začínající zároveň se začátkem cyklu),  phase-correct  čí  phase-and-frequency-correct PWM signál, nevadí-li nám epsilonová chyba.

PCA9685 má 16 kanálů. Všechny kanály mají stejnou frekvenci, která je volitelná od 24Hz do 1536Hz (s výchozím oscilátorem). Každý kanál má dva 12-bit čítače. Jeden určuje začátek pulsu a druhý konec pulsu (v rámci cyklu). Každý cykl je tedy rozdělen na \(2^{12}=4096\) částí.

Každý kanál navíc může dodat 10 mA jako source, případně 25 mA jako „sink“ (což je 160 mA respektive 400 mA celkově). Krom toho je možno nastavit všechny kanály jako open-drain.

Každý modul má v sobě integrován vlastní, 25 MHz oscilátor. Je však možné připojit externí oscilátor s frekvencí nejvýše 50 MHz. V případě nutnosti tedy můžeme měnit frekvenci PWM téměr libovolně (viz. výpočet děličky v datasheetu).

Řízení

Celé zařízení je ovládáno skrze I2C sběrnici. Adresu zařízení je možné zvolit jumpery, viz obr. 1, v pravo nahoře. Nutno dodat, že lze najít alespoň jeden datasheet, v kterém doporučují použít jako supply právě +5 V vůči GND. Zdůvodněním je „lepší stabilita vnitřního filtru“.

Pro komunikaci se zařízením můžeme využít buďto inkrementální mód, umožňující v jedné transakci naplnit veškeré registry, které zařízení poskytuje. Či jednoduchý mód, který pro naplnění každého jednoho registru potřebuje vlastní transakci.

Jako „Transakci“ chápeme pořadí akcí [připojit se na zařízení, poslat bajt, odpojit se].

Napájení

Samotný čip není schopen dodat dostatek proudu např. pro přímé řízení serv. Avšak, „číňan“ je clověk přemýšlivý, uvažujíc do budoucna. Tudíž je červená lištička (obr 1.) připojena přímo k zelenému konektoru na straně V+, stejně tak černá lištička ke GND. PWM lištičku tedy můžeme bez větších obtíží opravdu použít jenom jako zdroj signálu.

Po krátkém prozkoumání si můžeme všimnout, že na zadní straně (obr. 3) je vytištěna poznámka ohledně „Ochrana proti přepólování“. Bohužel, ať koukám jak koukám, nemohu nic takového na desce najít, také datasheet mlčí. Pokud však někdo přeci jenom vyzkoušel polaritu přehodit a zařízení bez problému přežilo, neváhejte se o to podělit na fóru.

Závěr

PCA9685 je univerzální PWM driver s dostatečným rozlišením postačující pro běžné použití jako řízení otáček krokových motorů či serv. Díky nemalému proudu, který je driver schopen dodat pro každý kanál se tento hodí i na řízení, k jejichž provoz je potřeba se signálem vést i nezanedbatelný proud (např. používame-li PWM jako řídící napětí pro bázi BJT transistorů).

Například krátkým vyzkoušením dospějeme k závěru, že pro běžné modelářské servo lze bez námahy dosáhnout přesnosti \(\pm 5^{\circ}\) což je pro většinu aplikací dostačující.

Recenzovaný PWM driver má mnohem více funkčnosti a rozšíření, než je zmíněno v této krátké recenzi. Pro podrobnější prozkoumání neváhejte stáhnout datasheet :).

Testovaný expandér byl objeven a zapůjčen Davidem Obdržálkem z Matematicko-fyzikální fakulty Univerzity Karlovy.