Siempre hay cosas que explorar en el Beaglebone Black. En esta oportunidad comprobamos el uso de PWM.
La función de PWM tiene aplicaciones en el control de servos y en la conversión DA
Materiales
- Beaglebone Black con Debian
- Fuente de poder 5V @ 1A
- cable de red
- acceso a internet
- PC para conectar via SSH
Tras el salto, los comandos que usamos para esta prueba
Procedimiento
Primero dejamos como registro el archivo slots, que vamos a modificar
cat /sys/devices/bone_capemgr.9/slots 0: 54:PF--- 1: 55:PF--- 2: 56:PF--- 3: 57:PF--- 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G 5: ff:P-O-L Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI 7: ff:P-O-L Override Board Name,00A0,Override Manuf,am33xx_pwm 8: ff:P-O-L Override Board Name,00A0,Override Manuf,bone_pwm_P8_13
Luego usamos
sudo su -
y ahora modificamos el archivo slots
echo am33xx_pwm > /sys/devices/bone_capemgr.9/slots
El siguiente comando asigna el pin P8.13, la primera vez que probe el comando falló, tras un reboot funciona todo el procedimiento sin problemas (esto se debe a pruebas anteriores)
echo bone_pwm_P8_13 > /sys/devices/bone_capemgr.9/slots
En este punto se crea un link en la carpeta /sys/devices/ocp.3/pwm_test_P8_13.15/ , de hecho si revisamos el directorio
ls /sys/devices/ocp.3/pwm_test_P8_13.15/ -ltr total 0 -rw-r--r-- 1 root root 4096 Jan 3 11:37 uevent lrwxrwxrwx 1 root root 0 Jan 3 11:37 subsystem -> ../../../bus/platform -rw------- 1 root root 4096 Jan 3 11:46 polarity -r--r--r-- 1 root root 4096 Jan 3 11:46 modalias lrwxrwxrwx 1 root root 0 Jan 3 11:46 driver -> ../../../bus/platform/drivers/pwm_test -rw------- 1 root root 4096 Jan 3 11:46 run drwxr-xr-x 2 root root 0 Jan 3 11:46 power -rw------- 1 root root 4096 Jan 4 23:05 period -rw------- 1 root root 4096 Jan 4 23:16 duty debian@arm:/sys/devices$
La dirección del directorio puede que cambie, en mi caso es distinto al artículo que usamos como fuente, ver bibliografía
Ahora vienen los comandos para controlar el período y el ciclo de carga
echo 20000000 > /sys/devices/ocp.3/pwm_test_P8_13.15/period echo 10000000 > /sys/devices/ocp.3/pwm_test_P8_13.15/duty
Los valores estan en nanosegundos por lo que 20000000 corresponde a 0,02 s. El valor de duty, contrario a la definición mas común, se refiere al período que la señal estará en valor 0.
En el ejemplo anterior dejamos el período en 0,02s ( frecuencia de 50Hz) y el ciclo de carga en 0,01s , el 50%
La forma mas fácil de comprobar el funcionamiento es conectando un LED entre P8.13 y GND (P8.1, por ejemplo)
Se pueden hacer mas pruebas cambiando los valores de en la carpeta /sys/devices/ocp.3/pwm_test_P8_13.15/ por ejemplo;
echo 0 > /sys/devices/ocp.3/pwm_test_P8_13.15/run cat /sys/devices/ocp.3/pwm_test_P8_13.15/run 0
Para encender o apagar la funcion de PWM. o este comando
root@arm:~# echo 0 > /sys/devices/ocp.3/pwm_test_P8_13.15/polarity
Para cambiar la polaridad de la señal PWM, invierte los periodos de alto y bajo.
Bibliografía
El articulo fuente para esta prueba esta aquí
Que pasa con los demas pines? Me funciona lo que dices pero una vez que uso otros pines de PWM, lo ignora.