Está en la página 1de 108

100 Trucos en el Laboratorio de Control

Automático
Contenido
Capítulo 1: Introducción ...................................................................................................... 1
Capítulo 2: Aumento de resolución ..................................................................................... 3
2.1 ¿Cómo obtener más resolución de un convertidor DAC? .................................... 3
2.1.1 Limitaciones del dithering ................................................................................ 4
2.2 ¿Cómo aumentar la resolución de un convertidor ADC? .................................... 4
2.2.1 Con un DAC ..................................................................................................... 4
2.2.2 Con una señal triangular ................................................................................... 4
2.2.3 Con ruido .......................................................................................................... 4
Capítulo 3: Arduino ............................................................................................................. 5
3.1 ¿Cómo trabajar con interrupciones en Arduino?.................................................. 5
3.2 ¿Cómo aumentar la resolución del PWM en un Arduino Uno?........................... 6
3.3 ¿Cómo puedo ejecutar varios procesos por interrupciones a diferentes intervalos
de tiempo en un Arduino? .................................................................................................. 7
Capítulo 4: Cypress PSoC ................................................................................................... 9
4.1 ¿Cómo calibrar el ADC de un PSoC? .................................................................. 9
4.2 ¿Cómo seleccionar la tensión de operación del PSoC en el kit 050?................... 9
4.3 ¿Cómo utilizar interrupciones en un PSoC? ........................................................ 9
4.4 ¿Cómo usar DMA en un PSoC?......................................................................... 13
4.5 ¿Cómo utilizar el filtro digital en un PSoC 5LP?............................................... 13
4.6 ¿Cómo eliminar el rebote de un interruptor pulsador en un PSOC? .................. 13
4.7 ¿Cómo sacar por una patilla una señal interna de referencia de tensión? .......... 14
4.7.1 Con un operacional ......................................................................................... 14
4.7.2 Con un multicanalizador (mux) ...................................................................... 15
4.7.3 Con un VDAC + operacional ......................................................................... 15
4.7.4 Truco en PSoC 4 ............................................................................................. 16
4.8 ¿Cómo producir una tensión analógica variable con un PSoC?......................... 16
4.9 ¿Cómo enviar datos desde el PSoC a una computadora?................................... 17
4.9.1 En la placa 050 por el puerto RS-232 ............................................................. 17
4.9.2 En la placa 050 por el puerto USB ................................................................. 18
4.9.3 En la placa 059 por la conexión de programación del KITPROG ................. 19
4.9.4 En la placa 059 por el puerto USB del TARGET .......................................... 20
4.9.5 Placa 042 Pioneer kit ...................................................................................... 21
4.9.6 En cualquier placa vía Bluetooth .................................................................... 21

i
4.10 ¿Cómo comunicar un Arduino con un PSoC? ................................................... 22
4.10.1 De manera analógica desde el Arduino al PSoC ............................................ 22
4.10.2 De manera analógica desde el PSoC al Arduino ............................................ 22
4.10.3 De manera digital............................................................................................ 22
4.11 ¿Cómo usar un MPU6050 en un PSoC? ............................................................ 23
4.12 ¿Cómo medir la tensión de alimentación del PSoC 5LP? .................................. 23
4.13 ¿Cómo crear un nuevo componente en PSoC? .................................................. 26
Capítulo 5: Mediciones ..................................................................................................... 27
5.1 ¿Cómo calibrar las puntas de prueba de un osciloscopio? ................................. 27
5.2 ¿Cómo medir señales bipolares con un ADC unipolar? .................................... 27
5.3 ¿Cómo medir una señal bipolar que tiene superpuesta un valor de CD positivo?
28
5.4 ¿Cómo medir el periodo de muestreo al cual se ejecuta un algoritmo de control
digital? 29
5.5 ¿Cómo medir el tiempo que dura el procesamiento de un algoritmo de control?
30
5.6 ¿Cómo puedo optimizar mi algoritmo de control si tarda más de lo esperado? 30
5.7 ¿Cómo medir la posición angular de un eje con un codificador óptico
incremental?...................................................................................................................... 31
5.8 ¿Cómo medir la velocidad angular de un eje con un codificador óptico
incremental?...................................................................................................................... 34
5.9 ¿Cómo medir con un sensor conectado en puente de Wheatstone? ................... 37
5.10 ¿Cómo medir temperatura con un RTD? ........................................................... 37
5.11 ¿Cómo medir la corriente de consumo de un dispositivo?................................. 37
5.12 ¿Cómo eliminar el offset en las mediciones? ..................................................... 37
Capítulo 6: Conversiones .................................................................................................. 39
6.1 ¿Cómo medir adecuadamente una señal analógica? .......................................... 39
6.2 ¿Cómo escoger el ancho de palabra de un convertidor ADC? ........................... 39
6.3 ¿Cómo limitar en banda una señal analógica? ................................................... 39
6.4 ¿Cómo diseñar un filtro antisolapamiento (antialiasing) analógico? ................ 39
6.5 ¿Cómo reducir la frecuencia de muestreo de una señal ya obtenida? ................ 39
6.6 ¿Cómo aumentar la frecuencia de muestreo de una señal ya obtenida? ............ 39
6.7 ¿Cómo producir salidas bipolares con un DAC unipolar? ................................. 39
Capítulo 7: Ruido .............................................................................................................. 41
7.1 ¿Cómo reducir la posibilidad de que se induzca ruido en el cable de un sensor?
41

ii
7.2 ¿Cómo reducir la inducción de ruido al transmitir señales? .............................. 42
7.2.1 Modo diferencial............................................................................................. 42
7.2.2 Modo unipolar ................................................................................................ 42
7.2.3 Tierras de por medio ....................................................................................... 42
7.3 ¿Cómo reducir el ruido inducido en los cables de alimentación CD de un circuito?
42
7.4 ¿Cómo reducir la posibilidad de inducir ruido en otro circuito?........................ 42
7.5 ¿Cómo evitar el ruido en un circuito impreso? .................................................. 42
7.6 ¿Cómo evitar que el ruido producido por motores u otros elementos afecte un
sistema de control? ........................................................................................................... 42
7.7 ¿Cómo reducir el ruido de una señal después de muestreada? .......................... 42
7.8 ¿Qué es un filtro de media móvil? ..................................................................... 42
7.9 Cómo implementar un filtro de media móvil ..................................................... 43
7.10 ¿Cómo implementar un filtro digital de primer orden?...................................... 44
7.11 ¿Cuál filtro es mejor para eliminar el ruido, el de media móvil o el de primer
orden? 44
7.12 ¿Cómo implementar un filtro digital para eliminar una frecuencia (notch filter)?
44
Capítulo 8: Conversiones de tensión CD-CD.................................................................... 45
8.1 ¿Cómo alimentar eficientemente un circuito CD de baja tensión desde una fuente
CD de mayor tensión? ...................................................................................................... 45
8.2 ¿Cómo alimentar un circuito CD que requiere de mayor tensión desde una fuente
CD de menor tensión? ...................................................................................................... 47
8.3 ¿Cómo producir a partir de una tensión CD no regulada una tensión CD fija y
regulada a un valor similar al de la entrada? .................................................................... 48
Capítulo 9: Medición de parámetros ................................................................................. 49
9.1 ¿Cómo medir la inductancia de un circuito o motor CD? .................................. 49
9.2 ¿Cómo medir la resistencia de un circuito o motor CD? ................................... 49
9.3 ¿Cómo medir la fricción dinámica de un motor de CD?.................................... 49
9.4 ¿Cómo medir la fricción estática de un motor de CD? ...................................... 49
9.5 ¿Cómo medir la inercia rotacional de un motor de CD? .................................... 49
9.6 ¿Cómo medir la inercia rotacional de un péndulo simple? ................................ 49
Capítulo 10: Implementación de controladores en tiempo discreto ................................ 51
10.1 ¿Cuál es la estructura básica de un control en tiempo discreto? ........................ 51
Para el control en tiempo discreto es fundamental que el algoritmo de control se ejecute
periódicamente con un periodo constante igual al usado para el diseño del controlador. 51

iii
10.2 ¿Cómo implementar un controlador proporcional en tiempo discreto? ............. 53
10.3 ¿Cómo implementar un controlador integral en tiempo discreto? ..................... 53
10.4 ¿Cómo evitar el windup en un controlador integral? ......................................... 56
10.5 ¿Cómo implementar un controlador derivativo ideal en tiempo discreto? ........ 59
10.6 ¿Cómo implementar un controlador derivativo con filtro en tiempo discreto? . 59
10.7 ¿Cómo se implementa un regulador PID tradicional en tiempo discreto? ......... 60
10.8 ¿Cómo se implementan otras variantes de regulador PID en tiempo discreto? . 61
10.9 ¿Cómo implementar un controlador de realimentación de estados en tiempo
discreto? ............................................................................................................................ 63
10.10 ¿Cómo diseñar un controlador para una planta que tiene un tiempo muerto? ... 63
10.11 ¿Cómo escoger el periodo de muestreo TS para el algoritmo de control en tiempo
discreto? ............................................................................................................................ 64
Capítulo 11: Control de motores de CD .......................................................................... 65
11.1 ¿Cómo controlar eficientemente la velocidad de un motor de CD de imán
permanente? ...................................................................................................................... 65
11.2 ¿Cómo controlar la dirección de un motor de CD? ............................................ 67
11.2.1 Puente H basado en un L298N ....................................................................... 68
11.3 ¿Cómo duplicar la corriente de un puente H doble? .......................................... 70
11.4 ¿Cómo medir la corriente que consume un motor de CD? ................................ 71
11.5 ¿Cómo limitar la corriente consumida por un motor de CD? ............................ 71
11.6 ¿Cómo escoger la frecuencia del PWM de potencia? ........................................ 71
11.7 ¿Cómo producir una tensión CD de potencia a partir de un valor almacenado en
memoria? .......................................................................................................................... 73
11.8 Cómo producir una señal sinusoidal con PWM? ............................................... 76
11.9 ¿Por qué producir un PWM simétrico en lugar de uno asimétrico?................... 77
11.10 ¿Cómo conectar interruptores de fin de carrera en un sistema de traslación con
motor CD? ........................................................................................................................ 78
Capítulo 12: Corrección de no linealidades ..................................................................... 79
12.1 ¿Cómo evitar o combatir la fricción estática en motores CD? ........................... 79
12.2 ¿Cómo linealizar la señal de un sensor?............................................................. 79
Capítulo 13: Misceláneos ................................................................................................ 83
13.1 ¿Cómo controlar la posición de un servo RC? ................................................... 83
13.2 ¿Cómo puedo ejecutar varios procesos por interrupciones a diferentes intervalos
de tiempo? ........................................................................................................................ 84
13.3 ¿Cómo limitar la tensión y la corriente de una fuente Agilent? ......................... 84
13.4 ¿Cómo aislar las tierras entre dos circuitos? ...................................................... 84

iv
13.5 ¿Cómo conectar las tierras entre circuitos de control y de potencia? ................ 84
13.6 ¿Cómo conectar las tierras entre la sección digital y la sección analógica de un
circuito electrónico mixto? ............................................................................................... 84
13.7 ¿Cómo eliminar el rebote mecánico de un interruptor pulsador? ...................... 85
13.7.1 Eliminación del rebote en hardware .............................................................. 85
13.7.2 Eliminación del rebote en software ................................................................ 87
13.8 ¿Cómo hacer una máquina de estados finitos en lenguaje C?............................ 88
13.9 ¿Cómo hacer que al presionar un botón se ejecute una operación solo una vez?
90
13.10 ¿Qué son los números Qm.n? ............................................................................. 91
13.11 ¿Cómo escoger la resolución para un tipo Qm.n? .............................................. 92
13.12 ¿Cómo convertir números en punto flotante a Qm.n y viceversa? .................... 93
13.12.1 Realizando los cálculos manualmente ........................................................ 93
13.12.2 Con el precompilador de C ......................................................................... 93
13.13 ¿Cómo realizar operaciones aritméticas con números Q.m.n? .......................... 94
13.13.1 Realizando los cálculos manualmente ........................................................ 94
13.13.2 Con una biblioteca especializada ................................................................ 94
Capítulo 14: Referencias .................................................................................................. 97

v
Índice de figuras
Figura 2.1: Ejemplo de dithering con 2 bits extra .................................................................. 3
Figura 4.1: Esquema de interrupción periódica por hardware ............................................. 10
Figura 4.2: Ventana de configuración de interrupciones...................................................... 11
Figura 4.3: Formas de onda típicas del componente Timer de un PSoC 5LP ...................... 11
Figura 4.4: Eliminador de rebote como componente en un PSoC ....................................... 14
Figura 4.5: Señal de referencia externa con operacional ...................................................... 14
Figura 4.6: Opciones para una tensión de referencia interna ............................................... 15
Figura 4.7: Generación de una tensión de referencia externa con un VDAC ...................... 15
Figura 4.8: Opciones de configuración para el VDAC ........................................................ 16
Figura 4.9: Esquema de convertidor DAC con amplificador operacional de salida ............ 16
Figura 4.10: Esquema de convertidor digital-analógico con dithering y amplificador de salida
.............................................................................................................................................. 17
Figura 4.11: Diagrama del UART en el KIT 050 para transmisión por el puerto RS-232... 18
Figura 4.12: Detalle de las conexiones al convertidor TTL/RS232 y del conector P7 ........ 18
Figura 4.13: Componente USBUART del kit 050 ............................................................... 19
Figura 4.14: Detalle de los puertos USB del kit 050 ............................................................ 19
Figura 4.15: El kit 059 de Cypress ....................................................................................... 20
Figura 4.16: Conexiones del componente UART conectado para utilizar el KITPROG como
convertidor a USB ................................................................................................................ 20
Figura 4.17: Restablecimiento de conexiones para el UART entre el KITPROG y el
TARGET .............................................................................................................................. 20
Figura 4.18: Conexiones del componente UART de un PSoC 4 en el kit 042..................... 21
Figura 4.19: Conexiones para utilizar el KITPROG como puente serie-USB en el kit 042 21
Figura 4.20: Temporizador del PSoC usado para medir la duración de eventos ................. 23
Figura 4.21: Configuración de un temporizador de PSoC para medir el ancho de pulsos. .. 23
Figura 4.22: Referencia VDDA en la entrada del ADC para medir la tensión de alimentación
.............................................................................................................................................. 24
Figura 4.23: Configuración del ADC para leer valores iguales o mayores a VDDA........... 25
Figura 5.1: Acondicionamiento de señal bipolar para medición con ADC unipolar ........... 27
Figura 5.2: Señal de ángulo superpuesta sobre un valor CD ................................................ 28
Figura 5.3: Formas de convertir una señal superpuesta sobre un valor CD ......................... 29
Figura 5.4: Oscilograma para medir el periodo de muestreo .............................................. 29

vii
Figura 5.5: Medición del tiempo de ejecución del algoritmo de control digital .................. 30
Figura 5.6: Discos de codificadores ópticos ......................................................................... 32
Figura 5.7: Señales de un codificador incremental en cuadratura ........................................ 33
Figura 5.8: Implementación de la máquina de estados del decodificador de cuadratura de un
PSoC de Cypress en modo 1x. ............................................................................................. 34
Figura 6.1: Circuito para producir una salida bipolar con un DAC unipolar ....................... 39
Figura 6.2: Simulación del circuito de la Figura 6.1 ............................................................ 40
Figura 8.1: Diagrama simplificado de un regulador buck .................................................... 46
Figura 8.2: Diagrama simplificado de un regulador boost ................................................... 47
Figura 8.3: a) Imagen de un regulador boost U3V50F9 de 9 V/ 3 A. b) Las gráficas de
eficiencia del regulador U3V50F9 [21] ................................................................................ 48
Figura 10.1: Aproximaciones discretas a la integral ............................................................ 54
Figura 10.2: Simulación de un regulador PI con windup ante una perturbación sostenida.. 57
Figura 10.3: Simulación de un regulador PI con antiwindup por saturación del término
integral. ................................................................................................................................. 58
Figura 10.4: Señales de salida y acción de control ante entrada escalón y perturbaciones de
un control de velocidad constante. ....................................................................................... 59
Figura 10.5: Estructura de un regulador PID en paralelo en el dominio del tiempo discreto
.............................................................................................................................................. 61
Figura 10.6: Estructura de la variante I_PD del regulador PID paralelo en tiempo discreto62
Figura 10.7: Estructura de un control con predictor de Smith en tiempo discreto ............... 64
Figura 11.1: Señal de PWM en el tiempo y su Transformada de Fourier ............................ 65
Figura 11.2: Tensión, corriente y potencia disipada por los conmutadores en un amplificador
clase D .................................................................................................................................. 67
Figura 11.3: Esquema de operación de un puente H con el motor en modo libre y activado
.............................................................................................................................................. 67
Figura 11.4: Operación del puente H para frenar el motor ................................................... 68
Figura 11.5: Puente H basado en L298N. Para utilizar las patillas de ENABLE remueva el
puente negro del canal respectivo y conecte la señal de PWM ............................................ 69
Figura 11.6: Puente H doble basado en el MC33926. .......................................................... 69
Figura 11.7: Conexión de puente H doble en paralelo ......................................................... 70
Figura 11.8: Efecto del cambio de ciclo de trabajo del PWM en la velocidad del motor .... 73
Figura 11.8: Conversión de un valor en memoria a un valor físico en la armadura de un motor
de CD .................................................................................................................................... 74
Figura 11.9: Señal de PWM bipolar modulada de forma sinusoidal .................................... 77

viii
Figura 11.10: PWM asimétrico y simétrico ......................................................................... 77
Figura 11.11: Circuito para conectar los límites de carrera de un desplazamiento lineal .... 78
Figura 12.1: Corriente estimada para la bobina del levitador magnético con una tensión
ruidosa .................................................................................................................................. 81
Figura 13.1: Señal de control de un servo RC ...................................................................... 83
Figura 13.2: Tierras en un circuito de electrónica mixta ...................................................... 85
Figura 13.3: Rebote mecánico de un interruptor pulsador, yendo de alto a bajo ................. 86
Figura 13.4: Eliminador de rebote con dos flip-flops. .......................................................... 86
Figura 13.5: Diagrama de tiempo del eliminador de rebote con dos flip-flops. ................... 87
Figura 13.6: Eliminador de rebote como componente en un PSoC ..................................... 87
Figura 13.7: Diagrama de una máquina de estados finitos para eliminar el rebote [7]. ....... 88
Figura 13.8: Diagrama de estados de una máquina para ejecutar un proceso una única vez
cuando un botón definido se presiona (Detector de flanco positivo). .................................. 90
Figura 13.9: Diagrama de tiempo de la máquina de estado para ejecutar un proceso una única
vez al presionar un botón. ..................................................................................................... 91
Figura 13.10: Formato de los números Q.m.n ...................................................................... 92

ix
Capítulo 1: Introducción

1
Capítulo 2: Aumento de resolución
2.1 ¿Cómo obtener más resolución de un convertidor DAC?
Para obtener más resolución de un convertidor de digital a analógico con un ancho de palabra
de m bits se puede utilizar una frecuencia de actualización 2n veces más rápida que la
frecuencia de muestreo del algoritmo de control, con lo cual se obtiene n bits más de
resolución en el convertidor [1]. Las 2n salidas al convertidor, en cada periodo de muestreo,
deben ser de magnitud tal que su valor promedio sea el valor esperado de un convertidor de
resolución N = m + n. En inglés esto es llamado dithering. Para producir una salida
promediada más suave, es recomendable colocar un condensador de pequeño valor (0.01 -
0.1uF) entre la salida del DAC y tierra para que funcione como filtro pasa bajas. Un
componente con esta habilidad, disponible en PSoC 5LP, se describe en el punto 4.8.
Ejemplo 1: Aumento de resolución en dos bits

Aumentar la resolución de un convertidor DAC, que produce una salida de 0 a 5V, de 8 bits
a 10 bits. Es claro que de la ecuación anterior n = 2; por lo que 2n = 4 y que la resolución
original del convertidor es 5V/256  20mV; exactamente 19.53 mV; pero, para facilitar el
cálculo se trabajará con valores redondeados. La nueva resolución debe ser de 5/1024  5mV
= 20mV/4 aproximadamente; por lo que, si se desea una salida de 105mV, se deben producir
en secuencia cuatro salidas con diferencias de 20mV (ALSB original para 8 bits) de tal forma
que su promedio sea 105mV; esto significa que 4*105mV = 420mV lo cual puede ser
obtenido con 3 salidas de 100mV y una de 120mV.
Tabla 2.1: Ejemplo de dithering con 2 bits extra se obtiene 4 valores intermedios

Salida Salida Salida Salida


Promedio
(t+0) (t+1) (t+2) (t+3)
100mV 100mV 100mV 100mV 100mV
100mV 100mV 100mV 120mV 105mV
100mV 100mV 120mV 120mV 110mV
100mV 120mV 120mV 120mV 115mV
120mV 120mV 120mV 120mV 120mV

U [V]
Ts/4

C
Valor medio

t
Ts = Periodo
Figura 2.1: Ejemplo de dithering con 2 bits extra

3
2.1.1 Limitaciones del dithering
Un DAC dithered de N bits, basado en un DAC de 8 bits, por ejemplo, no puede generar
todos los 2N valores de salida únicos. Los últimos X códigos, donde X = 2 (N - 8), generan todos
la misma tensión de salida. Esto se debe al hecho de que el dithering requiere dos valores
adyacentes del DAC de 8 bits para generar una señal de salida promediada. En el caso que
la salida interna de DAC de 8 bits se ajuste al equivalente de 255 (0xFF), ya no hay ningún
valor superior adyacente con el cual promediar.

2.2 ¿Cómo aumentar la resolución de un convertidor ADC?


2.2.1 Con un DAC
2.2.2 Con una señal triangular
2.2.3 Con ruido

4
Capítulo 3: Arduino
3.1 ¿Cómo trabajar con interrupciones en Arduino?
Para cada tipo de Arduino se encuentra disponible una biblioteca adicional que lleva por
nombre TimerXYZ, donde XYZ puede ser por ejemplo ONE, THREE o DUE. Dependiendo
de la biblioteca usada y de la plataforma, así son las restricciones de uso de pines para PWM
como se muestra en la Tabla 3.1 [1]. Por ejemplo para Arduino Uno se debe utilizar la
biblioteca TimerOne [2] que usa el temporizador 1 del ATmega168/328. Con esta biblioteca
podemos hacer que un proceso, típicamente el que ejecuta el algoritmo de control digital, se
invoque periódicamente por una interrupción de hardware del temporizador 1.
Los métodos necesarios de la biblioteca TimerOne son:
Timer1.initialize( periodo [µs] );

Este método es imperativo que se ejecute antes de cualquier otro método de esta biblioteca.
Opcionalmente se puede especificar el periodo en microsegundos, por defecto está puesto en
1s. Tenga en cuenta que esto impide el funcionamiento del método analogWrite() en
los pines 9 y 10 del Arduino Uno. Puede ser también que el uso de esta biblioteca interfiera
con otras bibliotecas para Arduino, por ejemplo con la biblioteca Servo que utiliza también
el temporizador 1.
Timer1.attachInterrupt( función, periodo [µs] );

Conecta la función especificada con la interrupción y esta función será invocada


periódicamente al intervalo en microsegundos, opcionalmente especificado.
Los métodos opcionales de la biblioteca TimerOne son:
setPeriod( periodo [µs] );

Define el periodo en microsegundos.


void detachInterrupt();

Deshabilita la función conectada a la interrupción.

Tabla 3.1: Pines de PWM en diferentes plataformas de Arduino con TimerOne y TimerThree

Pines PWM con Pines PWM con


Plataforma
TimerOne TimerThree
Teensy 3.1 3, 4 25, 32
Teensy 3.0 3, 4
Teensy 2.0 4, 14, 15 9
Teensy++ 2.0 25, 26, 27 14, 15, 16
Arduino Uno 9, 10

5
Pines PWM con Pines PWM con
Plataforma
TimerOne TimerThree
Arduino Leonardo 9, 10, 11 5
Arduino Mega 11, 12, 13 2, 3, 5
Wiring-S 4, 5
Sanguino 12, 13

Ejemplo 2: Uso de interrupciones en Arduino para parpadear un LED cada 1/2 segundo
#include <TimerOne.h>

const int LED = 13;

void setup() {

// Ponga aquí su código inicial para correr una vez:

pinMode(LED, OUTPUT);

// Inicializa el proceso de interrupciones cada medio segundo


Timer1.initialize(500000);
Timer1.start();
Timer1.attachInterrupt(TimerInt);

void TimerInt() {

digitalWrite(LED, digitalRead(LED)^1);

void loop() {

// Ponga su código aquí para correr indefinidamente:

3.2 ¿Cómo aumentar la resolución del PWM en un Arduino Uno?

Por defecto un Arduino Uno produce señales de PWM, con la instrucción analogWrite()
con una resolución de 8 bits, o sea 256 niveles entre 0 y 255. Los Arduino Zero y Due pueden
ser configurados para una resolución de PWM de hasta 12 y 16 bits respectivamente.

6
En un Arduino Uno, sin tener que modificar directamente registros internos, se puede utilizar
la biblioteca TimerOne (Timer1); con ella se puede alcanzar resolución de 10 bits para el
PWM, usando las instrucciones pwm() y setPwmDuty() solo que al utilizar esta
biblioteca, el uso de los pines 9 y 10 con la instrucción analogWrite() se atrofia.

3.3 ¿Cómo puedo ejecutar varios procesos por interrupciones a


diferentes intervalos de tiempo en un Arduino?
Puede crear una interrupción con el valor del mínimo común denominador de todos los
intervalos deseados, luego en el proceso de atención de la interrupción programe un "divisor
de frecuencia" por medio de un contador de interrupciones y luego por medio de una
sentencia switch vaya ejecutando los procesos según corresponda.

7
Capítulo 4: Cypress PSoC
4.1 ¿Cómo calibrar el ADC de un PSoC?
4.2 ¿Cómo seleccionar la tensión de operación del PSoC en el kit 050?
La estructura de la alimentación de un PSoC es muy flexible, posee una entrada de
alimentación separada para las entradas y salidas digitales (VDDD) y otra para la parte
analógica (VDDA). La tensión VDDA se puede seleccionar entre 3.3 V y 5 V con el puente
J11. La tensión VDDD se puede seleccionar entre 3.3 V y 5 V con el puente J10.

Esquema de alimentación Posición de los puentes


J10 puesto en 5 V y
VDDA = 5 V, VDDD = 5 V
J11 puesto en 5 V
J10 puesto en 3.3 V y
VDDA = 3.3 V, VDDD = 3.3 V J11 puesto en 3.3 V
(recomendado para alimentación por USB 5 V)
J10 puesto en 3.3 V y
VDDA = 5 V, VDDD = 3.3 V
J11 puesto en 5 V
Se puede seleccionar; pero, es una combinación inválida ya
VDDA = 3.3 V, VDDD = 5 V
que no se puede garantizar la operación correcta del PSoC
Tabla 4.1: Ubicación de los puentes para seleccionar el esquema de alimentación del PSoC

El funcionamiento correcto del dispositivo PSoC está garantizado cuando VDDA es mayor
o igual que VDDD. El incumplimiento de esta condición puede tener implicaciones en el
funcionamiento del componente.
Cuando se utiliza la alimentación USB, debe seleccionarse 3.3 V para las alimentaciones
analógica y digital. Esto debido a que el valor de 5 V de la alimentación USB no es exacto y
por ello no es recomendable.

4.3 ¿Cómo utilizar interrupciones en un PSoC?


En un PSoC algunos componentes como el ADC o el Timer pueden producir interrupciones
al ocurrir diferentes eventos seleccionables. También existe un componente para producir
interrupciones disparadas por señales en hardware como por ejemplo, acciones en las
entradas o salidas de componentes. El proceso de interrupciones es el mismo, sin importar
demasiado la fuente de la interrupción. En la Figura 4.1se muestra el diagrama de un
generador de interrupciones basado en un temporizador y en el componente llamado ISR.
Este ejemplo es típico de un sistema de control digital cuyo algoritmo de control debe
ejecutarse a intervalos regulares.

9
Figura 4.1: Esquema de interrupción periódica por hardware

En este ejemplo no se ha utilizado la interrupción interna del temporizador, para que el


ejemplo sea más genérico y muestre el posible manejo de interrupciones producidas por
eventos de externos de hardware, también comunes en sistemas de control.
En general, los eventos de hardware pueden producir señales de interrupción de corta o larga
duración. Dependiendo de la duración del evento, es conveniente que atención de la
interrupción pueda discriminar cada evento y no atender una misma interrupción múltiples
veces. En el componente ISR puede configurase el manejo de cada interrupción a través de
la selección del tipo de interrupción. Esta configuración tiene tres modos de operación, como
puede verse en la Figura 4.2: a) DERIVED, donde el componente (ISR) infiere el tipo de
interrupción a partir de la señal conectada a éste; b) RISING_EDGE, con lo que la
interrupción se activa con el flanco de subida de la señal y c) LEVEL, donde un nivel en alto
activa la interrupción. El tipo configurado por defecto es DERIVED, con el cual
eventualmente el componente se comportará como se espera en cada caso; pero, se
recomienda no dejar nada al azar y seleccionar un tipo adecuado para la fuente de
interrupciones.

10
Figura 4.2: Ventana de configuración de interrupciones

En este caso, aunque el componente Timer produce en la salida TC (fin de conteo) un único
pulso con la duración de un ciclo de reloj, según su hoja de datos como puede verse en la
Figura 4.3; como ejemplo, se ha seleccionado para en el componente ISR el modo de
activación por flanco de subida.

Figura 4.3: Formas de onda típicas del componente Timer de un PSoC 5LP

Para el manejo de las interrupciones dentro del programa principal del PSoC, se requieren
cuatro pasos:

11
a) La declaración del prototipo del proceso de interrupciones. Esto identifica el
proceso cuyo nombre va como parámetro, en este ejemplo isr_Timer_Handler,
nombre derivado del nombre dado al componente ISR en la Figura 4.1, no como un
proceso cualquiera; sino, como un proceso de atención de interrupciones. Esto facilita
que el usuario pueda escribir su proceso de atención de interrupciones sin preocuparse
por el manejo de bajo nivel de la interrupción, tal como deshabilitación de las
interrupciones al inicio del proceso, o habilitación de las interrupciones al final.

/* Interrupt prototype */
CY_ISR_PROTO(isr_Timer_Handler);

b) La escritura del proceso de atención de interrupciones. Se debe utilizar el mismo


nombre usado al declarar el prototipo en el paso a). Como este proceso fue declarado
uno de atención a las interrupciones, se escribe como cualquier otro proceso y no se
debe lidiar con el manejo a bajo nivel de las interrupciones. Solo tiene que tomar en
cuenta que si el proceso utilizar variables que deben retener su valor entre
interrupciones, éstas deben ser declaradas como globales y volátiles.

/* Declaración del proceso de atención de interrupciones */


CY_ISR(isr_Timer_Handler)
{

/* Defina aquí sus variables locales */


// Variable1 …
// variable2 …
// …

/* Ponga aquí el código que procesa la interrupción */


// Sentencia1 …
// Sentencia2 …
// …

} // CY_ISR

c) Como cualquier otro componente del PSoC, el componente ISR debe iniciarse en
la fase no repetitiva del proceso principal, (main), del programa principal del PSoC.
Esto instalará el vector de interrupciones asociado a la interrupción apuntando al
proceso declarado en el paso a) y programado en el paso b). Solo que el proceso a
utilizar es _StartEx(NombredelProcesodeAtencióndeInterrupcionesDeclarado), no
un simple _Start().
d) Finalmente debe activarse las interrupciones de manera global, antes del inicio del
lazo infinito del proceso main. Este último paso se hace solo una vez, mientras que
los tres pasos anteriores deben realizarse para cada una de las interrupciones a
procesar.

12
int main(void)
{

/* Inicio de todos los componentes */


// Inicio de componente1 …
// Inicio de componente2 …
// …

/* Inicie el proceso de interrupciones con StartEx no solo Start */


isr_Timer_StartEx(isr_Timer_Handler);

/* Habilite las interrupciones de forma global */


CyGlobalIntEnable;

/* Lazo infinito */
for(;;)
{

/* Ponga aquí su código principal */

} // for

} // main

4.4 ¿Cómo usar DMA en un PSoC?


Ejemplos y Wizard

4.5 ¿Cómo utilizar el filtro digital en un PSoC 5LP?


Ejemplos y Wizard

4.6 ¿Cómo eliminar el rebote de un interruptor pulsador en un


PSOC?
En un PSoC existe un componente de hardware que sirve para eliminar el rebote. Su
estructura interna, que puede verse en su hoja de datos, es un poco más compleja que la de la
Figura 13.4; pero, está basada en el mismo principio. Este componente de PSoC no solo
elimina el rebote presente en la señal de entrada d; sino, que también detecta flancos, de
subida, bajada o ambos, y produce las salidas correspondientes.

13
Figura 4.4: Eliminador de rebote como componente en un PSoC

Para más detalles de cómo eliminar el rebote, vea además el punto 13.7 que describe la
técnica de eliminación de rebote por software, también aplicable al PSoC; y otras técnicas de
hardware.

4.7 ¿Cómo sacar por una patilla una señal interna de referencia de
tensión?
4.7.1 Con un operacional
Para producir una tensión de referencia externa en un PSoC 5LP, la forma más simple es
utilizar un amplificador operacional configurado en modo seguidor, como se muestra en la
Figura 4.5. El operacional es necesario ya que la impedancia de la referencia interna es alta.

Figura 4.5: Señal de referencia externa con operacional

En la Figura 4.6 se muestran las diferentes opciones existentes para el valor de la tensión de
referencia interna, siendo 1.024 V el valor predeterminado. Este es generado por una
referencia bandgap independiente de la tensión de alimentación y con un coeficiente de
temperatura muy bajo y que se deriva de la diferencia entre la energía de la banda de
conducción y la banda de valencia en el silicio a 0 °C (1.22 eV).
Existen otras opciones que son obtenidas por divisores resistivos desde 1.024 V o desde la
tensión de alimentación analógica, VDDA; así como valores absolutos de GND, VDDA o
VDDD, la tensión de alimentación digital.

14
Figura 4.6: Opciones para una tensión de referencia interna

4.7.2 Con un multicanalizador (mux)

4.7.3 Con un VDAC + operacional


En este caso, a diferencia de utilizar una referencia fija como en los apartados 4.7.1 y 4.7.2,
se puede producir una tensión ajustable por medio de un convertidor de digital a analógico,
VDAC, el cual está conectado internamente a la referencia bandgap de 1.024V. El
operacional es requerido de nuevo debido a la alta impedancia de la salida del VDAC. Sin el
operacional, la única carga aceptable para el VDAC es un condensador.

Figura 4.7: Generación de una tensión de referencia externa con un VDAC

El VDAC puede ser configurado en dos rangos de salida: de 0 a 1.020 V con una resolución
de 4 mV/bit y de 0 a 4.080 V con una resolución de 16 mV/bit. Existe en los PSOC además
un VDAC dithered o DVDAC que permite una resolución de 1mV/bit, como se describe en
el apartado 4.8.
En la Figura 4.8 se muestran las opciones de configuración de un VDAC de 8 bits, por lo que
cada rango de operación se puede dividir en 256 pasos (de 0 a 255) para producir la referencia
de tensión deseada.

15
Figura 4.8: Opciones de configuración para el VDAC

4.7.4 Truco en PSoC 4

4.8 ¿Cómo producir una tensión analógica variable con un PSoC?


Un PSoC de la familia 5LP tiene varios tipos de convertidores de digital a analógico: IDAC8,
VDAC8 y DVDAC. El IDAC8, con 8 bits de resolución, tiene tres rangos de corriente
variable: 2040μA, 255μA, and 31.875μA. Para producir una tensión de salida requiere de un
amplificador operacional configurado como convertidor de corriente a tensión. El VDAC8,
con 8 bits de resolución, posee dos rangos con ganancia de 4mV/bit y de 16mV/bit que
producen valores máximos de 1.020V y 4.080V respectivamente, como se muestra en la
Figura 4.8. Su impedancia de salida es alta; por lo cual dependiendo de la carga, puede
requerir de un amplificador separador, como el mostrado en la Figura 4.9, configurado en
este caso para ganancia unitaria. En el rango de 0 – 1.020 V el VDAC puede convertir a un
millón de muestras por segundo (1Msps) y en el rango de 0 – 4.080V la velocidad de
conversión baja a 250 ksps.

Figura 4.9: Esquema de convertidor DAC con amplificador operacional de salida

El DVDAC disponible en el PSoC 5LP, es un componente derivado de un VDAC8, que por


medio de la técnica llamada dithering, descrita en el punto 2.1, permite la posibilidad de
ampliar la resolución entre 9 y 12 bits. Este componente esconde al usuario la complejidad
del proceso de dithering, facilitando enormemente su uso. Al estar basado en el componente
VDAC8, posee los mismos dos valores de salida máxima de 1.020V y 4.080V, y una
impedancia de salida alta; por lo que dependiendo de la impedancia del circuito de carga,

16
requerirá eventualmente de un amplificador de salida. En la Figura 4.10 se muestra un
circuito con DVDAC de 9 bits y un amplificador separador configurado para ganancia 2. La
hoja de datos del componente DVDAC recomienda el uso de un pequeño condensador
externo de filtro para disminuir el ruido inherente al proceso de dithering. El valor de este
condensador de filtro depende: de la frecuencia de reloj; de la resolución configurada y del
rango de tensión de salida seleccionado.

Figura 4.10: Esquema de convertidor digital-analógico con dithering y amplificador de salida

Los circuitos mostrados producen una salida unipolar, cuyo máximo depende de: a) La escala
de salida del VDAC (1.020V o 4.080V); b) De la ganancia del amplificador operacional y c)
De la tensión de saturación de dicho amplificador.

4.9 ¿Cómo enviar datos desde el PSoC a una computadora?


4.9.1 En la placa 050 por el puerto RS-232
El kit 050 de Cypress tiene dos formas de comunicación hacia la PC. La más simple es utilizar
el componente UART y el puerto RS-232 como se muestra en la Figura 4.11. El único detalle
a considerar es que las conexiones de RX y TX del UART no tienen una patilla predefinida
para su ubicación; sino, que es posible utilizar cualquier patilla no especializada para ello.
Una vez definidas estas patillas, es necesario conectarlas al circuito MAX232, convertidor
de nivel TTL/RS-232. La patilla TX, nombrada como TX_1 en el PSoC, debe ser conectada
a la entrada 11 del convertidor MAX232 y la patilla RX, nombrada como RX_1, debe ser
conectada a la salida 12, también del convertidor. Estas conexiones al convertidor de nivel
MAX232 se encuentran disponibles en el conector P5 como se muestra en la Figura 4.12. La
máxima velocidad recomendada para el UART cuando conectará a una PC es de 115200 bits
por segundo (bps).

17
Figura 4.11: Diagrama del UART en el KIT 050 para transmisión por el puerto RS-232

El único detalle es que cada vez son menos las computadoras que poseen un puerto RS-232
y lo usual es que se requiera adicionalmente un adaptador de RS-232 a USB para poder
utilizar este método.

Figura 4.12: Detalle de las conexiones al convertidor TTL/RS232 y del conector P7

4.9.2 En la placa 050 por el puerto USB


El segundo método de comunicación con la PC del kit 050 de Cypress es por USB. Esto
requiere la utilización del componente USBUART mostrado en la Figura 4.13. El puerto
USB posee múltiples usos y configuraciones; pero, este componente USBUART ya está
preconfigurado para ese propósito y es identificado y enumerado por la PC como un puerto
serie. No usar para comunicaciones UART el componente USBFS; pues este es genérico y
requiere muchos detalles de configuración para convertirlo en un UART.
A diferencia del UART tradicional, que es básicamente ponga y use, el componente
USBUART es un poco más complicado en su uso. La recomendación es basarse en el
ejemplo USBFS_UART disponible con el PSoC Creator y construir la aplicación alrededor
de éste.

18
Figura 4.13: Componente USBUART del kit 050

La placa del kit 050, como se muestra en la Figura 4.14, posee dos conectores mini USB-B,
el de la derecha, J1, es para programar y el de la izquierda, J2, es para comunicaciones con
el componente USBUART. Este componente tiene predefinido el uso de las patillas P15[6]
y P15[7] que se encuentran directamente conectadas al conector J2. Lo recomendable, para
no tener que estar conectando y desconectando cables, es utilizar dos cables USB y en una
aplicación de emulación de consola, tal como HyperTerminal, PuTTy o similar y seleccionar
el puerto identificado por la PC como el puerto comunicaciones del PSoC.

Figura 4.14: Detalle de los puertos USB del kit 050

4.9.3 En la placa 059 por la conexión de programación del KITPROG


La placa del kit 059, posee dos PSoC y es separable. La parte pequeña es el programador y
es denominado KITPROG; la parte grande es denominada TARGET y es típicamente para
el cual se desarrolla la aplicación. Ambas partes se encuentran unidas por varias pistas de
conexión, cinco de las cuales pueden ser fácilmente conectadas, para seguir programando el
TARGET, después de separadas ambas partes. Cada parte posee un puerto USB. La del
programador, que se conecta directamente a un puerto USB-A de la PC durante la
programación y la del TARGET, que dispone de un conector micro USB-B.
El KITPROG está conectado además por otras cuatro líneas al TARGET; estas no son tan
visibles ni tan fáciles de reconectar, como las de programación, una vez separadas ambas
partes. Dos de estas líneas sirven como adaptador serie-USB para comunicaciones entre la
PC y el TARGET; por lo que se recomienda no separar las placas si se desea utilizar este
mecanismo de comunicación. Si ya las separó, entonces debe reconectar las conexiones
separadas del KITPROG al UART del TARGET, a través de 3 cables, como se muestra en
la Figura 4.17.

19
Figura 4.15: El kit 059 de Cypress

La forma de utilización consiste en colocar un componente UART en el programa de


aplicación desarrollado para el TARGET, como se muestra en la Figura 4.16, y conectar su
entrada RX a la patilla P12[6]/UART_RX y su salida TX a la patilla P12[7]/UART_TX, las
cuales se encuentran de forma predefinida conectadas al KITPROG [15]. En la Tabla 4.2 se
muestran las velocidades aceptadas por el convertidor serie a USB del KITPROG [14].
Tabla 4.2: Velocidades aceptadas por el puente serie-USB del KITPROG en bps

1200 2400 4800 9600 19200 38400 57600 115200

Figura 4.16: Conexiones del componente UART conectado para utilizar el KITPROG como
convertidor a USB

Figura 4.17: Restablecimiento de conexiones para el UART entre el KITPROG y el TARGET

4.9.4 En la placa 059 por el puerto USB del TARGET


Esta forma de comunicación es similar a la descrita para el kit 050 en el apartado 4.9.2. La
única diferencia es que el conector para comunicaciones es micro USB-B y la programación
se realiza a través la conexión USB del KITPROG.

20
4.9.5 Placa 042 Pioneer kit
El PSoC 4 posee dos tipos de UART: a) Los obtenidos a través del componente SCB, que
solamente pueden conectar el par (RX, TX) a las patillas (P0[4], P0[5]) o (P3[0], P3[1]) o
(P4[0], P4[1]) respectivamente; b) Un UART estándar con UDB, que puede conectar el par
(RX, TX) a cualquier patilla disponible. Las patillas mostradas en la Figura 4.18, para un
UART estándar, fueron escogidas de entre esos tres conjuntos por compatibilidad con los
UART vía SCB y para hacer juego con la Figura 4.19. Las patillas y el componente pueden
nombrarse de cualquier otra forma, mientras se conecten como se muestra.

Figura 4.18: Conexiones del componente UART de un PSoC 4 en el kit 042

El kit 042 también posee un KITPROG, solamente que éste no es separable; sino, que se
encuentra dentro de la única placa del kit. Su funcionamiento es similar al descrito para el
KITPROG del kit 059 y también puede ser utilizado como convertidor serie-USB [13]. Para
esto, deben de realizarse conexiones entre las patillas del UART en el PSoC 4 al KITPROG.
La salida Tx del PSoC 4 debe conectarse a la patilla 9 en el conector J8, llamada P5LP12_6;
y la entrada Rx del PSoC 4 respectivamente a la patilla 10, llamada P5LP12_7. La Tabla 4.2
muestra las velocidades aceptadas por el KITPROG.

Figura 4.19: Conexiones para utilizar el KITPROG como puente serie-USB en el kit 042

4.9.6 En cualquier placa vía Bluetooth


Ponga un bloque de UART y externamente conecte un convertidor serie-Bluetooth tal como
el HC-06.

21
4.10 ¿Cómo comunicar un Arduino con un PSoC?
4.10.1 De manera analógica desde el Arduino al PSoC
Un Arduino no posee un convertidor de digital a analógico (DAC); pero, puede producir con
la función analogWrite() una señal de PWM, con una resolución de 8 bits, a una
frecuencia máxima de 31250 o 62500 Hz, dependiendo de la patilla utilizada, que luego de
filtrada en paso bajo podría ser equivalente a la salida de un verdadero DAC. Vea además el
apartado 3.2 para conocer como aumentar la resolución del PWM del Arduino UNO.
Para comunicar el Arduino con el PSoC, simplemente habría que convertir esa salida de
PWM filtrada, de analógico a digital, con uno de los convertidores ADC disponibles en el
PSoC, utilizando una resolución adecuada para la producida por el Arduino.
4.10.2 De manera analógica desde el PSoC al Arduino
El PSoC posee varios tipos de convertidores de digital a analógico, como se describe en el
apartado 4.8, con resoluciones de 8 – 12 bits. En el Arduino se puede utilizar el convertidor
de analógico a digital, con una resolución de 10 bits para convertir una señal producida por
el PSoC. Solamente debe considerarse que, para esta aplicación, producir una salida en el
PSoC con más de 10 bits es un desperdicio de tiempo y recursos del PSoC.
4.10.3 De manera digital
4.10.3.1 En serie con UART
Una placa de Arduino tiene al menos un UART físico; pero también puede emular un UART
por software. El Arduino puede comunicarse a velocidades tan altas como 1Mbps cuando
tiene un reloj de 16 MHz. Un PSoC tiene un UART que permite comunicación hasta 4 Mbps.
Para comunicar un Arduino con un PSoC utilizando los UART de cada dispositivo, debe
configurarse una velocidad de comunicación compatible para ambos dispositivos y hay que
conectar de manera cruzada las salidas y entradas de los UART; esto es: la salida Tx del
PSoC debe conectarse a la entrada Rx del Arduino y viceversa, de forma similar a como se
muestra en la Figura 4.17 y en la Figura 4.19 para la conexión serie entre dos PSoC.
4.10.3.2 Con PWM
Esta sería una variante del apartado 4.10.1; pero, sin necesidad de filtrar en paso bajo la salida
PWM del Arduino. En el PSoC se puede configurar un temporizador en modo de captura,
como se muestra en la Figura 4.20 y de esta forma puede ser utilizado para medir el ancho
de un pulso o la duración de eventos. Se debe utilizar un reloj adecuado para la resolución
deseada de la medición y debe seleccionarse también un periodo adecuado para la frecuencia
de la fuente de señal. Por ejemplo con un reloj de 8MHz se tendría una resolución de 125 ns,
que permitiría resolver los 256 pasos en un periodo de 32 µs, para un Arduino cuya frecuencia
de PWM sea de 31250 Hz.

22
Figura 4.20: Temporizador del PSoC usado para medir la duración de eventos

En la Figura 4.21 puede verse la configuración necesaria para medir el ancho de pulsos al
hacer que el temporizador capture el valor del contador en cualquiera de los flancos de la
señal de entrada, subida o bajada, y que interrumpa cada dos capturas, guardando en un
registro FIFO los datos de cada captura, de forma tal que cada periodo interrumpe una vez y
se puede tomar la diferencia entre los valores de captura para determinar el ancho del pulso
con una resolución de 125 ns en este caso.

Figura 4.21: Configuración de un temporizador de PSoC para medir el ancho de pulsos.

4.11 ¿Cómo usar un MPU6050 en un PSoC?


4.12 ¿Cómo medir la tensión de alimentación del PSoC 5LP?

23
Conocer el valor de la tensión de alimentación de PSoC es importante en aplicaciones que
funcionan con batería y en las cuales, dependiendo del estado de carga de éstas, algunas
funciones podrían alterarse. Al conocer la tensión de alimentación, el sistema puede tomar
las previsiones y ajustes necesarios para, por ejemplo, mantener los resultados dentro de los
valores esperados ante las fluctuaciones de la tensión de alimentación.
Cada kit de PSoC es diferente en cuanto a los componentes pasivos conectados a las patillas
externas de los ADC, así que habrá algunos detalles diferentes respecto a las configuraciones
permitidas para el ADC; pero, la base, como se muestra en la Figura 4.22, es colocar en la
entrada del ADC una referencia VDDA y seleccionar el filtrado de la tensión de referencia,
para minimizar el ruido que podría provenir de motores y otros componentes que se
alimentan también de VDDA y podrían afectar la medición.

Figura 4.22: Referencia VDDA en la entrada del ADC para medir la tensión de alimentación

En la Figura 4.23 se muestran los aspectos principales a configurar en el ADC Delta-Sigma


para poder medir una tensión mayor o igual a VDDA, hasta de 6.144V:

 Rango de 0 a 6Vref, o sea de 0 a 6.144


 Ganancia del amplificador interno = 1
 Modo del amplificador interno "Rail to Rail"
 Selección de Vref interna con filtrado en la patilla P0.3 (kit 059)
 Vref = 1.024V

El modo de conversión se ha dejado en el modo 2-Continuos a 10k muestras por segundo por
simplicidad; pero, no se necesita una velocidad de conversión tan alta y en el caso de utilizar
un selector, para medir varios canales, el modo de conversión debe ser 1 Multi sample y en
lugar de la lectura del ADC con la combinación IsEndConversion y GetResult16(), debe
utilizarse Read16() que realiza todo el proceso completo desde: iniciar la conversión; esperar
por el final de la conversión; retornar el valor leído y detener la conversión.

24
Figura 4.23: Configuración del ADC para leer valores iguales o mayores a VDDA

Un ejemplo del código utilizado para medir y enviar el valor de la tensión de alimentación,
en milivoltios, a través del UART, se muestra a continuación:

void MeasureBattery(void)
{
int16 adcResult;
int32 mvolts;
char strMsg[16]={}; // output UART buffer

ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT);
adcResult = ADC_DelSig_1_GetResult16();
/* Convert input voltage to milivolts */
mvolts = ADC_DelSig_1_CountsTo_mVolts(adcResult);
/* Transmit battery level in milivolts */
sprintf(strMsg,"BattLevel: %ld \r\n",mvolts);
UART_1_PutString(strMsg);
}

25
4.13 ¿Cómo crear un nuevo componente en PSoC?

26
Capítulo 5: Mediciones
5.1 ¿Cómo calibrar las puntas de prueba de un osciloscopio?
5.2 ¿Cómo medir señales bipolares con un ADC unipolar?
Para medir una señal bipolar con un sistema unipolar, primero se debe de acondicionar la
señal a medir cambiándola de bipolar a unipolar. Esto se logra agregando un valor positivo a
la señal. Este valor positivo es típicamente la mitad del rango de la señal bipolar; esto es: si
la señal de entrada bipolar es de ±10 V, entonces se le agregan +5 V. Como una señal así
transformada tiene una variación entre 0 V y 20 V, lo cual normalmente está fuera del rango
de entrada de la mayoría de los convertidores ADC, habrá también que atenuar esta señal a
los niveles aceptados por el ADC. Posteriormente se convierte la señal de analógica a digital
con un ADC en modo diferencial, dónde la entrada negativa del ADC se ubica en una
referencia de tensión que es típicamente la mitad del rango de conversión, de tal forma que
los valores mayores a esta referencia serán tomados como positivos y los valores inferiores
a la referencia serán interpretados como negativos.

Figura 5.1: Acondicionamiento de señal bipolar para medición con ADC unipolar

En la Figura 5.1 se realizan las dos primeras operaciones del acondicionamiento, conversión
a unipolar y escalado (atenuación) en una misma operación en el Opamp inversor con una
ganancia de -0.2 para la entrada inversora y de 1.2 para la entrada no inversora. Esto produce
una señal de [+4.048 V +0.048 V] ante una entrada de [-10 V +10 V]; esto es:

27
𝐹𝐸𝐸𝐷𝐵𝐴𝐶𝐾 = 1.707 ∗ 1.2 − 𝑉𝑖𝑛 ∗ 0.2
Efectivamente invirtiendo el rango de entrada y atenuándolo 5 veces.
En el ADC la conversión producirá una salida que responde a la ecuación:

𝐶𝑂𝑁𝑉𝐸𝑅𝑆𝐼Ó𝑁 = 𝐹𝐸𝐸𝐷𝐵𝐴𝐶𝐾 − 2.048 = [−2 𝑉 … + 2𝑉] con 𝑉𝑖𝑛 = [+10 … − 10]


Por lo que habrá que producir una inversión a través del programa, ya que para valores
positivos en la entrada AN_1 el convertidor producirá valores negativos y viceversa.

5.3 ¿Cómo medir una señal bipolar que tiene superpuesta un valor de
CD positivo?
Esto es exactamente lo que se hace en el punto 5.2, donde se ha superpuesto a propósito un
valor positivo a una señal de entrada bipolar para hacerla unipolar y poder medirla con un
ADC unipolar. En ese caso, se escogieron los valores de las ganancias y tensiones agregadas
para hacer una transformación lineal del rango de entrada hacia el rango del ADC.
Pero, existen otros casos, en los cuales la señal original ya posee un valor CD agregado, como
por ejemplo, en un sensor cuya salida es proporcional a la tensión de alimentación de este, y
que produce, en ausencia de la magnitud medida, una salida de aproximadamente ½ VDD.
En este caso, el ADC debe utilizar como referencia interna la mitad de VDD. En un caso más
general, hay que restar, de la señal, ese valor medio superpuesto: a) Ya sea por programa
después de la conversión con un ADC no diferencial; o b) Utilizando una tensión de
referencia adecuada en la entrada negativa de un ADC diferencial como se muestra en las
Figura 5.3a Figura 5.3b respectivamente.

Ángulo
3.00E+00

2.50E+00

2.00E+00

1.50E+00

1.00E+00

5.00E-01

0.00E+00
0 2 4 6 8 10 12 14 16 18 20

Figura 5.2: Señal de ángulo superpuesta sobre un valor CD

28
a) Modo común con resta posterior b) Modo diferencial con referencia
Figura 5.3: Formas de convertir una señal superpuesta sobre un valor CD

5.4 ¿Cómo medir el periodo de muestreo al cual se ejecuta un


algoritmo de control digital?
Al inicio del proceso de control, exactamente antes de muestrear la variable a controlar, debe
poner en alto una patilla del dispositivo programable con el cual está implementando el
control digital y al final del proceso, exactamente después de haber producido la salida de la
acción de control, debe colocar esa patilla en bajo. Con esto producirá una señal periódica
que puede ser vista con el osciloscopio. El periodo de esa señal es el periodo de muestreo.
Puede verificar si la señal tiene el periodo establecido para el control digital y además si éste
es constante. Ante cualquier comportamiento no esperado, debe corregir el problema
detectado. Según la teoría de control automático en tiempo discreto, el periodo debe ser
constante e igual al utilizado a la hora de modelar la planta y en el diseño del controlador.
Siempre es recomendable utilizar interrupciones para garantizar la ejecución del algoritmo
de control digital con un periodo constante, evite usar funciones como delay() ya que estas
bloquean la ejecución de cualquier otro proceso mientras se ejecutan. En la Figura 5.4 se
puede observar una señal producida de la forma descrita antes y se puede leer que el periodo
es de 5ms.

Figura 5.4: Oscilograma para medir el periodo de muestreo

29
5.5 ¿Cómo medir el tiempo que dura el procesamiento de un
algoritmo de control?
Proceda como en la pregunta anterior para producir la forma de onda periódica. En esta señal
el tiempo en alto, , es el tiempo que dura el algoritmo de control en ser ejecutado. Según la
teoría de control automático en tiempo discreto, para que un sistema híbrido de control se
comporte como cuasi-continuo, el tiempo entre la toma del valor de la variable controlada, o
muestreo, y la salida de la acción de control al final del algoritmo de control debe ser menor
o igual a una décima del periodo de muestreo, Ts. La Figura 5.5 muestra una ampliación del
tiempo en alto de la señal periódica de la Figura 5.4 donde se puede leer que el tiempo de
ejecución del algoritmo es de 460us con lo que se puede verificar el cumplimiento de la regla
dada por la ecuación.
𝑻𝒔
𝝉 ≤
𝟏𝟎

Figura 5.5: Medición del tiempo de ejecución del algoritmo de control digital

5.6 ¿Cómo puedo optimizar mi algoritmo de control si tarda más de lo


esperado?
Hay varias formas de optimizar el tiempo de ejecución de un algoritmo de control:
a) Utilice aritmética de punto fijo en lugar de aritmética de punto flotante. Las operaciones
en aritmética de punto flotante, cuando el dispositivo no posee un coprocesador matemático
especializado, tardan mucho más en ser ejecutadas que las operaciones en punto fijo.
b) Entre la lectura de la variable a controlar y la salida de la acción de control solamente
ponga lo que estrictamente conduce a producir esa salida de la forma más rápida. Deje las
tareas de preservar o copiar variables; las acciones antiwindup y las asignaciones
innecesarias, para después de haber sacado la acción de control.
c) Limite las operaciones para el cálculo de la acción de control a aquellas que utilizan los
valores actuales de las variables más el valor pre-calculado, p(k), utilizando los valores
anteriores de las variables. Después de haber sacado la acción de control, realice el precálculo

30
parcial de la acción de control con los valores anteriores de las variables que han sido
preservados.
Tabla 5.1: Comparación de algoritmo sin y con precálculo

No optimizado Optimizado con precálculo


; Cada interrupción del temporizador ; Cada interrupción del temporizador
label proc_PID label proc_PID
in(rk); leo el valor de consigna in(rk); leo el valor de consigna
in(yk); leo el valor de la salida in(yk); leo el valor de la salida
ek = rk - yk; obtengo el error ek = rk - yk; obtengo el error
mk = mk_1 + A*ek + B*ek_1+ C*ek_2; mk = pk + A*ek;
mk_1 = mk; out(mk);
ek_2 = ek_1; pk = mk + B*ek + C*ek_1;
ek_1 = ek; ek_1 = ek;
out(mk); end;
end;
t

t
En la Tabla 5.1 se comparan dos algoritmos para un control. El algoritmo no optimizado
introduce un tiempo relativamente grande entre la obtención del error actual, llamado ek, y
la puesta en la salida de la acción de control, nombrada mk. Ese tiempo incluye el cálculo de
la ecuación de diferencias con tres sumas y tres multiplicaciones más tres asignaciones para
preservar los valores de la salida y del error. El algoritmo optimizado, que utiliza precálculo,
reduce notablemente este tiempo al de una operación de suma y una de multiplicación. Si
despreciamos el tiempo que toman las asignaciones, este algoritmo reduce a la tercera parte
el tiempo entre la obtención del error y la salida de la acción de control. En todo caso, siempre
se realizan las tres sumas y las tres multiplicaciones; pero, ahora la ruta crítica es mucho más
corta, pudiendo el algoritmo optimizado satisfacer que 𝜏 ≤ 𝑇 /10.
d) Si la dinámica del sistema a controlar lo permite, aumente el periodo de muestreo para
cumplir con la regla expresada en la ecuación anterior, realizando también el recálculo del
modelo de la planta y del controlador.
e) Si la duración del algoritmo de control digital es una fracción del periodo de muestreo, T S,
que se aproxima a la unidad, incorpore este retardo fraccional de T S al modelo de la planta
utilizando la transformada Z modificada y rediseñe su controlador tomando en cuenta este
retardo. También puede retardar la salida de la acción de control hasta el inicio del siguiente
ciclo de cálculo del algoritmo de control con lo cual el retardo introducido para la acción de
control será de un periodo de muestreo completo (z-1). La planta debe de ser modificada
incorporando este retardo y debe recalcular el controlador tomando en cuenta este retardo,
por ejemplo, utilizando un predictor de Smith.

5.7 ¿Cómo medir la posición angular de un eje con un codificador


óptico incremental?
Existen varios tipos de codificadores ópticos:

31
a) Los absolutos, que proveen directamente el valor del ángulo en una palabra de 8, 10,
12 bits o más; y dónde el valor leído se corresponde siempre con el ángulo medido,
aún si el sensor se ha apagado momentáneamente y vuelto prender. Estos tienen un
disco codificado, con tantos círculos concéntricos como bits se requieran. Cada
círculo, tiene ranuras, huellas o marcas que producen, al leerlo ópticamente, un patrón
alterno de unos y ceros. El código utilizado en los patrones circulares no es
necesariamente el código binario; pues este presenta cambios de varios bits al contar
secuencialmente. Un ejemplo simple de cuatro bits, cuando se cambia de 0111 (7) a
1000 (8) y viceversa, cambian todos los bits, lo cual puede producir que si no todos
cambian simultáneamente, la salida del codificador pase por varios estados con
valores aleatorios al conmutar entre dos códigos adyacentes. Se utiliza mejor un
código gray, en el cual entre dos códigos adyacentes solamente cambia un bit. Bueno
estos codificadores son costosos y dependiendo del número de bits, muy
voluminosos. La Figura 5.6 muestra los discos de dos tipos de codificadores.

Figura 5.6: Discos de codificadores ópticos

b) Los incrementales, que no tienen ningún tipo de memoria, esto es solo pueden
registrar los cambios de posición del disco mientras están energizados. Por lo que no
hay una relación entre el estado del codificador y la posición angular del disco. Estos
codificadores requieren de un proceso de calibración o reposición a cero u otro valor
convenido, cada vez que se encienden. Algunas impresoras utilizan codificadores
incrementales lineales para determinar la posición del carro de impresión. Los discos
de los codificadores incrementales, como el de la derecha en la Figura 5.6 poseen un
único patrón alternado, usualmente en la periferia del disco; aunque hay algunos que
tienen 3 o tres, sirviendo uno de ellos, típicamente el más interno, como índice
absoluto de posición angular del disco para cada revolución. El codificador más usado
para este tipo de discos es el de cuadratura que produce dos señales con un desfase
eléctrico de 90° llamadas A y B que producen un código Gray, como se muestra en
la Figura 5.7. Al girar el disco en el sentido del reloj, la señal A adelanta a la señal B
y cuando el disco gira en sentido contrario al reloj, A atrasa a B. De esta forma, al
decodificar estas señales, se puede determinar la dirección de giro y la posición
relativa. Existen 4 estados por cada marca, o perforación del disco, lo que permite
contar hasta cuatro pulsos por cada ciclo de las señales A y B. Los codificadores se
seleccionan por la cantidad de ranuras o ciclos de las señales A y B que produce por
cada revolución, denominado CPR (Ciclos Por Revolución).

32
CCW CW
AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB AB
10 11 01 00 10 11 01 00 10 11 01 00 10 11 01 00

Index

Figura 5.7: Señales de un codificador incremental en cuadratura

Para determinar la posición angular de un eje utilizando un codificador incremental en


cuadratura de debe de utilizar un decodificador adecuado. Existen circuitos integrados
especializados para esto; pero, la decodificación, a muy bajas velocidades, también se puede
hacer en software. En todo caso, todos los decodificadores se implementan una máquina de
estados y un contador incremental/decremental de 8, 16 o 32 bits. La decodificación se puede
hacer en 1x, 2x y 4x. El resultado de la decodificación se conoce como PPR (Pulsos Por
Revolución) y produce hasta 4 cuentas por ciclo. La Figura 5.8 muestra el diagrama de la
máquina de estados implementada en modo 1x del decodificador de cuadratura disponible en
un PSoC 5LP de la compañía Cypress.

33
Figura 5.8: Implementación de la máquina de estados del decodificador de cuadratura de un
PSoC de Cypress en modo 1x.

Para medir desplazamiento angular de forma absoluta con un codificador incremental en


cuadratura es necesario establecer una referencia absoluta al iniciar el sistema y a partir de
allí medir el desplazamiento relativo: 𝜃 = 𝜃 + ∆𝜃.
Esta referencia absoluta puede ser colocando el eje en una posición conocida con ayuda de
sensores de fin de carrera, o con ayuda de la señal de index. Es preferible que el valor
absoluto de esta posición se establezca en 0. La distancia angular instantánea en radianes,
con el desplazamiento inicial en cero, se puede calcular a partir de las cuentas del registro
del decodificador de cuadratura de la siguiente manera, donde Nx puede ser el factor 1, 2 o
4, según se haya configurado el decodificador y n es la relación de transformación de la caja
reductora, si hubiese, y en el caso de no estar midiendo el desplazamiento en el lado del eje
de salida de dicha caja. Si no hay caja reductora o aun existiendo ésta, estamos midiendo
directamente en el eje de salida, entonces n = 1.
𝑐𝑢𝑒𝑛𝑡𝑎𝑠( ) 𝑐𝑢𝑒𝑛𝑡𝑎𝑠( )
𝜃( ) = ∗ 2𝜋 = ∗ 2𝜋 [𝑟𝑎𝑑]
𝑛 ∗ 𝑃𝑃𝑅 𝑛 ∗ 𝐶𝑃𝑅 ∗ 𝑁𝑥
5.8 ¿Cómo medir la velocidad angular de un eje con un codificador
óptico incremental?
Como se describió en el punto 5.7, las señales en cuadratura producidas por el codificador se
decodifican en uno de cuatro modos, 1x, 2x y 4x. Si se lee el valor de los contadores de
posición a intervalos regulares, digamos dentro de una interrupción de hardware producida
por un temporizador, entonces se puede obtener una aproximación a la velocidad instantánea

34
calculando la diferencia entre dos valores consecutivos de distancia. Para medir velocidad no
se requiere conocer el valor absoluto de la posición angular.

∆𝜃 𝜃( ) − 𝜃( ) 𝜃( ) − 𝜃( ) 𝑟𝑎𝑑
𝜔( ) ≅ = =
∆𝑡 𝑡( ) − 𝑡( ) 𝑛 ∗ 𝐶𝑃𝑅 ∗ 𝑁𝑥 𝑇 ∗ 𝑛 ∗ 𝐶𝑃𝑅 ∗ 𝑁𝑥 𝑠

𝑐𝑢𝑒𝑛𝑡𝑎𝑠( ) − 𝑐𝑢𝑒𝑛𝑡𝑎𝑠( ) 𝑟𝑎𝑑


𝜔( ) ≅
𝑇 ∗ 𝑛 ∗ 𝐶𝑃𝑅 ∗ 𝑁𝑥 𝑠
Tome en cuenta Nx, el factor 1, 2 o 4 de la decodificación en cuadratura para escalar
adecuadamente la velocidad del eje. Si se trata de medir la velocidad de giro, en los casos en
los que exista una caja reductora y si no está midiendo en el eje de salida de la caja, tome
también en cuenta la relación de transformación n de la caja reductora.
Como se está utilizando una aproximación simple para la derivada, y además la derivada
amplifica el ruido, es conveniente filtrar en pasabajas el resultado de velocidad. Evalúe para
cada caso si esto es necesario y de serlo, seleccione un filtro digital de primer o segundo
orden para realizar el filtrado. En la Error! Reference source not found. se muestran dos
filtros simples en tiempo continuo y en tiempo discreto los cuales son adecuados para filtrar
la velocidad después de derivar. El parámetro T es el periodo de muestreo en segundos, el
cual debe ser igual al periodo de muestreo de la señal original de posición y N es la frecuencia
del filtro en radianes/s, (polo para el filtro de primer orden; n o frecuencia natural no
amortiguada, para el filtro de segundo orden), que debe ser escogida para atenuar
suficientemente el ruido.
Tabla 5.2: Filtros de primer y segundo orden para el filtrado de la velocidad obtenida por
medio de una derivada

Primer orden Segundo orden

Tiempo 𝑌(𝑠) 𝑁 𝑌(𝑠) 𝜔


= =
continuo 𝑈(𝑠) (𝑠 + 𝑁) 𝑈(𝑠) (𝑠 + 2𝜁𝜔 𝑠 + 𝜔 )

e( − e(
∗ ) ∗ )
(1 − 𝜔 𝑇)
Tiempo 𝑌(𝑧) (1 − e( ∗ )
) 𝑧+
= 𝑌(𝑧) (1 − (1 + 𝜔 𝑇)e( ∗ ))
discreto 𝑈(𝑧) (𝑧 − e( ∗ )) =
𝑈(𝑧) (𝑧 − e( ∗ ))

Como la lectura de posición con el decodificador de cuadratura es digital y el cálculo para


obtener la velocidad también es digital, el procesamiento del filtro también será digital, por
lo que la función de transferencia del filtro seleccionado debe ser convertida a una ecuación
de diferencias, la cual debe ser evaluada periódicamente dentro del proceso de atención de
las interrupciones del control digital.

35
Como estos filtros se utilizan comúnmente para filtrar una derivada, se puede combinar
ambos, el derivador y el filtro como se muestra en la Tabla 5.3 y en la Tabla 5.4. En estos
dos casos se ha hecho la transformación a tiempo discreto utilizando el método trapezoidal o
de Tustin, ya que con este se evita el cálculo de exponenciales.
Tabla 5.3: Filtro de primer orden y derivador con filtro de primer orden

Dominio/Función Filtro simple Derivador con filtro

𝑌(𝑠) 𝑁 𝑌(𝑠) 𝑠𝑁
Tiempo continuo = =
𝑈(𝑠) (𝑠 + 𝑁) 𝑈(𝑠) (𝑠 + 𝑁)

Tiempo discreto 𝑁𝑇 2𝑁
𝑌(𝑧) 𝑁𝑇 + 2 (𝑧 + 1) 𝑌(𝑧) 𝑁𝑇 + 2 (𝑧 − 1)
= =
𝑈(𝑧) 𝑁𝑇 − 2 𝑈(𝑧) 𝑁𝑇 − 2
(Tustin) 𝑧+ 𝑧+
𝑁𝑇 + 2 𝑁𝑇 + 2
Amplitud [rad]
Velocidad [rad/s]
Velocidad [rad/s]

Figura 5.9: Comparación entre la derivada simple y la derivada filtrada

En la Figura 5.9 se compara la estimación de la velocidad de la elevación (pitch) del


helicóptero 2DoF obtenida con la derivada simple y con la derivada filtrada por un filtro de
36
segundo orden. Se puede apreciar, en el segundo caso, la atenuación del ruido de la derivada
que se consigue con el filtro.
Tabla 5.4: Derivada con filtro de segundo orden para obtener la velocidad sin ruido

Tiempo 𝑌(𝑠) 𝑠𝜔
=
continuo 𝑈(𝑠) (𝑠 + 2𝜁𝜔 𝑠 + 𝜔 )

Tiempo 2𝑇𝜔
( 𝑧 − 1)
discreto 𝑌(𝑧) (𝑇 𝜔 + 4𝜁𝑇𝜔 + 4)
=
𝑈(𝑧) (2𝑇 𝜔 − 8) (𝑇 𝜔 − 4𝜁𝑇𝜔 + 4)
(Tustin) 𝑧 + 𝑧 +
(𝑇 𝜔 + 4𝜁𝑇𝜔 + 4) (𝑇 𝜔 + 4𝜁𝑇𝜔 + 4)

5.9 ¿Cómo medir con un sensor conectado en puente de Wheatstone?


5.10 ¿Cómo medir temperatura con un RTD?
5.11 ¿Cómo medir la corriente de consumo de un dispositivo?
5.12 ¿Cómo eliminar el offset en las mediciones?

37
Capítulo 6: Conversiones
6.1 ¿Cómo medir adecuadamente una señal analógica?
6.2 ¿Cómo escoger el ancho de palabra de un convertidor ADC?
6.3 ¿Cómo limitar en banda una señal analógica?
6.4 ¿Cómo diseñar un filtro antisolapamiento (antialiasing) analógico?
6.5 ¿Cómo reducir la frecuencia de muestreo de una señal ya
obtenida?
6.6 ¿Cómo aumentar la frecuencia de muestreo de una señal ya
obtenida?
6.7 ¿Cómo producir salidas bipolares con un DAC unipolar?
Para producir una salida analógica bipolar con un DAC unipolar se requiere un circuito capaz
de: a) Cambiar el nivel de la señal unipolar (hacia negativo) y b) Amplificar la señal de salida
a los niveles adecuados y producir la corriente de salida suficiente para la aplicación.

Figura 6.1: Circuito para producir una salida bipolar con un DAC unipolar

El circuito mostrado en la Figura 6.1 posee dos amplificadores externos y aunque en la


imagen no se muestra, estos amplificadores se alimentan con una fuente de tensión bipolar,
con un par de voltios más que la máxima salida deseada (cuánto más depende de la tensión
de saturación del amplificador usado). El amplificador U_2 es un simple inversor de ganancia
-2, que escala la tensión producida por el amplificador U_1 y puede conducir unos 25 mA.
39
El amplificador U_1 es el cambiador de nivel. En su entrada no inversora se ha conectado
una tensión de desplazamiento (offset) producida con un DAC auxiliar. La patilla inversora
de U_1 recibe la señal de salida del DAC unipolar, cuya alta impedancia se ha corregido con
ayuda del OpAmp conectado como seguidor. Para este circuito se recomiendan resistencias
de la serie E96 (1% de tolerancia) o mejor.
200 200
𝑆𝑎𝑙𝑖𝑑𝑎 = −2 𝐺𝑂𝐹𝐹𝐴 ∗ 1 + − 𝑉𝑂𝐴 ∗
59 59
Con los valores mostrados en el circuito, suponga que la tensión VOA oscila sinusoidalmente
entre 0 y 2.95V, mientras la tensión GOFFA se mantiene en 1139mV, la salida de U_1 tendrá
una tensión que variará entre ±5V, con una fase de 180° respecto a VOA; mientras que a la
salida de U_2 la tensión será de ±10V, en fase con VOA, toda vez que U_1 y especialmente
U_2 estén alimentados con una tensión de ±12V a ±15V. En la Figura 6.2 se muestran las
formas de onda simuladas para este circuito con las condiciones descritas.

Salida
Intermedia
DAC

Figura 6.2: Simulación del circuito de la Figura 6.1

40
Capítulo 7: Ruido
7.1 ¿Cómo reducir la posibilidad de que se induzca ruido en el cable
de un sensor?
Generalmente el ruido actúa en modo común sobre el par de conductores que transmiten la
señal de un sensor, por lo que se puede evitar la inducción del ruido de varias maneras:
a) Utilizando un cable blindado. Este es un tipo de cable con un forro de malla que se
conecta a la referencia solamente en un extremo de señal del cable para evitar el
problema de diferentes potenciales de tierra. Este conductor no conduce corriente. La
malla bloquea el ruido de modo común inducido en los conductores que van en el
interior del cable y conduce cualquier ruido inducido a tierra.
b) Transmitiendo en modo diferencial. Si se transmite con un solo cable referido a
tierra, la transmisión es susceptible a ruido de la conexión común de tierra. En una
transmisión diferencial, el receptor mide la diferencia de tensión entre las dos
entradas, mientras éstas se mantengan dentro del rango de modo común. Esto es
independiente del potencial de la tierra lo que hace este método inmune al ruido. La
fuente de ruido actúa sobre ambos cables en modo común, induciendo ruido de la
misma polaridad en ambos cables; pero, cuando la diferencia se realiza la diferencia,
el ruido se elimina.
c) Utilizando pares trenzados de cable para la transmisión. En una transmisión
balanceada, un cable conduce la corriente en una dirección durante todo el trayecto;
mientras que el otro lo hace en sentido contrario. En principio la tensión inducida en
cada cable es de modo común, esto es tiene la misma polaridad en cada cable y en el
extremo del cable estas dos tensiones se deberían de cancelar. El problema existe
cuando la fuente de interferencia está más cerca de uno de los cables que del otro
durante todo el camino. En este caso no se cancelarían las tensiones inducidas en
ambos cables. Un par trenzado va alternando periódicamente la exposición de cada
uno de los dos cables a la fuente de interferencia haciendo que para cada giro de la
trenza, sobre un mismo cable, cambie la polaridad de la tensión inducida por lo que
la suma algebraica de tales tensiones al final se aproxima a cero en cada cable.
d) Utilizando corriente y no tensión para la trasmisión [8]. En la transmisión de
señales con tensión, las impedancias de carga son típicamente altas en el receptor.
Una pequeña corriente de ruido inducida producirá grandes variaciones debidas al
ruido en la tensión en el receptor. Al utilizar corriente para transmitir la señal de un
sensor se debe tener una baja impedancia en los extremos del cable para mantener las
tensiones de trabajo dentro de límites. Esto significa que las corrientes inducidas ser
reducen debido a la baja impedancia en el receptor y además la corriente de la señal
es muchas veces más grande que la corriente en un sistema de transmisión por tensión.
Por otro lado, la corriente es siempre la misma en un circuito serie, no se degrada
como si lo hace la tensión al recorrer cables largos; por lo que la relación S/N en un
lazo de corriente es mejor. Es estándar, desde 1950, para transmisión de señales en
sistemas de control es el lazo de corriente de 4-20mA.

41
7.2 ¿Cómo reducir la inducción de ruido al transmitir señales?
7.2.1 Modo diferencial
7.2.2 Modo unipolar
7.2.3 Tierras de por medio

7.3 ¿Cómo reducir el ruido inducido en los cables de alimentación CD


de un circuito?
7.4 ¿Cómo reducir la posibilidad de inducir ruido en otro circuito?
7.5 ¿Cómo evitar el ruido en un circuito impreso?
7.6 ¿Cómo evitar que el ruido producido por motores u otros
elementos afecte un sistema de control?
7.7 ¿Cómo reducir el ruido de una señal después de muestreada?
7.8 ¿Qué es un filtro de media móvil?
Un filtro media móvil es un caso particular de un filtro FIR en el que todos los coeficientes
tienen el mismo valor, y este es 1/N, donde N es el número de etapas del filtro. El número de
etapas puede ser par o impar. El orden n del filtro es 𝑛 = (𝑁 − 1). La forma no causal del
filtro, en el dominio del tiempo discreto, que podría utilizarse cuando las muestras necesarias
ya se encuentran almacenadas en memoria, se muestra a continuación:

1
𝑦(𝑘) = 𝑥(𝑘 − 𝑖)
𝑁

En un sistema en tiempo real, donde las muestras se van adquiriendo una por una, debe
utilizarse la forma causal, la cual solamente requiere datos actuales o pasados. La forma
causal expresada de manera extendida es:
𝑥(𝑘 − 𝑁 + 1) + 𝑥(𝑘 − 𝑁 + 2) + ⋯ + 𝑥(𝑘 − 1) + 𝑥(𝑘)
𝑦(𝑘) =
𝑁
El filtro de media móvil es un filtro pasa bajas que típicamente se emplea para remover el
ruido de una señal en el dominio del tiempo a través de la evaluación del promedio de N
muestras en cada periodo de muestreo T. Como todo filtro, retarda la señal de salida y el
( )
retardo de grupo es: 𝑑 = . Para efectos de comparación, en un filtro de primer orden
el retardo de grupo es d = T/2.

42
7.9 Cómo implementar un filtro de media móvil
Existen varias formas de implementar un filtro de media móvil, unas eficientes y otras
ineficientes; siendo la más ineficiente la que evalúa la suma de las N muestras y calcula el
promedio en cada periodo de muestreo, como lo describe la ecuación de definición del filtro.
En cualquier caso se requiere del almacenamiento de las N-1 muestras anteriores que deben
irse desplazando en cada periodo de muestreo, emulando un registro de desplazamiento.
Este desplazamiento puede realizarse de forma eficiente y de forma ineficiente, siendo la
forma más ineficiente la que, en cada periodo de muestreo, realiza el traslado de los
elementos entre lugares de almacenamiento al estilo de 𝑥(𝑘 − 𝑁 + 𝑖) = x(k − N + i + 1) ,
variando el contador i desde 1 hasta (N-1), ya sea con un código explícito o dentro de un lazo.
La forma más eficiente utiliza una estructura de datos llamada registro circular (ring buffer)
con índices para escritura y lectura, donde los datos realmente no se desplazan; sino que lo
hacen los índices.
Tabla 7.1: Comparación de implementaciones de un filtro de media móvil de 9 etapas

/* Promedio calculado cada periodo /* Promedio calculado cada periodo


desde cero. Su duración depende desde la suma anterior sk,
del número de muestras N */ restando la muestra más vieja y
yk = (xk8 + xk7+ xk6+ xk5+ xk4+ xk3+ sumando la muestra más reciente
xk2+ xk1+ xk)/9; sk = sk ˗ xk8 + xk; */

/* Desplazamiento físico de los /* Cálculo del promedio


datos. Su duración depende del independiente de N */
número de muestras N */ sk = sk - xbuffer[index] + xk;
xk8 = xk7; yk = sk/9;
xk7 = xk6;
xk6 = xk5; /* Desplazamiento lógico de los
xk5 = xk4; datos, independiente de N.
xk4 = xk3; Remueve la muestra más vieja y
xk3 = xk2; almacena la nueva muestra */
xk2 = xk1; xbuffer[index] = xk;
xk1 = xk; index++;
if (index == MAX_SAMPLE)
{
index = 0;
}
a) Forma más ineficiente b) Forma más eficiente

En la Tabla 7.1 se muestran dos implementaciones causales de filtros de media móvil. La


forma más ineficiente se muestra a la izquierda; y la forma más eficiente, con un
almacenamiento circular y un índice, a la derecha. Esta implementación puede ser aún más
eficiente si el número de muestras es una potencia de 2; pues se puede reemplazar la división
por un desplazamiento hacia la derecha.

43
7.10 ¿Cómo implementar un filtro digital de primer orden?
7.11 ¿Cuál filtro es mejor para eliminar el ruido, el de media móvil o el
de primer orden?
7.12 ¿Cómo implementar un filtro digital para eliminar una frecuencia
(notch filter)?
Cálculo del filtro:
Matlab

PSoC
Implementación
Programa
DSP

44
Capítulo 8: Conversiones de tensión CD-CD
8.1 ¿Cómo alimentar eficientemente un circuito CD de baja tensión
desde una fuente CD de mayor tensión?
Los reguladores lineales han sido utilizados con frecuencia para realizar esta función en
fuentes de alimentación. El problema es la alta disipación de potencia causada por la
diferencia de tensión entre la alimentación y la salida deseada, multiplicada por la corriente.

𝑃 = (𝑈 − 𝑈 ) ∗ 𝐼

Por ejemplo, un regulador alimentado con 7.0 V y cuya salida es 5 V a 1 A, disipa 2 W, por
lo que requeriría un disipador de potencia.

𝑃 = (7 − 5) 𝑉 ∗ 1 𝐴 = 2 𝑊

La eficiencia de un regulador lineal es:

𝑃 𝑈 ∗𝐼
𝜂= ∗ 100% = ∗ 100%
𝑃 𝑈 (𝐼 + 𝐼 )

Utilizando como ejemplo los datos de un regulador LM7805 que posee una corriente de
reposo 𝐼 = 0.005 𝐴, la eficiencia es:

5∗1
𝜂= ∗ 100% = 71%
7(1 + 0.005)

Para este regulador, 7 V es la mínima tensión requerida para una salida de 5 V; pues, tiene
una tensión de caída (dropout) de 2 V. El detalle es que la eficiencia depende de la tensión
de alimentación de entrada, por lo que a una tensión de entrada de 20V la eficiencia se reduce
a:

5∗1
𝜂= ∗ 100% = 24.9%
20(1 + 0.005)

En estas condiciones el regulador disipa 15 W. La eficiencia depende de forma directamente


proporcional al cociente 𝑈 ⁄𝑈 . Si Ui se aproxima a Uo, la eficiencia aumenta.

Una solución moderna y eficiente consiste en utilizar un regulador reductor de conmutación


(buck), el cual es mucho más eficiente, pues la disipación de potencia del transistor
conmutador se produce principalmente durante las transiciones, como se muestra en la Figura
11.2. La potencia disipada en el transistor es ahora proporcional a la frecuencia de
conmutación; pero, mucho menor comparada con la de un regulador lineal. Un regulador de
conmutación también tiene pérdidas en los condensadores, inductancias, diodos y en el
controlador. La eficiencia de un regulador buck varía típicamente entre 70% y 90%. El
circuito básico de un regulador buck se muestra en la Figura 8.1 donde se aprecia el elemento
45
conmutador en el lado superior, el cual debe ser activado por un circuito de control para
regular la tensión de salida y el filtro LC para reducir el rizado, el cual es típicamente mayor
que en una fuente con regulador lineal. Este circuito es muy parecido al equivalente de un
puente H manejando un motor de CD, el filtro.

El principio de operación del regulador buck consiste en que cuando el conmutador S1 se


encuentra cerrado, la corriente circula desde la fuente Ui por el inductor L1 y la carga, en
paralelo con C2. Al abrirse el conmutador S1, el inductor invierte la polaridad de la tensión
entre sus terminales, y mantiene el flujo de corriente a partir la energía almacenada en su
campo magnético. La corriente circula por L1, en la misma dirección que antes, por la carga
en paralelo con C2 y por el diodo D1.

Figura 8.1: Diagrama simplificado de un regulador buck

La tensión de salida Uo de un regulador reductor (buck) depende de manera proporcional de


la eficiencia y del ciclo de trabajo 𝐷 = del conmutador, cuyo producto es menor que 1, por
lo cual la tensión de salida es siempre menor que la tensión de entrada.

𝑈 = 𝜂𝑈 𝐷

Se pueden obtener reguladores de conmutación integrados completamente, que incluyen la


inductancia, condensadores de filtro, diodos y demás en el mismo paquete; así como
reguladores de conmutación que requieren de todos estos componentes externamente.

46
Tabla 8.1: Comparación de la eficiencia entre un regulador lineal estándar y un reemplazo
directo de conmutación

Modo de operación: lineal Modo de operación: conmutación (buck)

Parte: LM7805 Parte: OKI-78SR-5/1.5


Eficiencia: 41.46% a Ui = 12 V, IL = 1 A Eficiencia: 89% a Ui = 12 V, IL = 1.5 A
Potencia en la carga: 5 W Potencia en la carga: 7.5W
Potencia disipada: 7.06 W Potencia disipada: 0.93 W

8.2 ¿Cómo alimentar un circuito CD que requiere de mayor tensión


desde una fuente CD de menor tensión?
Una tarea que es imposible con un regulador lineal es elevar la tensión de salida; puesto que
el principio de operación de estos reguladores es reducir la tensión de salida haciendo caer la
diferencia entre la tensión de entrada y la tensión de salida en el elemento regulador, con las
pérdidas de potencia comentadas en 8.1.
Con un regulador de conmutación elevador (boost) si es posible realizar esta función y con
una eficiencia típica mayor al 75%. En la Figura 8.2 se muestra el circuito simplificado de
un regulador boost, donde se aprecia que respecto al regulador buck, el elemento conmutador
se encuentra en el lado inferior y el filtro LC se encuentra separado por el diodo.

Figura 8.2: Diagrama simplificado de un regulador boost

El principio de operación de un regulador boost consiste en que cuando el conmutador S1 se


encuentra cerrado, la corriente circula desde la fuente Ui por L1 y S1, almacenando energía
en el campo magnético de L1. Al abrirse el conmutador S1, la corriente mantiene la dirección
a través de L1 y circula ahora por D1 y la carga en paralelo con C1. La energía almacenada
en el campo magnético mantiene la corriente a través de L1, mientras la tensión entre los

47
terminales de L1 se invierte y se suma a la tensión Ui para producir un aumento de la tensión
de salida.

De forma aproximada, la tensión de salida Uo de un regulador elevador (boost) depende


directamente de la eficiencia y del ciclo de trabajo 𝐷 = del conmutador, el cual debe
mantenerse menor a 1 y que al estar en el denominador, restado de 1, produce el efecto
elevador. Un circuito de control ajusta el ciclo de trabajo del conmutador S1 para regular la
tensión de salida.

𝑈
𝑈 =𝜂
1−𝐷

a) Regulador boost b) Eficiencia para el regulador boost U3V50F9

Figura 8.3: a) Imagen de un regulador boost U3V50F9 de 9 V/ 3 A. b) Las gráficas de


eficiencia del regulador U3V50F9 [21]

En la Figura 8.3a se puede ver la fotografía a escala real de un regulador boost comercial que
puede producir una salida de tensión de 9 voltios a 3 A a partir de una entrada nominal de
entre 3.3 V y 7.2V. La Figura 8.3b muestra las curvas de eficiencia, las cuales dependen de
la tensión de alimentación y de la corriente de salida. A una corriente de salida de 1 A se
obtiene al menos un 80% de eficiencia con la tensión mínima de entrada de 3.3 V. Alimentado
con 5 V se obtienen eficiencias mayores al 85% con corrientes de hasta 2 A.

8.3 ¿Cómo producir a partir de una tensión CD no regulada una


tensión CD fija y regulada a un valor similar al de la entrada?

48
Capítulo 9: Medición de parámetros
9.1 ¿Cómo medir la inductancia de un circuito o motor CD?
9.2 ¿Cómo medir la resistencia de un circuito o motor CD?
9.3 ¿Cómo medir la fricción dinámica de un motor de CD?
9.4 ¿Cómo medir la fricción estática de un motor de CD?
9.5 ¿Cómo medir la inercia rotacional de un motor de CD?
9.6 ¿Cómo medir la inercia rotacional de un péndulo simple?

49
Capítulo 10: Implementación de controladores en tiempo
discreto
10.1 ¿Cuál es la estructura básica de un control en tiempo discreto?
Para el control en tiempo discreto es fundamental que el algoritmo de control se ejecute
periódicamente con un periodo constante igual al usado para el diseño del controlador.
La mejor forma de realizar esto es a colocando el código del controlador discreto dentro de
un proceso de interrupción que es activado por un temporizador en hardware a través de una
de las interrupciones del procesador utilizado.
Como ejemplo, el programa principal del sistema de control, en lenguaje C para PSoC, debe
tener entonces las siguientes partes:
a) Una sección para incluir las bibliotecas adicionales requeridas para el proyecto:

#include "stdbool.h"
.
.
#include "stdio.h"

b) Una sección de definición de las constantes globales necesarias:

#define PWM_MAX 499 // PWM 100% (0 – 499 = 500 cuentas)


.
.
#define PWM_FACTOR 100 //100 cuentas/volt. con Tpwm = 500us @ 1MHz

c) Una sección de definición de las variables globales requeridas. Si algunas variables


serán utilizadas dentro de un proceso de atención de interrupciones, entonces éstas
deben declararse como volátiles para evitar optimizaciones del compilador:

float KI = 0.158; // Constante de acción integral @ 5ms


.
.
volatile float ik = 0; // Variable y memoria de acción integral

d) La definición del proceso de atención de interrupciones que efectuará el control y


otros procesos de atención de interrupciones necesarios:

51
/* Prototipo para la interrupción del Timer */
CY_ISR_PROTO(isr_Timer_Handler);

// Declaración del proceso de atención de interrupciones


CY_ISR(isr_Timer_Handler)
{

// Declaración de variables locales

float ek = 0; // Variable para el error de velocidad


. // Otras variables

// Algoritmo de control
yk = ADC_Read16(); // Lectura de la realimentación
ek = Ref – yk; // Cálculo del error
ik += KI*ek; // Cálculo de la acción integral
. // Otros cálculos
PWM_WriteCompareValue(pwm); // escritura de la acción de control

// Otras tareas no prioritarias dentro del proceso


.
.
} // Fin de la interrupción

e) La definición de las funciones y procedimientos necesarios, independientes del


programa principal.

bool USB_Uart_PrintLn(char* pStrBuf[])


{
.
.

} // USB_Uart_PrintLn

f) El programa principal que tendrá dos partes:


i. Una sección de inicialización que contendrá la definición de variables locales
y de aquellas sentencias que solamente se ejecutarán una vez al comenzar el
programa.
ii. Un lazo infinito, al cual una vez ingresado el programa, jamás saldrá de éste
hasta que el sistema se apague. La única forma de dejar temporalmente la
ejecución de este lazo infinito es la atención de las interrupciones,
especialmente aquella que ejecuta el algoritmo de control.
Dentro del lazo infinito se realizan tareas no prioritarias, que no requieren
ejecución en tiempo real; tal como, la interacción con el usuario; la
comunicación y la escritura en pantalla.

52
int main(void)
{

int16 pot; // Para leer el ADC


. // Otras variables locales
.
float potf; // Variable temporal para ajuste de P e I

/* Código de inicio de todos los bloques */


AMux_Start();
ADC_Start();
.
.
/* Inicio del proceso de interrupciones con StartEx no Start */
isr_Timer_StartEx(isr_Timer_Handler);

/* Habilitación global de las interrupciones */


CyGlobalIntEnable;

/* Lazo infinito */
for(;;)
{
// Interacción humano-máquina
// Acciones NO en tiempo real

} // for

} // main

10.2 ¿Cómo implementar un controlador proporcional en tiempo


discreto?
El controlador proporcional es el más simple de implementar de forma digital. La función de
transferencia de un controlador proporcional es la misma para tiempo continuo y para tiempo
discreto. Este controlador solo posee un parámetro, la constante de ganancia proporcional,
llamada P en este ejemplo.
𝑃(𝑧)
= 𝑃
𝐸(𝑧)
𝑃(𝑧) = 𝑃 ∗ 𝐸(𝑧)
Al transformar la función de transferencia al dominio del tiempo discreto, obtenemos la
ecuación siguiente, que es una simple multiplicación:

𝑝(𝑘) = 𝑃 ∗ 𝑒(𝑘)

10.3 ¿Cómo implementar un controlador integral en tiempo discreto?


Este tipo de controlador depende de la forma de aproximar la integral en tiempo continuo a
una forma discreta en el tiempo. Existen múltiples formas de aproximación; pero, las más
comunes son: Forward Euler, Backward Euler y trapezoidal. Estos tres métodos aproximan
la integral de la función, o sea el área bajo la curva, utilizando rectángulos, como se muestra
53
en la Figura 10.1. El método de Backward Euler, es un método implícito, de la regla de la
derecha, utiliza el rectángulo cuya esquina derecha toca la curva de la función. El método
Forward Euler, es un método explícito, de la regla de la izquierda, utiliza el rectángulo cuya
esquina izquierda toca la curva. Finalmente el método trapezoidal, Bilineal o de Tustin,
utiliza un rectángulo cuya parte superior toca la curva en el punto medio entre dos valores
consecutivos de la función. Como se muestra en la gráfica a la derecha de la Figura 10.1, el
trapezoide se forma con el triángulo a la izquierda de la curva, transportado imaginariamente
a la parte superior del rectángulo. Se puede inferir que este método proporciona una mejor
aproximación que los dos métodos anteriores; aunque todos mejoran notablemente al
disminuir el periodo de muestreo (usar más rectángulos en el mismo tiempo).
y 10
Rectángulo derecho y 10
Rectángulo izquierdo y 10
Trapezoidal
9 9 9

8 8 8

7 7 7

6 6 6

5 5 5

4 4 4

3 3 3

2 2 2

1 1 1

0 0 0
0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3 0 0.5 1 1.5 2 2.5 3
t t t
Backward Euler Forward Euler Bilineal o Tustin

Figura 10.1: Aproximaciones discretas a la integral

En la Tabla 10.1 se muestran las ecuaciones de tres métodos numéricos comunes utilizados
para aproximar la integral. Este controlador posee dos parámetros: la constante de ganancia
integral, llamada I en este ejemplo y el periodo de muestreo, TS.
Tabla 10.1: Comparación de las ecuaciones para los métodos de aproximación discreta a la
integral

Backward Euler Forward Euler Trapezoidal

𝐼(𝑧) 𝑧 𝐼(𝑧) 1 𝐼(𝑧) 𝑇 𝑧+1


=𝐼∗𝑇 = 𝐼∗𝑇 = 𝐼
𝐸(𝑧) 𝑧−1 𝐸(𝑧) 𝑧−1 𝐸(𝑧) 2 𝑧−1

𝑇
𝐼(𝑧)(1 − 𝑧 ) = 𝐸(𝑧)𝐼 ∗ 𝑇 𝐼(𝑧)(1 − 𝑧 ) = 𝐸(𝑧)𝑧 𝐼∗𝑇 𝐼(𝑧)(1 − 𝑧 ) = 𝐸(𝑧)(1 + 𝑧 )𝐼
2

𝐼(𝑧) = 𝐸(𝑧)𝐼 ∗ 𝑇 + 𝐼(𝑧)𝑧 𝐼(𝑧) = 𝐸(𝑧)𝑧 𝐼 ∗ 𝑇 + 𝐼(𝑧)𝑧 𝑇


𝐼(𝑧) = 𝐸(𝑧)(1 + 𝑧 )𝐼 + 𝐼(𝑧)𝑧
2

(𝑒(𝑘) + 𝑒(𝑘 − 1))


𝑖(𝑘) = 𝑒(𝑘)𝐼 ∗ 𝑇 + 𝑖(𝑘 − 1) 𝑖(𝑘) = 𝑒(𝑘 − 1)𝐼 ∗ 𝑇 + 𝑖(𝑘 − 1) 𝑖(𝑘) = 𝐼 ∗ 𝑇 + 𝑖(𝑘 − 1)
2

Todas las aproximaciones tienen un conjunto de propiedades que las distinguen: Tamaño del
paso, Orden, Error de redondeo y truncamiento, Estabilidad, Paso único o Múltiple, Método
Implícito o Explícito. Describiremos aquí solo dos de las propiedades más importantes, en
54
[10] , [11] y [12] se puede encontrar un análisis y descripción más completa de estas
propiedades.
Tamaño del paso: Para una función del tiempo, esto equivale al periodo de muestreo
TS. Solo se considera en este documento periodos uniformes de muestreo.
Estabilidad: Concepto similar al de los sistemas de control, define si el método
converge a una solución u oscila.
Método Forward Euler: Este método es un método explícito de orden 1 y un paso. La
condición de estabilidad de este método [12], encontrada utilizando una función diferencial
ordinaria de prueba de primer orden, 𝑦̇ = 𝜆𝑦; donde 𝜆 es el valor propio, real negativo para
que el sistema sea estable, es:
|1 + 𝜆𝑇 | < 1

𝑇 < −2 𝜆

El método Forward Euler funciona mejor para tiempos de muestreo pequeños. Para tiempos
de muestreo grandes, este método puede resultar en inestabilidad, incluso al discretizar un
sistema que es estable en tiempo continuo. En sistemas de control, esto usualmente no
representa ningún problema, ya que la recomendación típica para escoger el periodo de
muestreo, tal como se describe en el punto 10.11 recomienda:
𝜏
𝑇 ≤
10
Donde 𝜏 es la constante de tiempo dominante deseada para el sistema. Al cumplir esta regla,
se seleccionan periodos de muestreo mucho más pequeños que el límite para la estabilidad
del método Forward Euler, lo que garantiza que se pueda utilizar este método sin problemas.
Método Backward Euler: Este método es implícito, de orden 1 y paso 1. No tiene
restricciones para el periodo de muestreo. Una ventaja de este método es que al discretizar
un sistema estable de tiempo continuo siempre produce un resultado discreto estable. La
condición de estabilidad de este método, encontrada de forma similar a la del método
Forward Euler, es:
|1 − 𝜆𝑇 | < 1

𝜆𝑇 < 0 𝐨 𝜆𝑇 > 2

Ya que 𝜆 es negativo y TS es positivo, tendremos siempre que 𝜆𝑇 < 0, por lo que este método
es incondicionalmente estable.
Método Bilineal o Trapezoidal: Este es un método de segundo orden. No existe un método
de integración de segundo orden más preciso que el método trapezoidal. Una ventaja del
método trapezoidal es que la discretización de un sistema de tiempo continuo estable
utilizando este método siempre proporciona un resultado estable en tiempo discreto.

55
10.4 ¿Cómo evitar el windup en un controlador integral?
El problema reside en el aspecto físico de los actuadores en un sistema de control; por
ejemplo: una resistencia no puede enfriar, una válvula no puede abrirse más del 100%, una
bomba no puede girar más lento que detenida; pero, un sistema de control mal diseñado puede
intentar hacer eso al sobrepasar los límites de dichos actuadores con la acción de control, con
lo cual la salida no tendría cambios; pues, la planta ya no puede producirlos. Esto podría crear
un error que no puede ser disminuido.
El windup es la acumulación de “acción de control” en el controlador integral debido a un
error muy grande o un error sostenido durante mucho tiempo de la entrada al controlador.
Esta salida del término integral, combinada eventualmente con otros términos, puede llegar
a saturar el actuador y si este valor máximo (o mínimo) no puede eliminar el error, el valor
de la integral seguirá aumentando. Una vez que la salida del controlador alcanza ese punto,
pierde la habilidad para regular al sistema, quedando técnicamente en lazo abierto.
En la Figura 10.2, se muestran las señales de un controlador PI, compuesto por un término
proporcional y un término integral. Se ha limitado la salida de la acción de control hacia la
planta en 4.1V, simulando un actuador que posee tales limitaciones. En t = 0.4s se ha forzado
una perturbación de 2V en la acción de control, a la entrada de la planta, y se puede observar
la aparición de un error sostenido durante el periodo en el la perturbación se encuentra activa.
Poco tiempo después de iniciada la perturbación, la acción de control se satura, inicialmente
por la acción de control proporcional, y unos instantes después por la acción de control
integral.

56
Figura 10.2: Simulación de un regulador PI con windup ante una perturbación sostenida

Puede observarse que la salida del controlador sigue creciendo después de alcanzada la
saturación de la acción de control, debida principalmente a la acción integral cuya salida
sigue aumentando.
En t = 0.8s se hace elimina la perturbación lo que provoca una sobre elongación del 50% en
la salida del sistema, lo que vuelve negativo al error. La acción de control se mantiene
saturada mientras la salida del controlador comienza a disminuir lentamente, seguida en la
misma dirección por la acción integral. Unos 135ms después de eliminada la perturbación,
finalmente la acción de control disminuye por debajo del valor de saturación; la salida, el
error y la acción integral inician su lento retorno a sus valores de equilibrio previos a la
perturbación. El proceso de reacomodo después de eliminada la perturbación es de
aproximadamente 400ms.
Hay más de una docena de métodos para combatir el windup; pero, nos enfocaremos en uno
fácil de implementar en un programa, el método de saturación del término integral que
consiste en eliminar la acción integral una vez superado cierto límite predefinido. En la
Figura 10.3 se muestran las señales del mismo controlador PI cuyo comportamiento se acaba
de describir; solo, que esta vez se ha aplicado una corrección del windup, con el método de
saturación del término integral.

57
Figura 10.3: Simulación de un regulador PI con antiwindup por saturación del término
integral.

En t = 0.4s se aplica la perturbación y todo comienza a ocurrir como antes, la acción de


control se satura en 4.1V y aparece un error sostenido durante todo el tiempo en el cual la
perturbación se encuentra activa. La salida del PI ahora se mantiene limitada; principalmente
debido a que la acción integral se limitó a 3.6V, evitando la acumulación excesiva de la
acción de control.
En t = 0.8s, al eliminar la perturbación, puede verse que no existe retardo para que la acción
de control disminuya por debajo del límite de saturación. Siempre existe una sobre
elongación de la salida; pero, esta alcanza solamente el 12.5%, retornando todas las señales
a sus valores previos en unos 200ms, la mitad del tiempo anterior. Esto demuestra la forma
de operar y los beneficios de la compensación del windup integral.
En el recuadro se muestra el código que realiza la compensación de windup por saturación
del término integral. La constante MAXINTEGRAL debe ser determinada para cada
problema, y debe ser tal, que no limite la operación normal, ni la acción integral ante
perturbaciones moderadas. Este valor límite para la integral debe dejar espacio suficiente
para que las otras acciones de control, si existen, tengan margen de corrección ante los
cambios de la señal de error, sin llegar a saturar la salida del controlador.

/* Satura el término integral para el siguiente periodo */


if (ik > MAXINTEGRAL)
ik = MAXINTEGRAL;
else
if (ik < -MAXINTEGRAL) ik = -MAXINTEGRAL;

Como ejemplo numérico tenemos las señales mostradas en la Figura 10.4, donde se ha
sometido un sistema de control de velocidad a una perturbación moderada en la entrada de la
planta. Puede verse que la acción de control no alcanza siquiera 4V durante la perturbación.
Si se considera que la salida del controlador se satura en 4.85V, se puede determinar que el
error, para esta perturbación, es de aproximadamente 0.6V; entonces, el valor límite para la
integral podría establecerse en 4.1V, admitiendo un error máximo de 1V, un poco mayor al
de la figura, y considerando la ganancia proporcional conocida de 0.75:

58
𝑀𝐴𝑋𝐼𝑁𝑇𝐸𝐺𝑅𝐴𝐿 = 𝑆𝐴𝑇𝑈𝑅𝐴𝐶𝐼Ó𝑁 − 𝐸𝑅𝑅𝑂𝑅𝑀𝐴𝑋𝐼𝑀𝑂 ∗ 𝐺𝐴𝑁𝐴𝑁𝐶𝐼𝐴𝑃𝑅𝑂𝑃𝑂𝑅𝐶𝐼𝑂𝑁𝐴𝐿

Figura 10.4: Señales de salida y acción de control ante entrada escalón y perturbaciones de un
control de velocidad constante.

10.5 ¿Cómo implementar un controlador derivativo ideal en tiempo


discreto?
El controlador derivativo ideal en tiempo discreto no posee un filtro derivativo. Posee dos
parámetros: la constante de ganancia derivativa, llamada D en este ejemplo, y TS, el periodo
de muestreo. Su función de transferencia es:
𝐷(𝑧) (𝑧 − 1)
=𝐷
𝐸(𝑧) 𝑇𝑧
𝐷
𝐷(𝑧) = 𝐸(𝑧)(1 − 𝑧 )
𝑇
Transformando al dominio del tiempo discreto se obtiene la ecuación de diferencias:
𝐷
𝑑(𝑘) = 𝑒(𝑘) − 𝑒(𝑘 − 1)
𝑇

10.6 ¿Cómo implementar un controlador derivativo con filtro en


tiempo discreto?
Un control derivativo puro tiende a amplificar el ruido; pues, el derivador es un filtro pasa
altas. El filtro derivativo agrega al derivador un filtro pasabajas de ganancia unitaria que sirve

59
para disminuir el ruido. Este filtro debe poseer una constante de tiempo pequeña comparada
con la constante de tiempo dominante del sistema, o equivalentemente un polo no dominante,
para evitar afectar el comportamiento dinámico del sistema.
Tabla 10.2: Comparación de las ecuaciones para los métodos de aproximación discreta del
filtro derivativo

Backward Euler Forward Euler Trapezoidal

𝐷(𝑧) 𝑁 𝐷(𝑧) 𝑁 𝐷(𝑧) 𝑁


=𝐷 𝑧 = 𝐷 = 𝐷
𝐸(𝑧) 1 + 𝑁𝑇 𝐸(𝑧) 1 𝐸(𝑧) 𝑇 𝑧+1
𝑧−1 1 + 𝑁𝑇 1+𝑁
𝑧−1 2 𝑧−1

𝐷(𝑧) = 𝐸(𝑧)(1 − 𝑧 )𝐷𝑁 𝐷(𝑧) = 𝐸(𝑧)(1 − 𝑧 )𝐷 ∗ 𝑁 𝐷(𝑧) =

(1 − 𝑧 )2𝐷𝑁𝐸(𝑧) + (2−𝑁𝑇 )𝐷(𝑧)𝑧


−𝐷(𝑧)(𝑁𝑇 − 𝑧 ) −𝐷(𝑧)𝑧 (𝑁𝑇 − 1) (2 + 𝑁𝑇 )

𝐷𝑁 𝑒(𝑘) − 𝑒(𝑘 − 1)
𝑑(𝑘) = 𝑑(𝑘) =
(1 + 𝑁𝑇 ) 𝑑(𝑘) = 𝐷𝑁 𝑒(𝑘) − 𝑒(𝑘 − 1)
2𝐷𝑁(𝑒(𝑘) − 𝑒(𝑘 − 1)) + (2 − 𝑁𝑇 )𝑑(𝑘 − 1)
𝑑(𝑘 − 1) −𝑑(𝑘 − 1)(𝑁𝑇 − 1)
+ (2 + 𝑁𝑇 )
(1 + 𝑁𝑇 )

Las consideraciones para estos tres métodos son las mismas que para la aproximación a la
integral descrita en el punto 10.6. El método Forward Euler es mejor con periodos pequeños
de muestreo y puede producir oscilaciones con periodos grandes; pero, de nuevo, si el periodo
de muestreo del sistema se escoge según las recomendaciones en el punto 10.11, no debería
haber ningún problema.

10.7 ¿Cómo se implementa un regulador PID tradicional en tiempo


discreto?
Un regulador PID tiene como su nombre lo indica, 3 partes, una parte proporcional, una
integral y una diferencial. La forma de implementar este regulador es agregar selectivamente
las ecuaciones descritas en los puntos del 10.1 al 10.6 para formar un PI, PD, PID o un PIDf,
de acuerdo a las necesidades del problema. Los criterios de selección para la aproximación
del integrador y del diferenciador ya fueron expuestos en esos apartados.
En la Figura 10.5 se muestra la estructura de un regulador PID, en la cual se puede ver que
las salidas de cada bloque se suman para producir la respuesta compuesta de un PID. En el
dominio de la frecuencia compleja, en tiempo continuo o discreto, el equivalente total del
PID sería, de igual forma, la suma de las transmitancias o funciones de transferencia para
cada bloque.

60
Figura 10.5: Estructura de un regulador PID en paralelo en el dominio del tiempo discreto

Dentro de un programa, se tendría que evaluar, de forma secuencial, las tres ecuaciones de
diferencia que corresponden a los tres bloques del PID seleccionados y al final realizar la
suma de los tres resultados parciales, por ejemplo, tomando las ecuaciones para las
aproximaciones backward Euler para la integral (tabla 10.1) y para el filtro derivativo (tabla
10.2):

𝑝(𝑘) = 𝑃𝑒(𝑘)

𝑖(𝑘) = 𝑒(𝑘)𝐼 ∗ 𝑇 + 𝑖(𝑘 − 1)

𝐷𝑁 𝑒(𝑘) − 𝑒(𝑘 − 1) + 𝑑(𝑘 − 1)


𝑑(𝑘) =
(1 + 𝑁𝑇 )

𝑝𝑖𝑑(𝑘) = 𝑝(𝑘) + 𝑖(𝑘) + 𝑑(𝑘)

10.8 ¿Cómo se implementan otras variantes de regulador PID en


tiempo discreto?
En la Figura 10.6 se muestra la estructura de una variante del PID llamada I_PD en la cual,
las partes proporcional y derivativa actúan únicamente sobre la realimentación para evitar
que éstas produzcan cambios abruptos al existir cambios en escalón en la entrada de
referencia: ya que estos cambios abruptos podrían saturar la salida del regulador, con lo cual
el sistema quedaría durante esos instantes, técnicamente, en lazo abierto.
La ecuación general en z de un PID paralelo que admite variantes en su estructura es:

61
𝑃𝐼𝐷(𝑧) = 𝑃(𝑧)[𝑏𝑅(𝑧) − 𝑌(𝑧)] + 𝐼(𝑧)[𝑅(𝑧) − 𝑌(𝑧)] + 𝐷(𝑧)[𝑐𝑅(𝑧) − 𝑌(𝑧)]
Donde, b y c son dos constantes que definen cuánto de la señal de referencia será procesada
por los términos proporcional y derivativo respectivamente. Si b y c se hacen ambos 1, la
estructura queda como en la Figura 10.5, con los tres términos actuando sobre la señal de
error. En cambio sí b y c se hacen ambos 0, los términos proporcional y derivativo actuarán
solo sobre la señal de realimentación, o salida del sistema, quedando la estructura como la de
la Figura 10.6, llamada I_PD. En todos los casos, el término integral actuará sobre la señal
de error.

Figura 10.6: Estructura de la variante I_PD del regulador PID paralelo en tiempo discreto

Asignando a las constantes b y c valores 1 y 0 respectivamente, se obtiene la estructura que


PI_D, siguiendo la nomenclatura de que los términos que se encuentran en el camino directo,
o sea, que actúan sobre la señal de error, se nombran antes del guion bajo y los términos que
están en el camino de la realimentación, esto es, los que actúan solo sobre la señal de salida
del sistema, se nombran después del guion bajo.
Si se admiten valores, no enteros, entre 0 y 1 para las constantes b y c, se podría tener una
infinidad de combinaciones entre los extremos descritos; pero, las variantes más comunes
son las nombradas antes: PID, PI_D e I_PD. Si en la entrada de referencia no se presentan
cambios abruptos, como puede ser en un sistema de regulación de salida constante, que
solamente recibe perturbaciones, las tres variantes anteriores se comportan de la misma
manera.
Dentro de un programa, se tendría que evaluar, de forma secuencial, las tres ecuaciones de
diferencia que corresponden a los tres bloques del PID seleccionados y al final realizar la
suma o resta a la parte integral de los otros dos resultados parciales, por ejemplo, para un

62
I_PD, como el de la Figura 10.6, tomando las ecuaciones para las aproximaciones backward
Euler para la integral y para el filtro derivativo de la tabla 10.1 y tabla 10.2 respectivamente:

𝑝(𝑘) = 𝑃𝑦(𝑘)

𝑖(𝑘) = 𝑒(𝑘)𝐼 ∗ 𝑇 + 𝑖(𝑘 − 1)

𝐷𝑁 𝑦(𝑘) − 𝑦(𝑘 − 1) + 𝑑(𝑘 − 1)


𝑑(𝑘) =
(1 + 𝑁𝑇 )

𝑖_𝑝𝑑(𝑘) = 𝑖(𝑘) − 𝑝(𝑘) − 𝑑(𝑘)

10.9 ¿Cómo implementar un controlador de realimentación de estados


en tiempo discreto?
Una realimentación de estado simple implica conocer los estados del sistema, x, a través de
una medición directa de éstos o a través de un estimador de estados; pero, no importa cómo
se determinen los estados, la regla de control es siempre la misma u = −Kx, donde la
operación indicada es un simple producto de matrices o vectores y la matriz K se calcula por
cualquiera de los métodos de diseño disponibles, tales como: el método de Ackermann para
sistemas SISO o un método similar para sistemas MIMO; sustitución directa; transformación
a la forma canónica controlable (FCC) o LQR. Suponiendo un sistema SISO, donde K es un
vector tendríamos:
𝑥
𝑢 = −Kx = − 𝑘 … 𝑘 ⋮ = −(𝑘 𝑥 + ⋯ + 𝑘 𝑥 )
𝑥

10.10 ¿Cómo diseñar un controlador para una planta que tiene un


tiempo muerto?
Un método adecuado para diseñar el control para una planta que tiene retardo o tiempo
muerto es el del predictor de Smith [19]. Con este método, se diseña un controlador 𝐾(𝜆),
por cualquiera de los métodos conocidos, como si la planta no tuviese tiempo muerto y luego
se calcula el controlador con predictor de Smith, 𝐾 (𝜆), considerando ahora si el tiempo
muerto.
En la Figura 10.7 se muestra un sistema de control en tiempo discreto con predictor de Smith
donde se ha separado el tiempo muerto de la parte dinámica de la planta G(z). El predictor
de Smith se calcula con la ecuación mostrada para 𝐾 (𝑧), la cual evalúa el contenido del
recuadro en rojo, donde K(z) es el regulador calculado para G(z), la planta sin el retardo z-n;
aunque realmente la planta y el retardo son inseparables.
𝐾(𝑧)
𝐾 (𝑧) =
1 + 𝐾(𝑧)𝐺(𝑧)[1 − 𝑧 ]

63
Figura 10.7: Estructura de un control con predictor de Smith en tiempo discreto

10.11 ¿Cómo escoger el periodo de muestreo TS para el algoritmo de


control en tiempo discreto?
En [20] se encuentran varias formas para estimar el periodo de muestreo adecuado para un
sistema de control en tiempo discreto; pero la forma más utilizada y quizá la más simple es
hacer el periodo de muestreo igual o menor a una décima parte de la constante de tiempo
dominante deseada para el sistema en lazo cerrado, lo cual produce un periodo de muestreo
que producirá unos 40 muestreos durante el tiempo de estabilización deseado para el sistema.
𝜏 .
𝑇 ≤
10

64
Capítulo 11: Control de motores de CD
11.1 ¿Cómo controlar eficientemente la velocidad de un motor de CD
de imán permanente?
Es sabido que la velocidad angular de un motor de corriente directa (CD) de imán permanente
es proporcional a la tensión de armadura, el problema de controlar la velocidad se reduce
entonces a proporcionar una tensión variable al motor. Esto se puede hacer generando una
señal con la amplitud adecuada para la velocidad requerida y amplificar la potencia de esta
señal (en corriente y tensión) con un amplificador lineal de potencia clase AB. El detalle es
que este método es ineficiente, pues las pérdidas en el amplificador son iguales al producto
de la corriente del motor por la diferencia entre la tensión de alimentación del amplificador
y la tensión de armadura deseada para el motor. La potencia de pérdidas aumenta
significativamente cuando el motor gira a bajas velocidades ya que la caída de tensión en el
amplificador es alta y la corriente también podría ser alta, debido a la poca tensión inducida.

𝑝(𝑡) = 𝑖 (𝑡) ∗ [𝑈 − 𝑈 (𝑡)]

El mejor método es utilizar un amplificador digital de potencia, amplificador clase D o


amplificador en modo de conmutación. En este tipo de amplificador los transistores de
potencia no trabajan en la región lineal como en los amplificadores clase AB; sino, que
trabajan encendidos o apagados; lo que minimiza la potencia disipada. La señal que se emplea
para variar la tensión de armadura del motor es una señal rectangular unipolar de amplitud
constante y ciclo de trabajo variable, llamada PWM por sus siglas en inglés, como la que se
muestra en la parte superior de la Figura 11.1.

U [V]

A Ciclo de trabajo

Valor medio
C

t
T = Periodo

|M|

1/T 1/3T 1/5T 1/7T f [Hz]


Figura 11.1: Señal de PWM en el tiempo y su Transformada de Fourier

65
Una señal rectangular unipolar periódica posee una transformada de Fourier que consiste en
un valor medio, C, y una serie infinita de frecuencias constituida por la fundamental y sus
armónicas impares como se muestra en la parte inferior de la Figura 11.1. Los motores de
CD tienen una respuesta de frecuencia de filtro pasabajas. Si la frecuencia de la onda
rectangular es superior a la frecuencia de corte del motor, la fundamental y las armónicas
serán atenuadas por el motor, rescatando el valor medio, C, de la onda. El motor funcionará
de forma similar a si fuese alimentado por una señal constante del mismo valor C. La línea
punteada en la parte inferior de la Figura 11.1 muestra, de forma ideal, el efecto de filtro
pasabajas efectuado por el motor de CD. Dada la condición anterior, un cálculo simple del
valor medio para la onda rectangular en el dominio del tiempo proporciona la relación entre
el valor medio y el ancho  del pulso.
𝐴
𝐶= ∗𝜏
𝑇
Con una señal unipolar, el motor CD girará siempre en una misma dirección y variando el
ciclo de trabajo /T, típicamente entre el 0% y el 100%, se puede variar el valor medio de la
tensión de armadura del motor entre 0 y A voltios y con ello su velocidad desde el reposo al
valor máximo.
La eficiencia de este método reside en el amplificador clase D. Al trabajar en modo de
conmutación, la potencia disipada se compone de tres partes como se muestra, para el caso
de un conmutador con carga resistiva, en la Figura 11.2, y donde, para resaltar su importancia,
se han exagerado el tiempo de subida y de bajada de las señales U e I.
Durante las partes 1 y 2, la potencia disipada es negligible ya que en cada caso una de las dos
variables, U o I, que forman el producto para la potencia se encuentra cerca de cero. Esto es
dependiente de la tecnología del amplificador y en consecuencia de la tensión de saturación
o de la resistencia del conmutador durante el encendido y de las corrientes de fuga del
conmutador durante el apagado. Actualmente, los mejores amplificadores clase D son los
fabricados con transistores MOSFET.
La parte que contribuye significativamente a la potencia disipada es la número 3, durante la
fase de conmutación, ya que ambas señales, U e I, están cambiando y la potencia disipada
presenta picos cuya duración depende del tiempo de subida o de bajada de las señales. Es
claro de esto, que la energía disipada, el área debajo de la curva de potencia, depende
proporcionalmente de los tiempos de subida y bajada de ambas señales U e I. Por ello la
potencia disipada depende proporcionalmente de la frecuencia de la señal de PWM, ya que a
mayor frecuencia, habrá mayor cantidad de conmutaciones y de picos de potencia por unidad
de tiempo, cuya duración es independiente de la frecuencia, solo depende del tiempo de
subida y bajada de las señales.

𝑃 𝛼𝑓
Es por ello que todos los amplificadores clase D y en particular los utilizados para el control
de motores poseen frecuencias máximas de operación para limitar las pérdidas de potencia y
con ello el calentamiento; que es una de las fuentes de deterioro y falla más comunes en
dispositivos semiconductores.

66
U [V] I [A]
1 2 3
A Pd [W]

t
T = Periodo = 1/f
U [V] I [A]
1 2 3
A Pd [W]

t
T = Periodo = 1/f
Figura 11.2: Tensión, corriente y potencia disipada por los conmutadores en un amplificador
clase D

11.2 ¿Cómo controlar la dirección de un motor de CD?


Un puente H es un circuito electrónico que recibe ese nombre debido a la forma de H creada
por la conexión de 4 interruptores semiconductores (BJT o MOSFET) con el motor al centro,
como se muestra en la Figura 11.3. Los interruptores pueden operarse típicamente en parejas,
evitando conectar simultáneamente dos que se encuentren en línea directa entre VCC y tierra
ya que se ocasionaría un cortocircuito.
Con los cuatro interruptores abiertos, Figura 11.3a, el motor puede girar libremente. Al
cerrar selectivamente las parejas de interruptores diametralmente opuestos, se puede hacer
girar el motor en un sentido, Figura 11.3b, o en sentido contrario, Figura 11.3c. Si el cierre y
apertura de los interruptores se realiza rápidamente con una señal de PWM, como se describe
en el punto 11.1, se puede controlar la velocidad del motor.

Figura 11.3: Esquema de operación de un puente H con el motor en modo libre y activado

67
Si se cierra la pareja de interruptores inferiores, como a la izquierda en la Figura 11.4, o los
interruptores superiores, a la derecha en la Figura 11.4, el motor se cortocircuita vía tierra o
VCC, respectivamente; con lo que el motor quema la energía cinética en forma de calor y se
detiene (acción de freno).

Figura 11.4: Operación del puente H para frenar el motor

11.2.1 Puente H basado en un L298N


El L298N es un doble puente H bipolar, integrado en un chip, y usado frecuentemente para
controlar motores de CD o motores paso a paso y que se obtiene ya montado en placas de
bajo costo como la mostrada en la Figura 11.5. Esta placa soporta una corriente máxima de
2A por cada motor y una tensión de alimentación típica para los motores de unos 20V. El
L298 soporta hasta 46V; pero en la placa mostrada, la tensión de los condensadores, de solo
35V, limita la tensión máxima de operación. El L298N es bastante ineficiente, tiene una caída
de tensión total de unos 4V a una corriente de 2A y por ello se calienta mucho y requiere un
disipador de calor, que a veces resulta insuficiente. En la Tabla 11.1 se muestra la forma de
controlar un motor de CD con un puente H basado en L298N.
Tabla 11.1: Control del giro de un motor CD con puente H basado en L298N

ENA IN1 IN2 Estado del motor Figura


L X X Gira libre Figura 11.3a
H L L Detenido (frenado) Figura 11.4
H H L (velocidad máxima) Figura 11.3b
H L H (velocidad máxima) Figura 11.3c
H H H Detenido (frenado) Figura 11.4
PWM H L velocidad controlada por PWM Figura 11.3b
PWM L H (velocidad controlada por PWM) Figura 11.3c

68
Figura 11.5: Puente H basado en L298N. Para utilizar las patillas de ENABLE remueva el
puente negro del canal respectivo y conecte la señal de PWM

El L298N ya ha sido superado por una nueva generación, mucho más eficiente de puentes H
con MOSFET, por ejemplo los basados en el chip MC33926, que posee una resistencia de
encendido muy baja, en el orden de un par de centenas de mΩ y tiempos de subida y bajada
de un par de µs. Por esto, los nuevos puentes H tienen menos pérdidas y se calientan mucho
menos, lo que los habilita para conducir corrientes de 3A, en régimen permanente, sin
requerir de disipador de calor y también a operar a frecuencias de conmutación más altas, de
hasta 20KHz. En la Figura 11.6 se muestra una placa de puente H basada en el MC33926.
Siempre revise la tabla del control del puente H con el que está trabajando; pues existen
diferentes variantes para todas las funciones.

Figura 11.6: Puente H doble basado en el MC33926.

69
11.3 ¿Cómo duplicar la corriente de un puente H doble?
En un puente H basado en el dispositivo LM298N, el cual es un doble puente H, es posible
colocar los dos puentes en paralelo, con el propósito de duplicar la corriente que se puede
suministrar a la carga. Por supuesto que con esto, el puente doble ahora solamente puede
manejar un motor; pero, con el doble de corriente máxima.
Hay que tener cuidado al conectar correctamente las entradas y salidas de los puentes internos
de tal forma que efectivamente las salidas se encuentren en fase y no en contrafase.
Se puede consultar simplemente la hoja de datos del LM298N, donde se encuentra esta
información de primera mano, o seguir la Tabla 11.2 y la Error! Reference source not
found..
Tabla 11.2: Conexiones a poner en paralelo para duplicar la corriente de un puente H doble

Nuevas entradas y salidas Entradas y salidas a poner en paralelo

Entrada 1: DIR_A IN1 e IN4

Entrada 2: DIR_B IN2 e IN3

Control: PWM, ENABLE ENA_A y ENA_B

Salida 1 motor: M_1 OUT1 y OUT4

Salida 2 motor: M_2 OUT2 y OUT3

Figura 11.7: Conexión de puente H doble en paralelo

70
11.4 ¿Cómo medir la corriente que consume un motor de CD?
11.5 ¿Cómo limitar la corriente consumida por un motor de CD?
11.6 ¿Cómo escoger la frecuencia del PWM de potencia?
Hay varios elementos que considerar para escoger la frecuencia 𝑓 de una señal de PWM
de potencia para controlar un motor de CD.
En primer lugar se encuentra la frecuencia de corte del motor de CD a usar. La ecuación
𝐺(𝑠) = muestra la función de transferencia simplificada de un motor de CD. Este
( )
motor tiene un polo en –a en el semiplano izquierdo. La frecuencia de corte del motor es
𝜔 = 𝑎 rad/s, o equivalentemente 𝑓 = 𝑎 2𝜋 Hz. La constante de tiempo dominante del
motor es 𝜏 = 1 𝑎 segundos.
La frecuencia del PWM debe ser mayor que esta frecuencia de corte para que el motor gire
suavemente con velocidad constante y no a saltos bruscos. De aquí se extrae entonces una
frecuencia mínima para el PWM o equivalentemente el periodo máximo del PWM. Cuanto
mayor debe ser esta frecuencia de PWM depende de la atenuación requerida para la
fundamental de la señal de PWM. Si consideramos que un filtro presenta una atenuación de
3dB a la frecuencia de corte y que para valores mucho mayores a esta frecuencia de corte, se
agregan 6dB de atenuación por octava tenemos que la atenuación producida por el motor a
una frecuencia fPWM está dada por la siguiente ecuación:
𝑓
log
𝑓
𝑎𝑡𝑒𝑛𝑢𝑎𝑐𝑖ó𝑛[𝑑𝐵] = 6 ∗
log (2)

Si despejamos la frecuencia del PWM obtenemos:


ó [ ]
∗ ( ) ( )
𝑓 ≥ 10
Tabla 11.3: Atenuación de la fundamental y armónicas de la señal de PWM de amplitud A

Atenuación de la Atenuación de Atenuación de


Frecuencia fundamental (0.637A) la 3ª armónica la 5ª armónica
del PWM
[dB] ( veces) (0.212A) [dB] (0.127A) [dB]
32*fC 30 32 39.5 43.9
64*fC 36 63 45.5 49.9
128*fC 42 126 51.5 55.9
256*fC 48 251 57.5 61.9
512*fC 54 501 63.5 67.9
1024*fC 60 1000 69.5 73.9

71
Ejemplo: Un motor que posee la función de transferencia de velocidad 𝐺(𝑠) = tiene
( )
una frecuencia de corte 𝑓 = 11⁄(2𝜋) = 1.75 𝐻𝑧, para lograr una atenuación moderada de
48dB, (251 veces más pequeña), la frecuencia del PWM debe ser al menos 450 Hz.
En segundo lugar tenemos la frecuencia máxima de trabajo del amplificador clase D a
utilizar, usualmente un puente H. Hay varias clases o generaciones de puentes H; pero, un
puente H típico funciona eficientemente a una frecuencia máxima de unos 5kHz. A
frecuencias mayores, la pérdida excesiva de potencia sobrecalentará el puente H pudiendo
llegar a destruirlo. De aquí se obtiene el periodo mínimo.
Si el control es en tiempo continuo, solo se deben considerar los dos límites anteriores para
seleccionar el periodo del PWM entre ambos límites, cerca del límite superior del periodo,
frecuencia mínima, por las consideraciones de potencia disipada mencionadas en el punto
11.1.
Si el control es de tiempo discreto, en tercer lugar hay que considerar el periodo de operación
del algoritmo de control. El periodo del PWM debe ser menor que el periodo de operación
del algoritmo de control, TS, para que los cambios en el ciclo de trabajo del PWM se vean
reflejados, lo antes posible, en el valor medio de la tensión de armadura y esto haya tenido
tiempo para afectar la velocidad del motor antes del siguiente ciclo de control, punto en el
cual se toma una muestra nueva de la velocidad del motor. En caso de no satisfacerse la
condición anterior, se introducirá un retardo indeseable y no modelado dentro del lazo de
control que puede conducir, en el mejor de los casos, a una operación incorrecta del sistema
de control y eventualmente también puede producir oscilaciones en el sistema.
En la Figura 11.8 se muestra el cambio de ciclo de trabajo del PWM para el caso de que el
periodo del PWM sea menor que el periodo de muestreo T S, o periodo del lazo de control.
En la parte inferior de esa figura se muestra la velocidad del motor y el punto en el cual se
toma una medida de dicha velocidad cada periodo de muestreo T S. Las dos primeras muestras
recogen ambas el valor 𝜔 , se supone que el ciclo de trabajo ha permanecido constante
durante varios periodos de muestreo anteriores. Después de cambiar el ciclo de trabajo a un
valor mayor, cambia el valor medio de la señal de PWM, esto provoca que la velocidad del
motor también comience a aumentar, (un poco acelerado en la imagen), note que el eje del
tiempo no es continuo en las gráficas. Debido a que el periodo de muestreo es mayor que el
periodo del PWM, cuando se toma la siguiente muestra de la velocidad del motor, ya ésta ha
aumentado ligeramente, por lo que no se introduce retardo en la acción de control. La
velocidad del motor alcanzará el valor final 𝜔 , una vez transcurrido el tiempo de
estabilización del 2%, que es igual a 4 veces la constante de tiempo dominante, 𝜏 , del sistema
motor en lazo cerrado.

𝑡 % = 4∗𝜏

72
U[V]
A

t
[rad/s]

Figura 11.8: Efecto del cambio de ciclo de trabajo del PWM en la velocidad del motor

Una regla simple es hacer el periodo del PWM de 5 a 10 veces más pequeño que el periodo
de muestreo del sistema de control, recordando que a mayor frecuencia, mayores son las
pérdidas en el puente H. Verifique siempre la frecuencia máxima de operación en la hoja de
datos del puente H utilizado.
Ejemplo: Para un sistema de control que se ejecuta cada 10ms sería recomendable un periodo
de PWM de 1ms, (fPWM = 1kHz).

11.7 ¿Cómo producir una tensión CD de potencia a partir de un valor


almacenado en memoria?
Supongamos que el valor en memoria es un número real que representa un valor de tensión
de armadura, Ua, para el motor de CD. La conversión se realiza por el programa, en software,
e inicia normalizando el valor absoluto de tensión Ua al dividirlo entre A, otro valor real
positivo, la tensión de alimentación para el motor del puente H. Luego este valor normalizado
se escala por el valor total de cuentas (Nmáx.), que posee el generador de PWM del procesador
utilizado. El signo de la tensión Ua se utiliza para controlar la dirección de giro del motor a
través del puente H como se describe en el punto 11.2.
En un microcontrolador, Nmáx. podría ser 2n, con n como el tamaño de palabra del generador
de PWM (8, 10, 12, 16 bits); mientras que en un PSoC, el valor a utilizar para las cuentas
totales Nmáx. depende: a) de la frecuencia del reloj aplicado al generador de PWM y b) del
periodo TPWM seleccionado; por lo que este valor de cuentas totales es usualmente menor
que 2n.

𝑁 á . = 𝑓𝑟𝑒𝑙𝑜𝑗 ∗𝑇

73
Procesador

| |

)
dir

Normalización, escalado y saturación Generación Puente H


de PWM

Figura 11.9: Conversión de un valor en memoria a un valor físico en la armadura de un motor


de CD

El segundo paso es la generación del PWM con un ancho del pulso , típicamente producido
por el hardware del procesador o circuito especializado de PWM; que debe haber sido
previamente configurado para producir un PWM con un periodo T PWM.
El tercer paso es realizado por el hardware del puente H que amplifica la señal de PWM, de
amplitud VCC, generada por el procesador y produce un PWM de potencia con amplitud A.
Finalmente, como se describe en el punto 11.1, el motor con su comportamiento pasabajas
termina extrayendo el valor medio 𝑼𝒂 del PWM de potencia.
En la Figura 11.8 se muestra el proceso completo e ideal de conversión, que no toma en
cuenta las pérdidas de tensión en el puente H. Esto puede corregirse normalizando no contra
A; sino, contra el valor medido, con un voltímetro de CD, entre las terminales del motor con
el PWM al 100% de ciclo de trabajo. En la figura se muestra el proceso de saturación que
debe realizarse sobre el valor N de tal forma que no exceda el valor de cuentas máximo,
Nmáx., del PWM.
El siguiente código para PSoC ejemplifica los cálculos para un sistema cuya salida máxima
de tensión es de 5 voltios y posee un generador de PWM con un reloj de 1 MHz configurado
con un periodo de 500µs. En este caso la salida es unipolar de 0 a 5V; por ello, en vez de
tomar el valor absoluto, se evitan los valores negativos poniendo a cero la salida.
En el recuadro se muestran las definiciones de las constantes para este ejemplo, donde
PWM_FACTOR es el cociente del número máximo de cuentas del PWM dividido entre la
tensión máxima de salida, en este caso 500 cuentas dividido entre 5V es igual a 100
cuentas/V.

74
/* Constantes globales */
#define V_MAX 5
#define PWM_MAX 499 // PWM 100% con Tpwm = 500us @1MHz
#define N_MAX PWM_MAX+1 // 500 cuentas
#define PWM_FACTOR N_MAX/V_MAX // cuentas/voltio con Tpwm = 500us @1MHz

A continuación la parte del código que escala y produce una salida de tensión unipolar vía
PWM.

/* Escala el real mk al rango del PWM y lo convierte a entero */


pwm = (int16) (mk*PWM_FACTOR);

/* Satura el valor del PWM */


if (pwm > PWM_MAX) {
pwm = PWM_MAX;
}
/* Elimina posibles salidas negativas */
else if (pwm < 0) {
pwm = 0;
}

PWM_WriteCompare(pwm); // escribe al generador de PWM

En un caso general, cuando mk es un número real cuyo valor negativo implicaría una salida
de tensión negativa; A es un real positivo y además Nmáx. no es múltiplo de A, se tendría un
cálculo como:
𝑎𝑏𝑠(𝑚𝑘)
𝑝𝑤𝑚 = 𝑒𝑛𝑡𝑒𝑟𝑜 ∗𝑁 á + 0.5
𝐴
Donde, primero se dividen los números reales, teniendo el cuidado de tomar el valor absoluto
de mk; luego, se multiplican por el entero y finalmente se asigna a la variable pwm el entero
más cercano al resultado, aprovechando el redondeo que se produce al sumar ½ al resultado
previo. Ejemplo, con mk = -4.26V, A = 7.2V y Nmáx. = 500:
𝑎𝑏𝑠(−4.26)
𝑝𝑤𝑚 = 𝑒𝑛𝑡𝑒𝑟𝑜 ∗𝑁 á + 0.5 = 296
7.2

75
/* Este código es para una salida bipolar con PWM y un puente H */
/* Escala el absoluto mk al rango del PWM y lo convierte a entero */
/* No olvide incluir la biblioteca math.h */
pwm = (int16) ((fabs(mk)/V_MAX)*N_MAX+0.5); // Use abs para enteros

/* Satura el valor del PWM */


if (pwm > PWM_MAX) {
pwm = PWM_MAX;
}
/* Define la dirección del puente H */
if (mk >= 0) {
CyPins_SetPin(DIR1_0);
CyPins_ClearPin(DIR2_0);
}
else {
CyPins_ClearPin(DIR1_0);
CyPins_SetPin(DIR2_0);
}
PWM_WriteCompare(pwm); // escribe al generador de PWM

11.8 Cómo producir una señal sinusoidal con PWM?


El método más común para producir una señal sinusoidal es modular de manera sinusoidal
el ciclo de trabajo de una señal de PWM, llamada la portadora. En la Figura 11.10 se ilustra
el método llamado PWM de suboscilación (SPWM) [5]. La frecuencia del PWM debe ser
mayor que la señal sinusoidal a generar. En un sistema digital se puede almacenar en una
tabla la señal de referencia sinusoidal directamente como valores del ciclo de trabajo. Si hay
limitaciones de memoria, en vez de almacenar toda la tabla, se puede almacenar solo un
cuadrante y producir los otros 3 cuadrantes a partir del cuadrante almacenado a través de un
algoritmo adecuado.
La frecuencia con la que se lee la tabla y se actualiza el generador de PWM determina la
frecuencia de la señal sinusoidal producida. Por ejemplo, se utiliza una frecuencia de PWM
de más de 9.6KHz para generar una sinusoidal de 60Hz. Una tabla de 160 valores
proporcionará una resolución de 2.25° eléctricos y una de 200 valores dará una resolución de
1.8° eléctricos. En sistemas polifásicos las otras fases se producen leyendo la tabla con
valores de desplazamiento (offset) que corresponden al desfase eléctrico de las señales.
Se puede producir una señal unipolar de PWM y utilizar un puente H para convertirla en
bipolar sobre la carga; o generar directamente una señal de PWM bipolar. Hay que tener en
cuenta que los valores de ciclo de trabajo del PWM siempre deben ser positivos y que el
signo del dato en memoria es el que determina la dirección de salida del puente H, o lo que
se utilice para producir la señal bipolar, como se muestra en la Figura 11.9.

76
Figura 11.10: Señal de PWM bipolar modulada de forma sinusoidal

11.9 ¿Por qué producir un PWM simétrico en lugar de uno asimétrico?


Es mucho más simple generar un PWM asimétrico; pero uno simétrico tiene la ventaja de
producir menos armónicas de banda lateral y por lo tanto menos interferencias armónicas;
por lo que debe de preferirse este último método. Las armónicas de banda lateral solamente
aparecen cuando se modula la señal de PWM, (se cambia el ciclo de trabajo), no cuando el
ancho del pulso permanece constante. La modulación simétrica de PWM elimina todos los
armónicos de banda lateral de orden par de los armónicos pares de la fundamental, así como
todos los armónicos de banda lateral de orden impar de los armónicos impares de la
fundamental [4]. El contenido armónico reducido es una ventaja significativa de la
modulación simétrica.

Asimétrico

t
T T T
Simétrico

t
Figura 11.11: PWM asimétrico y simétrico

77
11.10 ¿Cómo conectar interruptores de fin de carrera en un sistema de
traslación con motor CD?
En la figura se muestra un par de microinterruptores con sendos diodos colocados en paralelo
con el contacto común y el contacto normalmente cerrado de un microinterruptor y en serie
con un motor de CD. El circuito tiene tres estados:
a) Cuando el objeto que se desplaza por acción del motor se encuentra lejos de cualquiera de
los microinterruptores éstos se encuentran normalmente cerrados, cortocircuitando los
diodos, por lo que la corriente puede circular sin problema en cualquier dirección y hacer que
el motor se mueva hacia la izquierda o hacia la derecha, como se muestra en la parte superior
de la imagen.
b) Cuando el objeto llegue al final de la carrera en cualquiera de las direcciones activará el
microinterruptor de ese lado conmutando éste a la posición de normalmente abierto, posición
en la cual el diodo respectivo queda en serie con el circuito, en polarización inversa, por lo
que bloqueará la corriente y detendrá el movimiento del motor en esa dirección.
c) Con alguno de los microinterruptores activado la corriente solamente podrá circular por el
diodo cuando éste se polarice directamente y la corriente circulará en la dirección en la que
el objeto movido por el motor se aleja del microinterruptor, hacia la derecha en la imagen al
centro de la figura y hacia la izquierda en la imagen de abajo en la figura.

Figura 11.12: Circuito para conectar los límites de carrera de un desplazamiento lineal

78
Capítulo 12: Corrección de no linealidades
12.1 ¿Cómo evitar o combatir la fricción estática en motores CD?
12.2 ¿Cómo linealizar la señal de un sensor?
Hay varias formas para linealizar la salida de un sensor, todo depende de la cantidad de
información que se tenga del dispositivo, del rango a linealizar y de la cantidad de variables
involucradas.
Se puede obtener el modelo lineal para el sensor alrededor de un solo punto de operación o
alrededor de varios puntos, con lo que se puede realizar una linealización por tramos.
a) Si se cuenta con la ecuación de salida, en una o varias variables, se puede obtener
el modelo lineal a través del desarrollo de la ecuación en una serie de Taylor evaluando el
resultado en los puntos de equilibrio deseados.
b) Si se tiene una gráfica con el comportamiento del sensor, en el caso de una sola
variable, se puede realizar una aproximación extrayendo la pendiente de la gráfica también
en los puntos de equilibrio deseados.
En el caso a) para linealizar una función de varias variables se desarrolla la función en una
serie de Taylor.
𝜕𝑓(𝑥 − 𝑥̅ ) 𝜕𝑓(𝑧 − 𝑧̅)
𝑦 = 𝑓(𝑥, 𝑧) = 𝑓(𝑥̅ , 𝑧̅) + +
𝜕𝑥 𝜕𝑧
1 𝜕 𝑓(𝑥 − 𝑥̅ ) 𝜕 𝑓(𝑥 − 𝑥̅ )(𝑧 − 𝑧̅) 𝜕 𝑓(𝑧 − 𝑧̅)
+ +2 + +⋯
2! 𝜕𝑥 𝜕𝑥 𝜕𝑧

Luego se evalúa 𝑓(𝑥, 𝑧) en el punto de operación 𝑥 = 𝑥̅ , 𝑧 = 𝑧̅ y se obtiene 𝑦.

𝑦 = 𝑓(𝑥̅ , 𝑧̅) = 𝑓(𝑥, 𝑧)| ̅, ̅

Por ser muy pequeños se desprecian los términos de orden superior. Sustituyendo y
despejando se obtiene:
𝜕𝑓(𝑥 − 𝑥̅ ) 𝜕𝑓(𝑧 − 𝑧̅)
𝑦−𝑦 = + = 𝑎(𝑥 − 𝑥̅ ) + 𝑏(𝑧 − 𝑧̅)
𝜕𝑥 𝜕𝑧

Con 𝑎 = y𝑏 = para finalmente obtener:


̅, ̅, ̅, ̅,

∆𝑦 = 𝑎∆𝑥 + 𝑏∆𝑧
Como ejemplo se hará la linealización de un sensor de efecto Hall utilizado en la planta de
un levitador magnético en configuración inestable y cuya tensión de salida, sin tomar en
cuenta el ruido, para el caso de encontrarse el sensor cerca de la bobina, es:

79
𝛽
𝑒=𝛼+ + 𝛾𝑖
𝑑
Donde:
𝑒 es la tensión de salida
𝛼, 𝛽, y 𝛾 son constantes del sensor
𝑖 es la corriente de la bobina
𝑑 es la distancia del imán a la bobina

Se despeja la distancia
𝛽
𝑑=
(𝑒 − 𝛼 − 𝛾𝑖)

Se obtienen las derivadas parciales respecto a la tensión e y la corriente i alrededor del punto
de equilibrio 𝑒 = 𝑒̅ , 𝑖 = 𝚤̅, 𝑑 = 𝑑̅

𝜕𝑑 − 𝛽
𝑎= =
𝜕𝑒 ̅, ,̅ 2(𝑒 − 𝛼 − 𝛾𝑖) ̅, ,̅

𝜕𝑑 𝛾 𝛽
𝑏= =
𝜕𝑖 ̅, ,̅ 2(𝑒 − 𝛼 − 𝛾𝑖) ̅, ,̅

Evaluando en el punto de equilibrio 𝑒̅ = 3.34 𝑉, 𝚤̅ = 0.27 𝐴, 𝑑̅ = 0.02 𝑚, con las


constantes del sensor 𝛼 = 2.48 𝑉, 𝛽 = 2.92𝑥10 𝑉𝑚 , 𝛾 = 0.48 𝑉/𝐴 según [22].
𝑚
𝑎 = −0.01369
𝑉
𝑚
𝑏 = 0.00657
𝐴

Por lo que la distancia en metros para valores alrededor del punto de equilibrio será:

𝑑 = −0.01369(𝑒 − 3.34) + 0.00657(𝑖 − 0.27) + 0.02 𝑚

Para no tener que medir la corriente, ésta puede ser estimada de forma aproximada a partir
( )
de la tensión de la bobina, dividida entre la resistencia de la misma 𝑖(𝑡) = . La tensión
u(t) es conocida; pues, es la acción de control. El problema de esta aproximación es que al
variar la tensión u(t) rápidamente, la corriente estimada sería ruidosa; por lo que es
conveniente filtrar en pasabajas y que mejor manera para esto que utilizar la propia función
de transferencia de la bobina como filtro:

80
𝑅
1 𝑈(𝑠) 𝐿
𝐼(𝑠) = 𝑈(𝑠) = ∗
𝑠𝐿 + 𝑅 𝑅 𝑅
𝑠+
𝐿
Simulación de la acción del estimador de corriente
1.5
Tensión
Corriente estimada

0.5
Amplitud [V]

0
Amplitud [A]

-0.5

-1

-1.5
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Tiempo [s]
Figura 12.1: Corriente estimada para la bobina del levitador magnético con una tensión
ruidosa

Se sustituyen los valores para R = 2.4 Ω y L = 0.015 H del caso en estudio para obtener la
función de transferencia de forma numérica.
1
𝐼(𝑠) = 0.015 𝑈(𝑠)
2.4
𝑠+
0.015

Al convertir esta función a tiempo discreto, con un periodo de muestreo de 1 ms se obtiene:

𝐼(𝑧) 0.0617
= , 𝑇 = 0.001 s
𝑈(𝑧) 𝑧 − 0.8521

Se transforma al dominio del tiempo discreto la función del filtro y la ecuación de diferencias
es:
𝑖(𝑘) = 0.0617𝑢(𝑘 − 1) + 0.8521𝑖(𝑘 − 1)

81
En la Figura 12.1 se muestra la corriente estimada con ayuda del filtro a partir de una tensión
ruidosa y se puede apreciar que el ruido de la tensión ha sido eliminado por la acción de
filtrado.

82
Capítulo 13: Misceláneos
13.1 ¿Cómo controlar la posición de un servo RC?
Los servos RC utilizan una señal de PWM de típicamente 20 ms de periodo, con una duración
del pulso de entre 1ms y 2 ms (no se le llama ciclo de trabajo, pues no se referencia al periodo
de la onda como en el caso del PWM de potencia para controlar un motor CD, vea el punto
11.1). Poseen una posición neutra, alrededor de 1.5 ms de duración del pulso, como se
muestra en la Figura 13.1. La posición neutra se define como la posición en la que el servo
se encuentra en la mitad de la rotación mecánica total, pudiendo potencialmente girar el
mismo ángulo en el sentido de las agujas del reloj (CW) como en el sentido contrario a las
agujas del reloj (CCW). No todos los servos son iguales y algunos tendrán diferentes
restricciones en su rotación.

A
Pulso (1 ms mín.)
90°

t
A
Pulso (1.5 ms)

t
Periodo 20 ms
A
Pulso (2 ms máx.)
90°

Figura 13.1: Señal de control de un servo RC

Existen algunos sistemas modernos que han heredado este método de duración del pulso de
entre 1ms y 2ms para definir la variable a controlar; pero, ya no están apegados a un periodo
de 20ms; sino, que admiten periodos mucho más cortos, ligeramente mayores a 2ms
(1/490Hz).
También los controladores electrónicos de velocidad para motores sin escobillas (conocidos
como ESC), que son utilizados en vehículos voladores autónomos tales como los

83
cuadricópteros, han heredado este mecanismo de comunicación basado en duración del pulso
para establecer la velocidad del motor; solo que con pulsos y periodos más cortos. Por
ejemplo el método llamado Oneshot125 utiliza pulsos de entre 125us y 250us, con un periodo
ligeramente mayor a 250us, para ajustar entre el 0% y el 100% la velocidad del motor
controlado. También hay otros protocolos como el Oneshot42 (42us-84us) y la lista sigue
creciendo.

13.2 ¿Cómo puedo ejecutar varios procesos por interrupciones a


diferentes intervalos de tiempo?
13.3 ¿Cómo limitar la tensión y la corriente de una fuente Agilent?
13.4 ¿Cómo aislar las tierras entre dos circuitos?
13.5 ¿Cómo conectar las tierras entre circuitos de control y de
potencia?
13.6 ¿Cómo conectar las tierras entre la sección digital y la sección
analógica de un circuito electrónico mixto?
En general en circuitos de electrónica mixta, la tierra analógica y la tierra digital deben
discurrir por separado en el circuito y solo deben interconectarse en un punto a la fuente de
alimentación, en una forma de conexión en estrella. Para lograr esto, es conveniente que cada
parte del circuito se alimente desde una fuente separada y por lo tanto también debe poseer
tierras separadas.
Es un hecho que los circuitos digitales son ruidosos. Los circuitos TTL y CMOS, consumen
picos de corriente grandes y rápidos durante la conmutación. Las etapas lógicas, poseen
cientos de milivoltios de inmunidad al ruido y generalmente requieren únicamente de un
condensador entre sus patillas de alimentación, lo más cerca del cuerpo del componente, para
desacoplar la fuente. Por otro lado, los circuitos analógicos son bastante vulnerables al ruido,
tanto en los buses de la fuente de alimentación como en la tierra, por lo que es necesario
separar los circuitos analógicos y digitales para evitar que el ruido digital corrompa el
rendimiento analógico. Tal separación implica la separación de los retornos de tierra y los
buses de potencia. [23] como se muestra en la Figura 13.2.

84
Figura 13.2: Tierras en un circuito de electrónica mixta

13.7 ¿Cómo eliminar el rebote mecánico de un interruptor pulsador?


Los interruptores pulsadores mecánicos presentan en mayor o menor grado, un rebote
mecánico al ser operados. Esto se traduce en un ruido eléctrico en la señal obtenida de dichos
elementos como puede verse en la Figura 13.3. Este rebote es variable y dura varios
milisegundos, un poco más de 2.5ms en la gráfica. Un componente que reciba dicha señal
con rebote, si es lo suficientemente rápido, podría interpretar un único cambio en el
interruptor como varios y operar erráticamente. Para evitar esto, se requiere eliminar el rebote
de dicha señal. La eliminación del rebote se puede realizar de varias formas:
13.7.1 Eliminación del rebote en hardware
Con un circuito integrado especializado en eliminar el rebote, por ejemplo [6]; o con un
circuito similar al mostrado en la Figura 13.4, con un reloj de baja frecuencia, adaptado a la
interacción con humanos y donde la señal activa en bajo del pulsador se ha invertido para
tener lógica positiva.

85
Figura 13.3: Rebote mecánico de un interruptor pulsador, yendo de alto a bajo

Figura 13.4: Eliminador de rebote con dos flip-flops.

La Figura 13.5 muestra el diagrama de tiempo del eliminador de rebotes realizado con dos
flip-flops. Se puede apreciar que la señal del pulsador, usando lógica positiva, debe estar
activa como mínimo entre dos flancos de subida del reloj consecutivos, para que la salida se
active. Esto significa que el circuito funciona como un filtro pasa bajas digital, que no admite
frecuencias de entrada mayores a 1/T, el recíproco del periodo de reloj. La frecuencia para
este reloj puede ser desde unos 10Hz a 200Hz.

86
clock_1
T

Pulsador

Button

Figura 13.5: Diagrama de tiempo del eliminador de rebote con dos flip-flops.

En un PSoC ya existe un componente de hardware que sirve para eliminar el rebote. Su


estructura interna, que puede verse en su hoja de datos, es un poco más compleja que la de la
Figura 13.4; pero, está basada en el mismo principio. Este componente de PSoC no solo
elimina el rebote presente en la señal de entrada d; sino, que también detecta flancos, de
subida, bajada o ambos, y produce las salidas correspondientes.

Figura 13.6: Eliminador de rebote como componente en un PSoC

13.7.2 Eliminación del rebote en software


Con una máquina de estados como la que se muestra en la Figura 13.7, la cual posee cuatro
estados, o a través de un pequeño programa que emula el comportamiento del circuito con
dos flip-flops de la Figura 13.4. En ambos casos, el programa debe ejecutarse a intervalos
regulares, de preferencia bajo el control de un temporizador y usualmente dentro del proceso
de una interrupción.

87
Figura 13.7: Diagrama de una máquina de estados finitos para eliminar el rebote [7].

El programa para eliminar el rebote requiere dos variables binarias para emular los flip-flops
y una tercera variable binaria para la salida, y todas se inician en estado inactivo. En el
siguiente extracto de código, se presume que el proceso se ejecuta dentro de una interrupción
por hardware que ocurre con un periodo seleccionado adecuadamente para eliminar el
rebote; por ello estas variables son declaradas globales, para que retengan el estado entre
interrupciones, y volátiles; para que el compilador no trate de optimizar su uso.

/* isr global variables */


volatile bool step_1 = false; // Memory variables for button debouncing
volatile bool step_2 = false;
volatile bool step = false; // Debounced button state

El siguiente extracto de código, que usualmente se ejecuta al inicio del proceso de atención
de interrupciones, realiza en software el equivalente al hardware de la Figura 13.4.

/* isr debounce task */


step_2 = step_1;
step_1 = !(CyPins_ReadPin(START_0));
step = (step_1 & step_2);

13.8 ¿Cómo hacer una máquina de estados finitos en lenguaje C?


Lo primero es crear un nuevo tipo enumerado, con los nombres de los estados. Una primera
variable de este tipo enumerado puede también ser creada e iniciada durante esta fase.

/* enumerated type */
enum SingleStepState {WAIT, RUN, PRESS} ButtonState = WAIT;

88
Luego, si no se realizó durante el primer paso, no lo haga dos veces, se crea la variable del
tipo enumerado que contendrá el estado de la máquina y se define su estado inicial. También
se crean cualesquiera variables de salida, del tipo deseado y con el estado inicial necesario.

/* Variables */
enum SingleStepState ButtonState = WAIT; // State
bool EJECUTAR = false; // Output

Finalmente se crea la máquina de estado con una sentencia switch. Cada caso es un estado
de la máquina. Dentro de cada estado se toman las decisiones y se colocan las salidas en los
valores adecuados. Un último estado, default, se emplea para regresar la máquina al
estado de inicio en caso de que algo cause el cambio a un estado no definido.
Cada vez que se ejecuta la sentencia switch, equivale a un ciclo del reloj de la máquina de
estado; por lo que el periodo de reloj de la máquina dependerá de cuánto tarda la ejecución
del lazo en el que se encuentra dicha sentencia, lo cual puede ajustarse con un retardo o
ejecutando el lazo dentro de una interrupción provocada por un temporizador interno o
externo.
La Figura 13.8 muestra el diagrama de estados de la máquina ejemplo. Esta máquina ejecuta
un proceso una única vez por cada presión de un botón pulsador. La máquina se inicia en el
estado de espera (WAIT) y permanece en ese estado, con la salida apagada, mientras el botón
no se haya presionado. Cuando se presiona el botón, cambia inmediatamente al estado de
ejecución (RUN) activando la salida y sin depender del estado del botón, pasa al siguiente
estado (PRESS), estado en el cual se mantiene, con la salida apagada, mientras el botón siga
presionado. Al dejar de presionar el botón la máquina regresa al estado inicial (WAIT).

89
/* State machine for single step button action */
switch (ButtonState) {
case WAIT:
ButtonState = button? RUN:WAIT;
EJECUTAR = false;
break;
case RUN:
ButtonState = PRESS;
EJECUTAR = true;
break;
case PRESS:
ButtonState = button? PRESS:WAIT;
EJECUTAR = false;
break;
default: ButtonState = WAIT;
} // switch

Figura 13.8: Diagrama de estados de una máquina para ejecutar un proceso una única vez
cuando un botón definido se presiona (Detector de flanco positivo).

13.9 ¿Cómo hacer que al presionar un botón se ejecute una operación


solo una vez?
En el punto 13.8 se muestra un ejemplo de una máquina de estado en lenguaje C, la Figura
13.8 muestra el diagrama de estados de tal máquina. Esta máquina tiene como objetivo
producir un único pulso, con la duración de un ciclo de reloj, cada vez que un botón se
presiona. En la Figura 13.9 se muestra el diagrama de tiempo de dicha máquina en el que se
puede apreciar que la máquina es en realidad un detector de flancos positivos. Si el periodo

90
del reloj de la máquina de estados es mayor que el tiempo de rebote mecánico del botón,
entonces no es necesario ningún otro paso para eliminar dicho rebote. En caso contrario,
habrá que primero eliminar el rebote del botón, antes de utilizar esa señal en esta máquina de
estados.
La máquina de estado es iniciada en el estado WAIT y permanece en ese estado, con la salida
inactiva, en bajo, mientras el botón no se presione. Al presionar el botón, la máquina cambia
al estado transitorio RUN, que dura exactamente un ciclo de reloj, donde se activa la salida,
para luego pasar al estado PRESSED. La máquina permanece en este último estado, con la
salida en bajo, mientras no se libere el botón. Al dejar de presionar el botón, la máquina
regresa al estado WAIT y el ciclo se repite.

Figura 13.9: Diagrama de tiempo de la máquina de estado para ejecutar un proceso una única
vez al presionar un botón.

Como se trata de una máquina realizada en software, la salida EJECUTAR es simplemente


una variable, que luego en otra parte del lazo de ejecución, posteriormente a la ejecución del
proceso de transición de la máquina de estados, debe ser probada para determinar si el
proceso debe ejecutarse o no. Por otro lado, en el estado RUN, en vez de poner el valor de la
variable EJECUTAR, se podría invocar directamente a un proceso o función para su
ejecución inmediata; o el proceso podría ser tan simple que se ejecute directamente en el
estado RUN. Como ejemplo de esto último podría ser el caso de un par de botones para
incrementar o decrementar un contador, entonces dentro del proceso RUN de cada botón, se
incrementaría o decrementaría directamente el contador en cuestión. O en una sola máquina
de estados más compleja, se podría evaluar los dos botones simultáneamente, y de una vez
incrementar o decrementar el contador.

13.10 ¿Qué son los números Qm.n?


Los números Q.m.n son números utilizados para representar números reales con un grado
de exactitud constante. En esta numeración se tiene un bit de signo, representado por Q, una
parte entera de m bits y una parte fraccionaria de n bits. Por lo que se interpreta el número
como si “virtualmente” tuviese un punto decimal en el medio de los m.n bits. La resolución
de esta numeración está data por 1/N donde N = 2n. La representación con signo se hace en
complemento a dos, lo que facilita las operaciones con estos números. Los números enteros
con signo se podrían interpretar como Qm.0; o sea que no tienen parte decimal y su resolución

91
es 1. La suma del bit de signo más la longitud de la parte entera más el tamaño de la parte
fraccionaria (1+m+n), se hace coincidir usualmente con el ancho de la palabra del contenedor
de datos utilizado.
NOTA: Existen otras notaciones para números Q que pueden no incluir el valor de m y éste
debe ser inferido como 0 o 1 o también puede ser que m exista en incluya el signo o no. Aquí
nos referiremos solamente a los números Q descritos en la Figura 13.10.

Q m n
signo parte entera parte fraccionaria

Figura 13.10: Formato de los números Q.m.n

Se puede tener un ancho de palabra de 8, 16, 32 bits. Para una palabra de 8 bits podría por
ejemplo definir un número Q1.6, con una resolución de 0.015625 o Q3.4, con una resolución
de 0.0625. Una selección común en máquinas de 32 bits es Q1.14, en un contenedor de 16
bit; debido a que, al multiplicar dos números, el contenedor para el resultado debe tener el
doble del tamaño, en este caso sería 32 bits, que es el tamaño del registro de una máquina
como la descrita. También para procesamiento digital de señales en una máquina similar, un
tipo común es el Q0.31, que no tiene parte entera, y para el cual, el producto de dos números
de este tipo produce un resultado de 64 bits, que se almacena normalmente en dos registros
de 32 bits. La escogencia del tipo de número Q usualmente depende de la resolución deseada
para los cálculos. A diferencia de los números flotantes, la resolución de los números Q
permanece constante en todo el rango de almacenamiento, que para un número Q.m.n es:
[ -2m, … , 0, … , (2m – 1/n) ]

13.11 ¿Cómo escoger la resolución para un tipo Qm.n?


Debe prestarse atención al rango de los valores de entrada y de salida; así como a la
resolución que tengan los datos de entrada para poder escoger el tipo Qm.n a utilizar.
Por ejemplo, se tiene un sistema en el cual se utiliza un codificador óptico incremental de
4000 cpr para medir un ángulo y se controla un motor de 12 voltios en la salida.
La resolución de entrada dada por el codificador es:
2𝜋
𝑟𝑒𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛 = = 0.00157 𝑟𝑎𝑑/𝑐𝑢𝑒𝑛𝑡𝑎
4000
El recíproco de la resolución de entrada es:
1 4000
= ≈ 637 𝑐𝑢𝑒𝑛𝑡𝑎𝑠/𝑟𝑎𝑑
𝑟𝑒𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛 2𝜋
La potencia de 2 que contiene a 637 es 210, que es igual a 1024; por lo que se requieren 10
bits para la fracción. Si se utiliza un contenedor de 16 bits, descontando la fracción y el bit
de signo, quedan 5 bits para la parte entera, lo que es suficiente para contener los valores de

92
salida. El tipo será entonces Q5.10 que tiene una resolución de 1/1024 = 0.0009766 y su
rango es de [-32, 31.999].
Si se desea aumentar la resolución y se acepta el riesgo potencial de saturar el contenedor de
datos durante la suma o resta, se podría usar un tipo Q4.11; el cual tendría una resolución de
0.0004883 y un rango de [-16, 15.9995], capaz aun de contener directamente los valores de
salida.
También se podría usar un tipo común, tal como el Q1.14 o el Q0.15, que poseen mayor
resolución; pero, para poder utilizar estos tipos se requeriría además un proceso de
normalización de los datos de entrada y una desnormalización a la salida.

13.12 ¿Cómo convertir números en punto flotante a Qm.n y viceversa?


13.12.1 Realizando los cálculos manualmente
13.12.1.1 De punto flotante a Q
a) Multiplique el número flotante por 2n.
b) Redondee al entero más cercano.
Ejemplo con Q1.14:

𝑄𝑇𝑒𝑠𝑡 = 𝑟𝑜𝑢𝑛𝑑(1.23456 ∗ 16384) = 20227 = 0x4F03 = 0100111100000011b


13.12.1.2 De Q a punto flotante
a) Convierta el número a punto flotante como si fuese un entero simple
b) Multiplique el número resultante por 2-n.
Ejemplo:

𝐹𝑇𝑒𝑠𝑡 = 20227/16384 = 1.234558105


13.12.2 Con el precompilador de C
13.12.2.1 De punto flotante a Q

#define Q1_14_NUMBER(X) (int16) ((X)*(16384)) // 2^14 = 16384

Ejemplo:

int16 QTest = Q1_14_NUMBER(1.23456);

93
13.13 ¿Cómo realizar operaciones aritméticas con números Q.m.n?
13.13.1 Realizando los cálculos manualmente
Los números Q son fracciones, el numerador se almacena en la variable y el denominador
común, que es d = 2n, se infiere durante las operaciones y a la hora de interpretar el resultado.
Se muestran las operaciones matemáticas básicas con dos números Q N 1 y N2.
Suma, puede requerir saturación para evitar el desbordamiento:
𝑁 𝑁 𝑁 +𝑁
+ =
𝑑 𝑑 𝑑
Resta:
𝑁 𝑁 𝑁 −𝑁
− =
𝑑 𝑑 𝑑
Multiplicación, requiere normalización:
𝑁 𝑁 𝑁 ∗𝑁 𝑁 ∗𝑁
∗ = ∗𝑑 =
𝑑 𝑑 𝑑 𝑑
División, requiere normalización:
𝑁 𝑁 𝑁 /𝑁 𝑁 /𝑁
/ = /𝑑 =
𝑑 𝑑 𝑑/𝑑 𝑑
Como el denominador es una potencia de 2, la multiplicación se puede implementar como
un desplazamiento aritmético hacia la izquierda y la división como un desplazamiento
aritmético hacia la derecha.
Para mantener la precisión, los resultados intermedios de la multiplicación y la división deben
tener una precisión doble, especialmente al acumular resultados y al devolver el resultado a
la precisión original, debe redondearse el valor intermedio.
13.13.2 Con una biblioteca especializada
Con la biblioteca CMSIS DSP

94
Temas:
Alimentación eléctrica, tierras
La placa posee tres tipos de tierra:
GND - Este es la tierra universal donde todos los reguladores son referidos. Tanto Vssd como
Vssa conectan a esta tierra a través de una conexión en estrella.
Vssd - Esta es la tierra digital y cubre los circuitos digitales de la placa, como RS-232 y LCD.
Vssa - Esta es la tierra analógica y cubre la puesta a tierra de los circuitos analógicos presentes
en la placa, como el bloque de referencia.
Protección de circuitos
Mediciones
La ley de Faraday indica que la tensión inducida en una espira al cambiar en el tiempo el
campo magnético es:
∆(BA)
𝜖=−
∆𝑡
Si consideramos que el área se mantiene constante, la podemos sacar y la ecuación queda:
∆(B)
𝜖 = −𝐴
∆𝑡
En todo caso, la tensión inducida es proporcional al área de la espira, si reducimos, de forma
estática, el área, la tensión inducida se reduce.

95
Capítulo 14: Referencias
[1] “Squeeze 10-Bit Performance From An 8-Bit DAC”. En línea, disponible en:
http://electronicdesign.com/analog/squeeze-10-bit-performance-8-bit-dac, consultado
en abril 2017.
[2] “TimerOne & TimerThree Libraries”. En línea, disponible en:
https://www.pjrc.com/teensy/td_libs_TimerOne.html, consultado en abril 2017.
[3] “Timer1”. En línea, disponible en: http://playground.arduino.cc/Code/Timer1,
consultado en abril 2017.
[4] “Dynamics and Control of Switched Electronic Systems”, capítulo. 2, Springer, 2012.
En línea, disponible en:
http://www.springer.com/cda/content/document/cda_downloaddocument/97814471288
47-c2.pdf%3FSGWID%3D0-0-45-1326538-p174291486, consultado en abril 2017.
[5] “Power Electronics Exercise: Pulse Width Modulation Methods”. En línea, disponible
en: https://www.eal.ei.tum.de/fileadmin/tueieal/www/courses/PE/tutorial/2013-2014-
W/07_PWM.pdf , consultado en abril 2017.
[6] APPLICATION NOTE 1858 “Tiny IC Debounces Pushbutton switch”. En línea,
disponible en: https://www.maximintegrated.com/en/app-notes/index.mvp/id/1858,
consultado en abril 2017.
[7] “Frequency Visualizer”. En línea, disponible en:
http://people.ece.cornell.edu/land/courses/ece4760/FinalProjects/f2014/idk4_clc282_hs
a35/idk4_clc282_hsa35/, consultado en abril 2017.
[8] “Introduction to the two-wire transmitter and the 4-20ma current loop”. En línea,
disponible en: https://www.acromag.com/sites/default/files/Acromag_Intro_TwoWire
_Transmitters_4 _20mA_Current_Loop_904A.pdf, consultado en abril 2017.
[9] “PID Controller, Discrete PID Controller”. En línea, disponible en:
https://www.mathworks.com/help/simulink/slref/pidcontroller.html#br8_nbu-1,
consultado en abril 2017.
[10] Chapter 5: Numerical Methods. En línea, disponible en:
http://vmm.math.uci.edu/ODEandCM/PDF_Files/ChapterFirstPages/First38PagesOFCh
apter5.pdf, consultado en abril 2017.
[11] “Forward and Backward Euler Methods”. En línea, disponible en:
http://web.mit.edu/10.001/Web/Course_Notes/Differential_Equations_Notes/node3.html,
consultado en abril 2017.

[12] “Stability Analysis”. En línea, disponible en:


http://www.it.uu.se/edu/course/homepage/bridging/ht13/Stability_Analysis.pdf, consultado
en abril 2017.

97
[13] “CY8CKIT-042 PSoC 4 Pioneer Kit Guide.pdf”. En línea, disponible en:
http://www.cypress.com/file/46056/download, consultado en mayo 2017.

[14] “KITPROG User Guide.pdf”. En línea, disponible en:


http://www.cypress.com/file/157966/download, consultado en mayo 2017.

[15] “CY8CKIT-059 PSoC 5LP Prototyping Kit Guide.pdf”. En línea, disponible en:
http://www.cypress.com/file/157971/download, consultado en mayo 2017.
[16] “Connect VREF to a pin in PSoC4”. En línea, disponible en:
http://www.cypress.com/blog/psoc-hacker-blog/connect-vref-pin-psoc4, consultado en
mayo 2017.
[17] “Voltage Reference (Vref) v1.70”. En línea, disponible en:
http://www.cypress.com/file/274681/download, consultado en mayo 2017.
[18] “Including the Cortex Microcontroller Software Interface Standard (CMSIS)
Library in a PSoC® Creator™ Project - KBA90457”. En línea, disponible en:
http://www.cypress.com/knowledge-base-article/including-cortex-microcontroller-
software-interface-standard-cmsis-library, consultado en mayo 2017.
[19] Interiano, E. “Control de Sistemas con Retardo”. En línea, disponible en:
http://www.ie.tec.ac.cr/einteriano/control/clase/Clase20ControldeSistemasconRetardo.p
df , consultado en octubre 2017.
[20] Interiano, E. “Discretización de Controladores y Plantas”. En línea, disponible en:
http://www.ie.tec.ac.cr/einteriano/control/clase/Clase4DiscretizaciondeControladoresyP
lantas.pdf , consultado en octubre 2017.
[21] “Pololu 9V Step-Up Voltage Regulator U3V50F9”. En línea, disponible en
https://www.pololu.com/product/2567 , consultado en octubre 2017.
[22] “Electromagnetic Levitation System”. En línea, disponible en:
http://www.zeltom.com/documents/emls_md.pdf. Consultado en octubre 2017
[23] Zumbahlen, Hank. “Staying Well Grounded”. En línea, disponible en:
http://www.analog.com/en/analog-dialogue/articles/staying-well-grounded.html.
Consultado en noviembre 2017.

98

También podría gustarte