pasión por la robótica en Argentina
[PRINCIPAL] [NOSOTROS] [ACTIVIDAD] [NOTICIAS] [ARTICULOS] [GALERIA] [ENLACES] [CONTACTO]
Desarrolladores de Robots:
Un grupo donde podemos conversar de los temas que nos interesan

Desarrolladores de Robots funciona en Grupos Yahoo! ar.groups.yahoo.com

Comunicación - Modulo sintetizador de voz SP03
Descripción y funcionamiento
por Eduardo J. Carletti

Introducción

Un módulo sintetizador de voz que se puede encontrar hoy en el mercado de robótica —en España se consigue; en Argentina por ahora no— es el SP03, una pequeña placa de 40 x 40 mm que se basa en el chip sintetizador WTS701EM/T de Winbond. Su calidad de sintetización es buena, aunque por desgracia está implementado con fonemas en versión inglesa. El fabricante promete versiones en otros idiomas.

Este chip puede convertir en voz hablada el texto ASCII que se le ingrese por el puerto SPI que tiene incorporado. Puede almacenar hasta 30 frases en una memoria flash, hasta un total de 2K (1.925 caracteres). La plaqueta se comunica a través de un bus I2C, una interfaz serie RS232 a 38.400 baudios o por un puerto paralelo de 5 líneas.

El procesador Winbond WTS701 tiene la ventaja de incluir en un integrado el chip sintetizador y un procesador de sonido capaz de reproducir texto con buena calidad. Pero el encapsulado de 56 patas, en formato TSOP para montaje superficial y con un espaciado entre patas de sólo 0,5 mm, es un problema para su implementación en plaquetas de experimentación.

Por esta razón, el uso de un módulo prearmado puede ser una buena solución, aunque cueste bastante más caro. El módulo de circuito SP03 está preparado para ser utilizado de inmediato en una aplicación, ya que incorpora un amplificador de audio de 325 mW y un altavoz. Sólo es necesario entregarle alimentación y establecer las necesarias conexiones para su control.

Se alimenta con 5V. Consume 35 mA en reposo y 100 mA activo.

El módulo sintetizador de voz SP03 incorpora un amplificador de audio, un regulador de tensión de 3V con conversión a 5V, un microcontrolador PIC encargado de facilitar la comunicación con el procesador central, un altavoz de 35 mm, y el chip sintetizador WTS701. Para facilitar la conexión con el exterior se provee de un bus I2C, un puerto serie RS232 y un bus paralelo. Hay disponible un programa para PC llamado SP03.EXE con el que se pueden enviar y reproducir las 30 frases en el módulo sintetizador. También se encuentran varios ejemplos de utilización del módulo sintetizador con diferentes microcontroladores.

Conexiones del módulo sintetizador de voz SP03

Como se observa en la imagen, hay dos hileras de contactos en la plaqueta. Cada una conecta con un tipo de puerto, y se puede emplear una u otra, dejando libre aquella que no se usa. La alimentación de 5V se puede aplicar en cualquiera de los dos lados.

Contactos del módulo SP03

Conector PL1 interfaz serie/I2C
+5V - Alimentación de 5V 100 mA
SDA - Conexión SDA del bus I2C
SCL - Conexión SCL del bus I2C
Libre - No conectar
Gnd - Masa o común (0V)
Libre - No conectar
Gnd - Masa o común (0V)
RS232 Rx - Se conecta al pin TX del PC.
RS232 Tx -Se conecta al pin RX del PC.
Conector PL2 interfaz paralelo
+5V - Alimentación de 5V 100mA.
Stat - Alto mientras habla.
Sel 4 -
Sel 3 - Estas cinco entradas binarias
Sel 2 - seleccionan cual de las
Sel 1 - 30 frases se reproduce
Sel 0 -
Gnd - Masa o común (0V)

Comunicaciones serie por RS232

Para controlar el módulo sintetizador por medio del puerto serie de la plaqueta, conectándose con un puerto RS232 de una PC (conector serie) u otro equipo, se utilizan únicamente tres conexiones (más, por supuesto, la alimentación de 5V).

  • 1. La entrada Rx del módulo deberá conectarse a la señal Tx, pin 3 del conector DB9, del PC.
  • 2. La señal Tx del módulo se conecta a la señal Rx, pin 2 del conector DB9, del PC.
  • 3. La línea de masa o común (0 voltios) del módulo debe ser conectada a la masa del PC (pin 5 del conector DB9).

La conexión serie se define en 38.400 baudios, 8 bits de dato, sin paridad, y 2 bits de parada.

Comandos a través de RS232

A través del puerto serie se pueden enviar 33 comandos distintos al módulo SP03. Los comandos son:

  • 128 (hex 80 ó 0x80): orden de sintetizar un frase, incluyendo el texto de la frase.
  • 129 (hex 81 ó 0x81): leer el registro de estado.
  • 130 (hex 82 ó 0x82): este comando inicia la carga de las 30 frases que se guardan en la memoria del PIC.
  • 01 a 30 (hex 01 ó 0x01 a hex 1E ó 0x1E): órdenes para que se emita la frase 1 a 30 desde la memoria.

Como se ve, treinta de las órdenes (de la 1 a la 30) se utilizan para reproducir las 30 frases almacenadas previamente, con sólo enviar un byte de comando.

Cuando el sintetizador termina de vocalizar la frase, devuelve el comando de regreso al PC por la comunicación serie, indicando que ha terminado. No se deben enviar ordenes al módulo mientras está sintetizando la frase. Si se envía un comando en esta situación, la orden será ignorada.

El retorno de la orden desde el módulo indica que éste ya está listo para recibir la siguiente instrucción.

Detalle del comando 128 (0x80)

Este comando se utiliza para enviar una línea de texto que debe ser convertida a voz. El byte 0x80 de la orden debe ser seguido por 3 bytes de control, luego el texto de la frase a reproducir, y como cierre el carácter 0x00 (NULO).

Los tres bytes de control indicarán volumen, tono (frecuencia) y velocidad.

Cada byte recibido por el módulo es devuelto por la línea serie como indicación de que ha sido reconocido. Es importante que no se envíe un nuevo byte hasta que el módulo haya devuelto el byte anterior.

El registro de texto del PIC tiene una capacidad de 85 bytes. Como el comando tiene, en total, 4 bytes de control y sincronización, para el texto a vocalizar queda disponible un total de 81 bytes. Éste es el límite de caracteres que puede tener la frase que se le envía al módulo para que sea emitida.

A continuación se ve un esquema con la secuencia para reproducir "Hola amigo" a pleno volumen y con una velocidad y tono medios.

Orden transmitida al módulo SP03     Byte devuelto por módulo SP03
Comando 0x80     0x01
Máximo Volumen 0x00     0x00
Tono de la síntesis 0x04     0x04
Velocidad de la voz 0x02     0x02
Texto 'H'     'H'
Texto 'o'     'o'
Texto 'l'     'l'
Texto 'a'     'a'
Texto ' '     ' '
Texto 'a'     'a'
Texto 'm'     'm'
Texto 'i'     'i'
Texto 'g'     'g'
Texto 'o'     'o'
NULO 0x00     0x00
El módulo reproduce el texto     0x00 indica que el texto ya está cargado.

Detalle del comando 129 (0x81)

Este comando se utiliza para leer el registro de estado del WTS701, formado por dos bytes.

 Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
Byte 0ICNTIBUFICNVCODBFULBEMPCNVTRDY
Byte 1R/BreservadoreservadoreservadoreservadoIABBreservadoICMD

Cuando el módulo recibe esta orden, devuelve el byte de menor peso seguido del byte de mayor peso. Uno de los usos es el monitoreo de estado que permite saber si el sintetizador ha terminado de hablar.

Detalle abreviado del byte 0 (ver la hoja de datos por más información):

RDY (Bit 0): Encendido indica que el chip está listo para recibir comandos.
CNVT (Bit 1): Convirtiendo.
BEMP (Bit 2): El registro de texto de entrada está vacío.
BFUL (Bit 3): El registro de texto de entrada está lleno. Se apaga en cuanto hay al menos 128 bytes libres.
COD (Bit 4): Habilitado el CODEC.
ICNV (Bit 5): Se terminó la conversión y se produjo la interrupción.
IBUF (Bit 6): El registro de texto de entrada se ha llenado por encima del tope definido.
ICNT (Bit 7): Se produjo una interrupción por conteo de palabras.

Detalle abreviado del byte 1 (ver la hoja de datos por más información):

ICMD (Bit 0): El comando fue ignorado.
IABB (Bit 2): Se ha producido una interrupción por abreviado.
R/B (Bit 7): Estado de la pata R/B del chip. Si es 0, los datos que se envían serán ignorados.

Forma de interrogar el estado de la operación
por medio del registro de estado (status)

Recomendamos consultar la hoja de características del WTS701 para ampliar información acerca de los bytes del registro de estado.

Detalle del comando 130 (0x82)

Este comando se utiliza para registrar las 30 frases predefinidas en la memoria flash del PIC. El uso de este comando no es fácil, ya que el texto es enviado en un formato comprimido especial. Esta operación se puede realizar con facilidad utilizando el programa SP03.EXE .


Comunicación por bus I2C

Para implementar la comunicación por bus I2C sólo se requiere utilizar las señales SDA y SCL, además de la alimentación de 5V.

No se incluyen dentro el módulo los resistores de polarización del bus, así que si fuera el único dispositivo conectado éstas deben ser situadas en alguna parte del bus.

Lo más normal es instalarlas en el dispositivo maestro (bus master), lo que servirá para todos los módulos que se conecten al bus.

Los valores usuales son resistores de 4k7 (uno en cada señal) para velocidades de 100 KHz y de 1k8 si se sube hasta los 400 KHz. Para mayores velocidades se deben separar los bytes que se envian por el bus I2C con un retardo mínimo de 40 useg, con el fin de dar tiempo al procesador para transferir el byte recibido a su registro interno flash. Cumpliendo con este requisito, operando con el módulo sintetizador de voz SP03 se han obtenido velocidades de transferencia de hasta 1 MHz.

El protocolo que se emplea para comunicarse con el módulo SP03 por el bus I2C es el mismo que se emplea en las memorias EEPROM del tipo 24C04 y similares.

El módulo SP03 tiene dos registros, el de comandos y el del número de revisión.

Para iniciar la comunicación

  • 1. se envía el bit de inicio y la dirección del módulo con el bit de escritura/lectura puesto a cero (0xC4) y a continuación la dirección del registro que contiene el número de revisión (0x01).
  • 2. Luego se vuelven a enviar el bit de inicio y la dirección del módulo, pero ahora con el bit escritura/lectura puesto a 1 (0xC5).
  • 3. Se lee un byte, que es el número de revisión del software del PIC, más el bit de parada.

Si no se obtuviera este número de revisión, y en cambio el byte está en cero, la comunicación no se establece.

Registro    Función
0   Registro de Comando
1   Número de revisión del software

Una vez establecida la comunicación, los comandos y el texto que se desea reproducir se envían al registro de comando. Existe un total de 32 comandos válidos, que se muestran a continuación:

Comando     Acción
NOP 0 (ó 0x00)     No emite sonido. Guarda un frase en la memoria.
SPKPRE 1 a 30, (ó 0x01 a 0x1E)     Vocaliza la frase predefinida
SPKBUF 64 (ó 0x40)     Vocaliza el texto de la memoria flash

El comando NOP, utilizado para agregar texto a la memoria flash cuando se necesita que el módulo reproduzca textos enviados en ASCII, debe ser seguido por el texto que se desea sintetizar. Se puede mandar cualquier texto de una extensión que no supere los 81 bytes.

Se pueden enviar varias secuencias de comandos NOP a la memoria flash antes de enviar el comando SPKBUF, que es el que finalmente inicia la vocalización.

Luego de la ejecución de un comando SPKPRE o SPKBUF, la memoria flash se vacía.

El formato del comando NOP es el mismo que el que se emplea en protocolo serie RS232, es decir, 3 bytes de control seguidos del texto, y al final el carácter 0 (0X00).

Una vez enviado el texto, éste puede ser reproducido enviando el comando SPKBUF. Hay que tener en cuenta que el tamaño total de la memoria flash es de 85 bytes, por lo que si descontamos los 4 bytes de control quedan un total de 81 caracteres para el texto.

La secuencia para reproducir la palabra "Hola" desde el bus I2C es la siguiente:

Comando     Acción
Bit de inicio     Inicia protocolo I2C
0xC4     Dirección I2C del SP03
0x00     Registro de comandos del SP03
0x00     Comando NOP
0x00     Volumen (Max.)
0x05     Velocidad
0x03     Tono
'H' (0x48)     Texto
'o' (0x6F)     Texto
'l' (0x6C)     Texto
'a' (0x61)     Texto
0x00     NULO
Bit de parada     Fin de la Secuencia

Fíjese que no hay un comando único "Vocalice este texto" como en el caso del comando a traves de la interfaz RS232. Si se desea reproducir una frase, entonces, se debe enviar el comando NOP seguido por el texto y después —en otra transacción I2C— el comando SPKBUF.

Para comprobar si ha terminado la vocalización, se puede leer el registro de comando. Mientras está reproduciendo, el valor del registro es el del comando que inició la vocalización (comandos del 1 al 30) o bien el valor 64 (0X40). El valor es puesto a cero cuando el módulo termina de hablar y está preparado para la próxima frase.


Comunicación por puerto paralelo

El conector de puerto paralelo PL2 se utiliza para reproducir una de las 30 frases predefinidas. La comunicación a través de este puerto no permite enviar texto ASCII para que se lo vocalice.

Para reproducir cualquiera de las 30 frases guardadas, basta con aplicar el valor binario del número de frase a las entradas SEL0-SEL4. Los números 00 y 31 no se utilizan, de modo que si se aplica ese número no se reproduce nada.

Las entradas cuentan con resistencias de polarización, de modo que si no se utilizan se pueden dejar desconectadas. Cuando el PIC reconoce un valor de entrada en los pines SEL0-SEL4, pone el bit de la salida STATUS a 1 para indicar que está ocupado y reproduce la frase. Una vez que el bit de estado está en 1, se puede quitar el valor de entrada de los pines SEL0 a SEL4. Se debe volver al valor 0 ó 31 antes de que el módulo termine de hablar, porque sino la frase será repetida.

La salida del pin STATUS se pone en estado lógico bajo (0) cuando el módulo SP03 ha terminado de reproducir la frase.


Encendido

Al encender el módulo, éste reproduce de forma automática la frase número 1. Si no desea que esto ocurra, no almacene texto en la frase número 1.


Programa de Configuración SP03.EXE

El programa de configuración para el módulo SP03 es gratuito y se puede obtener descargándolo aquí. Se trata de un programa para PC.

Al ejecutar por primera vez el programa, se deberá seleccionar el puerto COM1 o COM2 a través del cual se va a realizar la conexión. Este valor será recordado la próxima vez que se utilice el programa.

Con este programa se pueden almacenar 30 frases, que se definen en 6 páginas de 5 frases cada una. Presionando sobre los botones PageUP y PageDW se cambia de página. Debajo de las 5 frases hay una línea en la que se muestra el estado, y tres botones deslizantes que sirven para cambiar el volumen, el tono y la velocidad de la vocalización.

El volumen y la velocidad funcionan de una forma lineal, pero el tono tiene un funcionamiento algo más extraño, debido al funcionamiento interno del chip WTS701.

Una vez que se han escrito y probados todas las frases, se las puede almacenar en la memoria flash del PIC16F872 con sólo pulsar el botón Program.

El funcionamiento del programa es bastante sencillo: basta con escribir algo en una de las líneas de texto y a continuación pulsar el botón Test que se encuentra a su lado. Las palabras que se han escrito se reproducirán en el módulo de inmediato. Al pulsar el botón de "Test" se almacena y se utilizan los valores de volumen, velocidad y tono de los respectivos controles que se han fijado en el panel. Pulsando el botón "Set" se reproduce la frase usando los valores que se guardaron la última vez que se pulsó el botón "Test".

Así, se pueden definir diferentes valores de velocidad, tono y volumen para cada una de las 30 frases.

Una vez que se ha terminado de preparar las frases sólo hay que pulsar el botón "Program" para que éstas sean comprimidas y enviadas a la memoria del procesador PIC. Cuando la programación termine, se mostrará el mensaje "Finished Program" en la barra de estado ubicada arriba de los controles de volumen, etc.

Una vez programadas las frases, los botones de "Test" ya no están activos, quedando solamente los de "Set", para reproducir directamente las frases sin más cambios. Para activar de nuevo los botones de Test basta con hacer clic sobre cualquiera de las zonas de edición de texto.


Características físicas del módulo


Los datos originales del SP03 se pueden encontrar, en inglés, en esta página.
Hoja de características del integrado WTS701EM.
Para comprar el módulo SP03 en España (80,05 euros).
Para comprar el módulo SP03 en Estados Unidos (us$ 103).


© 2007, 2017 Robots Argentina - Contacto: ecarletti@ituzaingo.org