Cómo trabajar con las salidas PWM en el PLC industrial Raspberry v3

Familia de PLCs industriales Raspberry Pi
24 de febrero de 2021 por
Cómo trabajar con las salidas PWM en el PLC industrial Raspberry v3
Boot & Work Corp. S.L., Quesada Dani Salvans

Introducción

Los dispositivos de la familia de PLC basados en Raspberry Pi tienen un n√ļmero definido de salidas digitales. Todas ellas pueden ser programadas como salidas PWM, si es necesario. Como sabemos, el PWM (Pulse Width Modulation) es un tipo de se√Īal de tensi√≥n que se utiliza para enviar informaci√≥n o para modificar la cantidad de potencia enviada por cada carga. As√≠ que, en este blog, vas a ver c√≥mo configurar las salidas PWM.¬†


Requisitos

Los puntos clave que debes tener en cuenta son los siguientes: 

  • Familia de PLCs Raspberry Pi industriales

  • Acceso al PLC: shh.¬† Un tutorial sobre c√≥mo acceder al dispositivo a trav√©s de Linux o Windows se puede encontrar en la Gu√≠a del usuario del controlador PLC Raspberry Pi¬†


Enlaces relacionados 

Conceptos b√°sicos sobre salidas digitales del PLC industrial Raspberry
Leer >>

Conceptos básicos sobre salidas analógicas del PLC industrial Raspberry
Leer >>

Cómo encontrar tu PLC industrial ideal
Leer >>

Cómo programar en Python las entradas de interrupción del PLC industrial Raspberry

Leer >>

Familia de productos RAspberry PLC
Leer >>


RPI PLC Version 3: Explanation and Usage of Bash Script

En primer lugar, el Script Bash que tenemos que ejecutar para gestionar las salidas PWM es el llamado "set-analog-output" situado en la ruta "/home/pi/test/analog/". Hay que asegurarse de que la salida que queremos configurar como PWM no está configurada como analógica o digital por lo que, para asegurarnos, podemos ejecutar la función "stop" (para que deje de ser salida analógica o digital: 

./set-analog-output A0.5 stop

O bien  :

./set-digital-output Q0.5 stop


Para ejecutar el script, hay que llamar al script "set-analog-output" pero introduciendo como parámetros una salida digital y el ancho del pulso. La anchura del pulso es el periodo de tiempo alto del ciclo de trabajo y tiene un rango de 0 a 4095 (12 bits). Por ejemplo, si se quieres un periodo de tiempo alto del 25%, hay que poner 1024 y, si se quiere un periodo de tiempo alto del 100%, hay que poner 4095. 

./set-analog-output Q0.5 4095


Nota: Consulte la Guía del usuario para saber qué salidas son compatibles con PWM. 

Los parámetros PWM del script no tienen que ser modificados para asegurar un correcto comportamiento PWM. Aquí podemos ver el script: 

#!/bin/bash
# PWM period in nanoseconds PERIOD="2000000" case ${1} in A0.5) ADDR=40; INDEX=10 ;; A0.6) ADDR=40; INDEX=1 ;; A0.7) ADDR=40; INDEX=0 ;; A1.5) ADDR=40; INDEX=3 ;; A1.6) ADDR=40; INDEX=5 ;; A1.7) ADDR=40; INDEX=8 ;; A2.5) ADDR=41; INDEX=2 ;; A2.6) ADDR=41; INDEX=1 ;; A2.7) ADDR=41; INDEX=0 ;; Q0.0) ADDR=40; INDEX=15 ;; Q0.1) ADDR=40; INDEX=14 ;; Q0.2) ADDR=40; INDEX=13 ;; Q0.3) ADDR=40; INDEX=12 ;; Q0.4) ADDR=40; INDEX=11 ;; Q0.5) ADDR=40; INDEX=10 ;; Q0.6) ADDR=40; INDEX=1 ;; Q0.7) ADDR=40; INDEX=0 ;; Q1.0) ADDR=40; INDEX=2 ;; Q1.1) ADDR=40; INDEX=9 ;; Q1.2) ADDR=40; INDEX=6 ;; Q1.3) ADDR=40; INDEX=4 ;; Q1.4) ADDR=40; INDEX=7 ;; Q1.5) ADDR=40; INDEX=3 ;; Q1.6) ADDR=40; INDEX=5 ;; Q1.7) ADDR=40; INDEX=8 ;; Q2.0) ADDR=41; INDEX=6 ;; Q2.1) ADDR=41; INDEX=7 ;; Q2.2) ADDR=41; INDEX=5 ;; Q2.3) ADDR=41; INDEX=4 ;; Q2.4) ADDR=41; INDEX=3 ;; Q2.5) ADDR=41; INDEX=2 ;; Q2.6) ADDR=41; INDEX=1 ;; Q2.7) ADDR=41; INDEX=0 ;; *) echo "Output not defined" >&2 exit 1 ;; esac VALUE="${2:-50}" if [ -z "${PWM}" ]; then CHIP_BASE_DIR="/sys/bus/i2c/devices/1-00${ADDR}/pwm" CHIP_NAME="$(ls ${CHIP_BASE_DIR})" CHIP_DIR="${CHIP_BASE_DIR}/${CHIP_NAME}" CHIP="${CHIP_NAME#pwmchip}" PWM="${INDEX}" fi if [ "${VALUE}" = "stop" ]; then echo "${PWM}" > ${CHIP_DIR}/unexport exit 0 fi if [ ! -d ${CHIP_DIR}/pwm${PWM} ]; then echo "${PWM}" > ${CHIP_DIR}/export fi echo "${PERIOD}" > ${CHIP_DIR}/pwm${PWM}/period DUTY_CYCLE="$((${2} * ${PERIOD} / 4095))" echo "${DUTY_CYCLE}" > ${CHIP_DIR}/pwm${PWM}/duty_cycle


RPI PLC Version 4: Explanation and Usage of C++

The C++ function sets a PWM output to the specified value using the set-analog-output function with a digital output. All the digital outputs of the PLC can be used for the PWM function.

The main function initializes the microcontrollers with the initPins() function. Then, like in Arduino programming, it sets the output to the output mode, and it writes to the pin the specified value in the parameter.

So, in the ~/rpiplc-lib/test directory, execute the following command to create an executable file called set-analog-output:

g++ -o set-analog-output set-analog-output.cpp -l rpiplc -I /usr/local/include/rpiplc -DRPIPLC_19R (or any other Raspberry PLC model)


Execute the compiled file named set-analog-output with two parameters:

1: the digital output to control

2: the PWM (analog) value to set (from 0 to 4095)

./set-analog-output Q0.0 4095


And see how the Q0.0 output has been given the specified resolution.

¬ŅTienes preguntas?

Contacta con nuestro equipo técnico-comercial y resuelve tus dudas sobre programación o cuestiones técnicas.

Te ayudaremos a encontrar la mejor solución para automatizar tus instalaciones.

Contacta con nosotros ahora >> 


Search in our Blog

Cómo trabajar con las salidas PWM en el PLC industrial Raspberry v3
Boot & Work Corp. S.L., Quesada Dani Salvans 24 de febrero de 2021
Archivar

¬ŅEst√°s buscando tu Controlador L√≥gico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>