108
100 Trucos en el Laboratorio de Control Automático

100 Trucos en el Laboratorio de Control Automático · 2019. 10. 26. · )ljxud (vwuxfwxud gh od yduldqwh ,b3' gho uhjxodgru 3,' sdudohor hq wlhpsr glvfuhwr )ljxud (vwuxfwxud gh

  • Upload
    others

  • View
    1

  • Download
    1

Embed Size (px)

Citation preview

  • 100 Trucos en el Laboratorio de Control Automático

  • i

    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

  • ii

    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

  • iii

    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

  • iv

    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

  • v

    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

  • vii

    Í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

  • viii

    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

  • ix

    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

  • 1

    Capítulo 1: Introducción

  • 3

    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 (t+0)

    Salida (t+1)

    Salida (t+2)

    Salida (t+3)

    Promedio

    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

    Figura 2.1: Ejemplo de dithering con 2 bits extra

    Ts = Periodot

    U [V]

    Valor medioC

    Ts/4

  • 4

    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

  • 5

    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

    Plataforma Pines PWM con

    TimerOne Pines PWM con

    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

  • 6

    Plataforma Pines PWM con

    TimerOne Pines PWM con

    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 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.

  • 7

    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.

  • 9

    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

    VDDA = 5 V, VDDD = 5 V J10 puesto en 5 V y J11 puesto en 5 V

    VDDA = 3.3 V, VDDD = 3.3 V J10 puesto en 3.3 V y J11 puesto en 3.3 V

    (recomendado para alimentación por USB 5 V)

    VDDA = 5 V, VDDD = 3.3 V J10 puesto en 3.3 V y

    J11 puesto en 5 V

    VDDA = 3.3 V, VDDD = 5 V Se puede seleccionar; pero, es una combinación inválida ya 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.

  • 10

    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.

  • 11

    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:

  • 12

    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.

  • 13

    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.

  • 14

    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.

  • 15

    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.

  • 16

    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,

  • 17

    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).

  • 18

    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.

  • 19

    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.

  • 20

    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.

  • 21

    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.

  • 22

    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.

  • 23

    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?

  • 24

    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.

  • 25

    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); }

  • 26

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

  • 27

    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:

  • 28

    𝐹𝐸𝐸𝐷𝐵𝐴𝐶𝐾 = 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.

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

    0.00E+00

    5.00E-01

    1.00E+00

    1.50E+00

    2.00E+00

    2.50E+00

    3.00E+00

    0 2 4 6 8 10 12 14 16 18 20

    Ángulo

  • 29

    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

  • 30

    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

  • 31

    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

    label proc_PID in(rk); leo el valor de consigna in(yk); leo el valor de la salida ek = rk - yk; obtengo el error mk = mk_1 + A*ek + B*ek_1+ C*ek_2; mk_1 = mk; ek_2 = ek_1; ek_1 = ek; out(mk); end;

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

    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, TS, que se aproxima a la unidad, incorpore este retardo fraccional de TS 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:

    t t

  • 32

    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).

  • 33

    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.

    A

    B

    Index

    CCW CWAB10

    AB11

    AB01

    AB00

    AB10

    AB11

    AB01

    AB00

    AB10

    AB11

    AB01

    AB00

    AB10

    AB11

    AB01

    AB00

  • 34

    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

  • 35

    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𝜁𝜔 𝑠 + 𝜔 )

    Tiempo discreto

    𝑌(𝑧)

    𝑈(𝑧)=

    (1 − e( ∗ ) )

    (𝑧 − e( ∗ )) 𝑌(𝑧)

    𝑈(𝑧)=

    𝑧 +e( ∗ ) − e( ∗ )(1 − 𝜔 𝑇)

    (1 − (1 + 𝜔 𝑇)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.

  • 36

    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

    (Tustin)

    𝑌(𝑧)

    𝑈(𝑧)=

    𝑁𝑇𝑁𝑇 + 2

    (𝑧 + 1)

    𝑧 +𝑁𝑇 − 2𝑁𝑇 + 2

    𝑌(𝑧)

    𝑈(𝑧)=

    2𝑁𝑁𝑇 + 2

    (𝑧 − 1)

    𝑧 +𝑁𝑇 − 2𝑁𝑇 + 2

    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

    Am

    plit

    ud

    [ra

    d]

    Ve

    loci

    da

    d [r

    ad/s

    ]V

    elo

    cid

    ad [r

    ad/s

    ]

  • 37

    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 discreto

    (Tustin)

    𝑌(𝑧)

    𝑈(𝑧)=

    2𝑇𝜔(𝑇 𝜔 + 4𝜁𝑇𝜔 + 4)

    ( 𝑧 − 1)

    𝑧 +(2𝑇 𝜔 − 8)

    (𝑇 𝜔 + 4𝜁𝑇𝜔 + 4)𝑧 +

    (𝑇 𝜔 − 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?

  • 39

    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.

  • 40

    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.

    𝑆𝑎𝑙𝑖𝑑𝑎 = −2 𝐺𝑂𝐹𝐹𝐴 ∗ 1 +200

    59− 𝑉𝑂𝐴 ∗

    200

    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.

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

    SalidaIntermedia

    DAC

  • 41

    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.

  • 42

    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.

  • 43

    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 desde cero. Su duración depende del número de muestras N */ yk = (xk8 + xk7+ xk6+ xk5+ xk4+ x