Pages Menu
TwitterFacebook



BANNER1_ALT

Posted by on Feb 10, 2015 in Beaglebone | 0 comments

BeagleBone Black: PWM

BeagleBone Black: PWM

El día de hoy veremos un tutorial para mostrar el uso del PWM en nuestra  tarjeta BeagleBone Black, pero antes iniciaremos con una pregunta válida, la cuál es:

¿Qué es PWM?

La modulación por ancho o de pulso (o en inglés pulse width modulation PWM) es un tipo de señal de voltaje utilizada para enviar información o para modificar la cantidad de energía que se envía a una carga. Este tipo de señales es muy utilizada en circuitos digitales que necesitan emular una señal analógica.

Este tipo de señales son de tipo cuadrada o sinusiodales en las cuales se les cambia el ancho relativo respecto al período de la misma, el resultado de este cambio es llamado ciclo de trabajo y sus unidades están representadas en términos de porcentaje. Matemáticamente se tiene que:

D = ciclo de trabajo

t = tiempo en que la señal es positiva

T = Período

Para emular una señal analógica se cambia el ciclo de trabajo (duty cicle en inglés) de tal manera que el valor promedio de la señal sea el voltaje aproximado que se desea obtener, pudiendo entonces enviar voltajes entre 0[V] y el máximo que soporte el dispositivo PWM utilizado, en el caso de BeagleBone Black es 5[V].

 

pwm

Las aplicaciones típicas para este tipo de señales son: Controlar intensidad de un LED, mover servomotores, controlar LED RGB, controlar velocidad de motores de corriente continua y controlar motores eléctricos de inducción o asincrónicos.

Una vez visto esto, procederemos a continuar con el tutorial:

Crear una aplicación en C++ en linux para encender un led de la tarjeta Beaglebone(p8_19) con PWM en forma incremental.

Dentro del pwm, podemos hacer uso de funciones públicas, como lo son:

bool setRunState(estado);

Configura un valor de run para la señal de PWM, el parámetro de entrada puede ser «run» o «stop».

Ejemplo:

BlackPWM led1(P8_19);
led1.setRunState(run);

String getValue( )

Lee el porcentaje del valor del ciclo de trabajo.

Ejemplo:

BlackPWM led1(P8_19);
led1.setRunState(run);
cout << " PWM DC: " << led1.getValue( ) << "%";
int getNumericDutyValue( );

Lee un valor entero del valor del ciclo de trabajo.

bool setDutyPercent( float porcentaje );

Establece un valor del ciclo de trabajo del PWM. (0 a 100 %).

Ejemplo:

BlackPWM led1(P8_19);
led1.setRunState(run);
led1.setDutyPercent(100.0);

Procederemos a crear un archivo con la instrucción nano ne nuestro editor de texto en el Putty, utilizando la siguiente sitáxis:

nano PWM_ejemplo1.cpp

nano

nano2

Una vez Abierto el editor, nos sale la una pantalla como la siguiente:

Allí es donde escribiremos el código de nuestro programa, para posteriormente compilarlo y así mismo, ejecutarlo.

nano3

CÓDIGO

</pre>
<pre>#include<iostream>
#include"BlackPWM.h"
using namespace BlackLib;
using namespace std;

int main (void) {
	int valor_dc = 0;
	BlackPWM led1 (P8_19);
	led1.setRunState(run);
	for (;;)
		{
		cout << "Valor run: " << boolalpha << led1.isRunning()) << endl;
		cout << "Valor del PWM: " << led1.getValue() << endl;
		led1.setDutyPercent (valor_dc);
		valor_dc = valor_dc+10;
		if (valor_dc > 100) valor_dc = 0;
		sleep(1);
		}
	sleep(1);
}

Compilamos mediante la instrucción:

G++ -Wall –o ejecutable PWM_ejemplo1.cpp BlackCore.o BlackPWM.o -std=c++0x

compilando

Una vez nos haya realizado el salto de línea sin mensajes de error, procedemos a conectar el led en nuestra tarjeta para visualizar el trabajo. Ya conectado, lo ejecutamos mediante el comando:

./ejecutable

startEn donde se aprecia el incremento de 10 en 10, al llegar al 100, éste se resetea a 0 y va creciendo de nuevo de 10 en 10. Para pausarlo, recuerden que está el comando rápido de Ctrl+C.

PWM_1

Pata mayor apreciación, conectamos nuestra tarjeta al osciloscopio y las gráficas obtenidas fueron las siguientes:

PWM_2

En las gráficas anteriores podemos apreciar el incremento de la Señal.

FUENTE: –> CLICK HERE. <–

LOGO HETPRO

Post a Reply

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