Probamos PWM en el Beaglebone Black

Siempre hay cosas que explorar en el Beaglebone Black. En esta oportunidad comprobamos el uso de PWM.CONN_REVA5A

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)

Usamos un led y distintas combinaciones de los valores period y duty
Usamos un led y distintas combinaciones de los valores period y duty

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í

 

 

Author: Manuel Carrasco

Ingeniero Eléctrico, Institutano, instructor certificado Cisco, en twitter @mcarrasco con comentarios y opiniones personales.

One thought

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *