2011 Capítulo 07. Generador senoidal - WordPress.com · Cap 7 Filtro completo de segundo orden...

21
TMS320C6713 Cap 7 MI. Mario Alfredo Ibarra Carrillo Año 2012 2011 Capítulo 07. Generador senoidal MI. Mario Alfredo Ibarra Carrillo Facultad de Ingeniería; Telecomunicaciones 16/03/2011 Ver_01_02_01 7-1

Transcript of 2011 Capítulo 07. Generador senoidal - WordPress.com · Cap 7 Filtro completo de segundo orden...

TMS320C6713Cap 7

MI. Mario Alfredo Ibarra Carrillo Año 2012

2011

Capítulo 07. Generador senoidal

MI. Mario Alfredo Ibarra Carrillo

Facultad de Ingeniería; Telecomunicaciones

16/03/2011

Ver_01_02_01

7-1

TMS320C6713Cap 7

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-2

TMS320C6713Cap 7

Introducción

En el presente capítulo se pretenden dos metas:

1. La primera meta es la introducción del lector en la implementación de proyectos sobre el DSPTMS320C6713 mediante el lenguaje “C”. La razón de introducir este lenguaje se debe a que la arquitectura del DSPTMS320C6713 está diseñada para apoyar la implementación de código en lenguaje de alto nivel, particularmente, en lenguaje “C”.

2. La segunda meta que se pretende parte del problema de implementar un filtro que funcione como generador senoidal. Este filtro tendrá una arquitectura genérica, que aunque mala para un sintetizador de senoides, es muy adecuada para fines didácticos.

Creación de un proyecto en lenguaje C

La creación de un proyecto en lenguaje “C” parte de la creación de un archivo de configuración que servirá de mini-sistema operativo para la DSK.

Crear la carpeta del proyecto

Vaya menú proyecto y elija la opción nuevo.

Entonces se abre la caja de diálogo “Project Creation”.

Ahora se va a crear la carpeta del proyecto. Haciendo click en el botón de búsqueda (Visualmente tiene tres puntos). Entonces se abre la caja de diálogo “Buscar Carpeta”.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-3

TMS320C6713Cap 7

Esta es la caja de diálogo “Buscar Carpeta”.

Elija una ubicación para la carpeta de su proyecto, por ejemplo “Mis documentos”. Entonces presione el botón “Crear nueva carpeta” (abajo a la izquierda de la caja de diálogo). De un nombre a su carpeta de proyecto, por ejemplo “GenSenoide”.

Hecho esto, presione el botón aceptar y se volverá a la caja de diálogo “Poject creation”.

Anote el nombre general del proyecto en la caja de texto rotulada “Project Name”. Por ejemplo, puede dar el siguiente nombre “GeneradorSenoidal”.

Hecho esto, presione el botón “Finish”.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-4

TMS320C6713Cap 7

Ahora bien, el árbol del proyecto se verá como en la figura de la derecha.

Creación del archivo de configuración del sistema DSK

Vaya a menú “File” y elija la opción “New” y luego “DSP BIOS Configuration ...”

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-5

TMS320C6713Cap 7

Entonces aparece la caja de diálogo “NEW DSP BIOS Configuration”. En esta caja de diálogo se elegirá la plataforma de trabajo que es el sistema “ti.platforms.dsk6713”. Y presione el botón OK

Entonces el CCStudio generará una caja de diálogo llamada “Configuration1” que permitirá realizar modificaciones sobre el archivo de configuración.

El CCStudio genera un archivo de configuración incompleto para permitir al programador modificar algunos parámetros como la ubicación y cantidad de memoria del motón, el tamaño de la pila, etc.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-6

TMS320C6713Cap 7

Cambios en el archivo de configuración

El archivo de configuración es semejante a un sistema operativo, contiene tablas que segmentan la memoria del sistema para diversos propósitos, Contiene código para atender los accesos a memoria tanto del código del programador como de los periféricos de la DSK

Desglose la rama “System” haciendo click en el signo “+”.

Haga click derecho en la rama “Global Settings” y del menú emergente elija “Properties”, Entonces se despliega la caja de diálogo “Propiedades de Global Settings”. En el “Target Board Name” debe aparecer “c6713” o “dsk6713”, en caso contrario reescriba el nombre la tarjeta a “c6713”.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-7

TMS320C6713Cap 7

Desglose la rama “MEM – Memory Section Manager” haciendo click en el signo “+”.

Haga click derecho en la rama “IRAM” y del menú emergente elija “Properties”, así se despliega la caja de diálogo “Propiedades de IRAM”. Entonces:

Marque la check box “create a heap in this memory”.

También marque la check box “enter an user define head identifier label” y provea de un nombre al bloque de la memoria del montón (head memory), por ejemplo “segment_heap_IRAM”.

Presione el botón “Aceptar”.

Haga click derecho en la rama “SDRAM” y del menú emergente elija “Properties”, así se despliega la caja de diálogo “Propiedades de SDRAM”. Entonces:

Marque la check box “create a heap in this memory”.

También marque la check box “enter an user define head identifier label” y provea de un nombre al bloque de la mermoria del montón (heap memory), pro ejemplo “segment_heap_SDRAM”.

Presione el botón “Aceptar”.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-8

TMS320C6713Cap 7

Haga click derecho en la rama “MEM – Memory Section Manager” y del menú emergente elija “Properties” con lo que se despliega la caja de diálogo “Propiedades de MEM-Memory Section manager”, entonces:

• Cambie el tamaño del buffer de argumentos a 0x0016.

• Cambie la memoria asignada al “Segment For DSP/BIOS Objects” a “IRAM” mediante el spinner.

• Cambie la memroia asignada al “Segment for malloc() / free()” a “SDRAM” mediante el spinner.

Hecho esto, presione el botón “Aceptar”.

Salve el archivo de configuración mediante el menú “File”, opción “Save”. Se abre entonces la caja de diálogo para elegir la carpeta en la cual debe guardar el archivo “configuration1.tcf”. Elija la carpeta del proyecto y presione el botón “Guardar”

Es posible elegir un nombre mucho más conveniente que el de “configuration1.tcf”. El nombre queda a la imaginación del lector, pero si debe respetar la extensión “.tcf”.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-9

TMS320C6713Cap 7

Agregar los archivos de configuración al árbol del proyecto

Son dos los archivos de configuración los que deben agregarse al árbol del proyecto:

• El archvio .tcf ó .cdb

• El archivo .cmd

Para agregar el archivo “.tcf” ó ”.cdb”, en el árbol de proyectos, haga click derecho sobre el nombre del proyecto y del menú emergente elija la opción “Add Files to Project”.

Entonces aparece la caja de diálogo “Add files to project”. Elija el tipo de archivo “.tcf

Haga click sobre el nombre del archivo y presione el botón “Abrir”.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-10

TMS320C6713Cap 7

Para agregar el archivo “.cmd”, en el aŕbol de proyectos, haga click derecho sobre el nombre del proyecto y del menú emergente elija la opción “Add Files to Project”.

Entonces aparece la caja de diálogo “Add files to project”. Elija el tipo de archivo “.cmd

Haga click sobre el nombre del archivo y presione el botón “Abrir”.

El árbol del proyecto queda finalmente como se ve en la figura.

Salve su projecto a disco mediante menú “project->save as”.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-11

TMS320C6713Cap 7

Filtro completo de segundo orden

Función de transferencia de segundo orden

La ecuación general de un filtro de segundo orden puede verse en la ecuación 1.

Z {h(n τ)}=b0+b1 z

−1+b2 z−2

1+a1z−1+a

2z−2

(7.1)

Una forma gráfica y conveniente de este filtro puede visualizarse en la figura 7.1. La representación en la figura 7.1 es lo que se conoce como forma no canónica del filtro ya que el número de elementos de retardo es el doble del orden del fitro.

Illustration 7.1: Representación no canónica de un filtro de segundo orden

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-12

TMS320C6713Cap 7

Evaluación numérica del filtro

Nótese del lado izquierdo del filtro que la señal de entrada se retarda en cada instante de muestreo, es decir, observe las muestras x(n) , x(n−1) , x(n−2) . A su vez, del lado derecho del filtro, se requieren retardos sucesivos de la señal de salida: y(n ) , y(n−1) , y(n−2) . La forma en que se procesa el filtro de la figura 7.1 es mediante productos punto.

Suponga entonces el vector de muestras de entrada y el vector de muestras de salida.

X⃗=⟨x (n) , x (n−1), x(n−2)⟩

Y⃗=⟨ y (n) , y (n−1), y(n−2)⟩

(7.2)

Suponga ahora el vector de coeficientes b0 , b1 ,b2 y el vector de coeficientes a1 , a2 expresados como:

B⃗=⟨b0,b1,b2⟩

A⃗=⟨0, a1,a2 ⟩

(7.3)

Ahora bien, la evaluación del filtro se realiza en dos partes, la primera parte es la diferencia de los productos punto de los vectores ya mencionados, es decir:

y(n)=B⃗⋅X⃗− A⃗⋅Y⃗ (7.4)

Poniéndolo en forma extensa, se realiza la siguiente operación:

y(n)=b0x(n)+b

1x (n−1)+b

2x(n−2)−a

1y(n−1)−a2 y(n−2) (7.5)

La segunda parte se realiza mediante el retardo de las muestras de entrada:

x(n−1)→x(n−2)x(n)→x(n−1)

(7.6)

También las muestras de la señal de salida deben sufrir un retardo:

y(n−1)→ y (n−2)y(n)→ y (n−1)

(7.7)

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-13

TMS320C6713Cap 7

Filtro para generar una señal senoidal

Teorema 1 sobre generación de senoides. La función de transferencia de un filtro generador de senoides es igual a la transformada Z de una senoide, es decir:

H (z)=Z {sin (ω0τ)}=

sin (ω0 τ) z−1

1−2cos(ω0τ)z−1+z−2

(7.8)

Donde

• ω0 es la frecuencia de la senoide

• τ es el periodo de muestreo

Suponga ahora que se desea generar una senoide con los siguientes datos

• Frecuencia de 1KHz .

• Frecuencia de muestreo de 16kHz .

Evaluando estos datos en la ecuación (8), la función de transferencia es:

H (z)= 0.3827 z−1

1−1.8478 z−1+ z−2(7.9)

Ahora solo falta alimentar al filtro con un pulso unitario y a la salida se tendrá la senoide.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-14

TMS320C6713Cap 7

Código en lenguaje “C”

• En el CCStudio, vaya a menú “File->new” y elija la opción “Source File” para comenzar a editar el código fuente del generador senoidal. CCStudio abre entonces un editor para tal propósito:

• La figura 2 ilustra el código que debe teclearse.

• Una vez tecleado el código sálvelo dentro de la carpeta del proyecto bajo un nombre conveniente y con la extensión “.c”

• Agregue el código al árbol del proyecto. Salve entonces su proyecto.

• Finalmente, para compilar el proyecto vaya a menú “Project” y elija la opción “Rebuild all”.

MI. Mario Alfredo Ibarra Carrillo Año 2012

//Contrato// Entrada: Pulso unitario// Salida: Senoide de 1kHz

float B0=0, B1= 0.3827, B2=0;float A0=1, A1=-1.8487, A2=1;float X0=0,X1=0,X2=0;float Y0=0,Y1=0,Y2=0;

float entrada[16]={1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};float salida [16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

main(){int N=16,i;

for (i=0;i<N;i++){//MuestraX0=entrada[i];

//FiltrandoY0=(B0 * X0) + (B1 * X1) + (B2 * X2) - (A1 * Y1) - (A2 * Y2);

//Salidasalida[i]=Y0;

//RetardosX2=X1;X1=X0;

Y2=Y1;Y1=Y0;}

}Illustration 7.2: Código para generación de una senoide.

7-15

TMS320C6713Cap 7

Carga y ejecución del código

Los pasos que se describen a continuación permiten la carga del código objeto en el sistema DSK. También es posible ordenar al CCStudio la ejecución del código así como detener tal ejecución. La capacidad de ordenar al DSK arrancar o detener la ejecución de un programa es posible gracias al mini-sistema operativo que se diseñó en las secciones anteriores.

Establecer el enlace entre CCStudio y la DSK

Antes de ordenar la carga de un programa, su ejecución y parada hay que establecer un enlace de comunicación entre el CCStudio y la DSK. Vaya a menú “Debug” y elija la opción “Connect”.

En seguido, un icono en la parte inferior izquierda indicará cuando el sistema esté conectado. La figura indica el estado de no conexsión.

Carga del proyecto a la tarjeta del DSK

Vaya a menú “File” y elija la opción “Load program”. En seguida el CCStudio abre una ventana de progreso que apenas puede visualizarse debido a la rapidez con la que se carga el código.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-16

TMS320C6713Cap 7

En seguida se abre la ventana de diálogo “Load program” en la que se examina la carpeta del proyecto. Elija la carpeta “Debug” y dentro de ésta, haga click en el archivo “GeneradorSenoidal.out”: el nombre puede variar según lo haya elegido el programador pero la extensión sigue siendo “.out”

Ejecución del proyecto

En la panel izquierdo del CCStudio hay una barra de iconos con diversas opciones de ejecución.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-17

TMS320C6713Cap 7

Entonces, para ejecutar su código en la DSK haga:

• Elija el icono con el hombre corriendo o icono “Run”.

• Espere unos segundos y detenga el programa haciendo click en el icono con el hombre “Halt”.

Visualización del resultado

Vaya a menú “View” y elija la opción “Graph” y la subopción “Time/Frecuency...”.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-18

TMS320C6713Cap 7

Entonces se despliega la ventana de diálogo “Graph Property Dialog”. En esta ventana la cambiaremos tal como indica la figura de la derecha: las opciones a modificar se resaltan con un rectángulo rojo.

Los cambios son:

• Start address: La dirección en donde se encuentra el vector de salida

• Acquisition Buffer Size: cuantos muestras se van a almacenar en el programa “Graph”. En este caso elegimos 16 muestras.

• Display Data Size: cuantas muestras de las que se almacenan en el buffer se van a utilizar para generar la gráfica, en este caso 16 muestras.

• DSP Data Type: el tipo de dato de las muestras. Elija 32-bit floating point.

Presione el botón “OK” y en seguida se despliega la gráfica. Si todo estuvo bien, debe verse una gráfica senoidal construida con segmentos rectos.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-19

TMS320C6713Cap 7

Proyecto

Proyecto 1

1. Investigue como modificar la subrutina de la figura 7.2 para genera un tono sin necesidad de alimentar un pulso unitario.

Proyecto 2

1. Investigue las combinaciones de tonos asociados a cada botón de un teléfono.

2. Diseñe una subrutina que:

a) Se llame DTMF

b) Admita dos argumentos: (1) número telefónico y (2), duración del número.

c) La subrutina genere los tonos correspondientes a un número por una duración especificada en el respectivo argumento de la subrutina.

3. Cree la función “main ()” en la que se invocará la subrutina “DTMF()” para así sintetizar los tonos telefónicos del número asociado al abonado en casa del estudiante.

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-20

TMS320C6713Cap 7

MI. Mario Alfredo Ibarra Carrillo Año 2012

7-21