Herramientas de usuario

Herramientas del sitio


funcionesadicionalesgpio

Funciones adicionales para pines de propósito general (GPIO)


1. Modulación por ancho de pulso PWM (bloques gráficos).

La modulación por ancho de pulso (PWM) permite modificar el valor de voltaje que podemos aplicar a un componente, por ejemplo un led, motor, etc. La variación de este voltaje se logra a través de la modificación del ancho de pulso de una señal cuadrada (Señal digital) mediante el tiempo en el cual la señal dura en '1' (TH) como aparece en la siguiente figura:

Para cambiar el ancho de la señal se modifica su ciclo útil K, que es la relación entre el tiempo en '1' TH y el periodo de la señal T. Para trabajar el PWM usaremos el pin (GPIO17) como se muestra en el siguiente esquema:

Para la programación en bloques usaremos los siguientes bloques disponibles en la interfaz del laboratorio remoto:

BloqueDescripción
Permite configurar el pin seleccionado en modo PWM, por ejemplo, el GPIO17 con una frecuencia de 500 Hz.
Permite iniciar el pin configurado previamente en modo PWM, con un ciclo útil. En el caso del ejemplo se inicia el GPIO17 con un ciclo útil del 50%, es decir, 50% de la señal en '1', 5'% de la señal en '0'.
Permite cambiar el ciclo útil directamente en código deacuerdo, por ejemplo, al valor de una variable declarada.

Con estos bloques la idea es crear nuestro primer algortimo para trabajar con GPIOs. Para ello construiremos el siguiente algoritmo gráfico. Los pasos de creación y de explicación del PWM se pueden visualizar en siguiente video.


2. Modulación ancho de pulso (PWM) mediante código en lenguaje Python

Para trabajar con código directamente en Python para interactuar con PWM usaremos las siguientes instrucciones en lenguaje de programación Python

Instrucción (Sentencia)Descripción
import RPi.GPIO as GPIO
Permite importar el paquete RPi.GPIO en Python que accede a la configuración y activación de los GPIOs
import time
Incorpora la librería o paquete time para retrasos en el código en segundos.
GPIO.setmode(GPIO.BCM)
Configura los pines de la raspberry pi en modo BCM. En este modo el pin se va a llamar “GPIO17”, “GPIO22”, etc. Esta instrucción debe llamarse antes de configurar el GPIO deseado como entrada o salida.
GPIO.setup(17,GPIO.OUT)
Permite configurar el GPIO en este caso el 17 como “salida”.
pwm17=GPIO.PWM(17,500)
Configura el GPIO17 en modo PWM con una frecuencia de 500Hz.
pwm17.start(50)
Inicia el modo pwm en el GPIO17 con un ciclo útil del 50%. En este caso el nombre “pwm17” debe estar en declarado en la configuración y en la inicialización del pin en el modo pwm deacuerdo a la sentencia anterior.
time.sleep(0.3)
Crea un retraso en tiempo, en este caso de 0.3 segundos.

Para trabajar en lenguaje Python, usaremos el siguiente código base que permite aplicar la modulación por ancho de pulso (PWM) al pin GPIO17. La idea será como se menciono controlar el voltaje aplicado al Led y por ende su brillo. El ancho de pulso cambiará cada 0.3 segundos.

#Inserta tu codigo de Raspberry Pi aqui (Nota: comentarios sin tildes!)
import RPi.GPIO as GPIO
 
GPIO.setmode(GPIO.BCM) #Modo de configuracion BCM
 
import time #Libreria para retrasos de tiempo
 
GPIO.setup(17,GPIO.OUT) #pin 17 como salida
pwm17=GPIO.PWM(17,500) #pin 17 en modo pwm con frecuencia de 500Hz
pwm17.start(50) #Iniciar pwm en pin 17 con ciclo util del 50 porciento
i = 0 #Variable de conteo para ciclo util
while True:
  if i <100: #si i es menor a 100 incrementar en pasos de 20
    i = i + 20
  else:
    i = 0
  pwm17.ChangeDutyCycle(i) #Cambiar ciclo util para pin 17 de acuerdo a variable i
  time.sleep(0.3) #Esperar 0.3 segundos

El código funciona del siguiente modo:

  • Importamos la librería RPi.GPIO para trabajar con los pines GPIO.
  • Importamos la librería time para crear retrasos.
  • Configuramos la raspberry pi en modo BCM para llamar a los pines por nombre “GPIO22, GPIO17”, etc.
  • Configuramos el GPIO17 como salida.
  • Configuramos el pin GPIO en modo PWM con una fracuencia de 500Hz.
  • Iniciamos la señal PWM en el pin GPIO17 con un ciclo útil de 50%. (50% en '1', 50% en '0')
  • Colocamos un bucle while True que repetirá todo lo que se ponga dentro de él de manera continua.
  • Incrementamos la variable i que cambiará el ciclo útil siempore y cuando sea menor a 100. Esto es porque en Python colocamos un ancho de pulso que va entre 0 y 100%.
  • Cambiamos el ciclo útil con la instrucción pwm17.ChangeDutyCycle(i). Esta instrucción recibe la variable que se está incrementando.
  • Esperamos 0.3 segundos para volver a incrementar la variable y seguir de nuevo con el ciclo.

El video de explicación de este código se muestra a continuación:

funcionesadicionalesgpio.txt · Última modificación: 2021/12/09 15:50 por admin