Timers en ARM Cortex M0+ con LPCXpresso

LPCXpresso es un IDE de la compañia NXP (antiguamente Philips Semiconductors) basado en Eclipse y que nos permite programar placas de desarrollo de una manera muy sencilla. En la web no hay demasiada información pero sí son muy útiles los ejemplos que hay en las librerías. En mi caso utilizo la placa de desarrolo LPC11U68 con un ARM M0+ (el ARM con menor consumo de los que existen).

M-07710

ARM tiene por defecto un contador llamado SysTick, muy fácil de configurar pero que ofrece poca flexibilidad a la hora de programar. Además el M0+ (desconozco si el resto también) solo cuenta con un contador SysTick. Por este motivo si necesitamos de más de 1 timer en nuestra aplicación deberemos recurrir a los contadores internos del microprocesador. En nuestra caso contamos con 2 contadores de 16 bits y otros dos contandores de 32 bits. El código está comentado y es muy fácil de entender. En caso contrario siempre puedes acudir al datasheet del procesador para entender cómo funciona internamente.

Un timer, el de 32 bits, saltaría cada 0.2 s (5 Hz) y el otro acabaría a los 100 ms una vez se inicie.

Por razones de mi aplicación el timer de 16 bits no lo activo inmediatamente ni lo configuro para que sea cíclico, si no que es el propio timer de 32 bits el que inicia el de 16.

Para desactivar y activar un timer lo podemos hacer mediante la funcion

Por último, para cazar una interrupción deberemos utilizar el siguiente código:

La precisión para timers de la frecuencia de kHz es muy buena. Como veis, configurar un timer es mucho más complejo que el SysTick, pero con esta receta solo es cuestión de copiar, pegar y editar la frecuencia entre interrupciones.

Receptor heterodino a 27.01 MHz

Introducción

En esta entrada se pretende explicar de forma breve las distintas etapas que componen el receptor de 27 MHz con etapa de amplificación incluida. El receptor utiliza un mezclador conmutante NE602 para implementar la estructura heterodina. El front-end del receptor consta de 4 partes: etapa receptora, etapa mezcladora, oscilador y etapa amplificadora.

Etapa receptora

La señal de entrada vendrá por una línea de transmisión con una impedancia característica de 50 Ω. En cambio la impedancia de entrada del integrado NE602 es de 1500 Ω. Para que la línea de transmisión vea una impedancia de entrada de 50 Ω, podemos utilizar un transformador. También será necesario añadir un condensador para anular la impedancia del inductor del primario. Será necesario ajustar el valor del condensador de manera que a la frecuencia de trabajo, inductor y condensador no influyan en el circuito.

Etapa mezcladora

La etapa mezcladora se implementa con un NE602 que tiene una estructura de tipo Gilbert. Aprovecha los productos de intermodulación que aparecen en las series de Fourier al multiplicar una señal por una señal cuadrada. El NE602 cuenta con una entrada y una salida diferencial, de la cual se prescinde para simplificar. La señal de salida, en el pin 4, la forman una señal continua y dos senoides de diferente amplitud a frecuencia f_{ol}-f_{in}

y f_{ol}+f_{in}

.

La señal que buscamos es la de frecuencia f_{ol}-f_{in}

, ya que la frecuencia del oscilador local será aproximadamente 27.01 MHz y la de la señal de entrada 27 MHz. Por tanto, la señal a f_{ol}-f_{in}

está en 10 kHz.

Oscilador

El NE602 tiene en su interior un transistor BJT NPN cuya base es accesible a través del pin 6 y su emisor a través del pin 7. Es por ello que se construye un oscilador Colpitts a 27.01 MHz. Este tipo de oscilador destaca por utilizar un cristal de cuarzo trabajando en el tercer sobretono y que su configuración no es estricta en ninguno de sus elementos. Solo hay que tener en cuenta que el pico de resonancia del circuito tanque (L1 y C3) debe estar por debajo de los 27 MHz y por encima de los 9 MHz para asegurar que el cristal opera en el tercer sobretono.

Etapa amplificadora

La etapa amplificadora utiliza un amplificador operacional en su forma de amplificador no inversor. Cabe destacar que el amplificador opera con alimentación unipolar y es por ello que se han añadido el condensador C10 y C14 así como las resistencias R6 y R7. Con el condensador C10 se pretende eliminar el nivel de continua que tiene la señal a la salida del mezclador. Después con el divisor de tensión entre R6 y R7 se añade a la señal una tensión en continua de 4.5 V. De esta manera la excursión de la amplitud de la señal es máxima. Para finalizar la configuración unipolar, hay que evitar amplificar la tensión continua. Para ello el condensador C14 se comporta como un circuito abierto a frecuencia 0, convirtiendo el amplificador no inversor en un seguidor de tensión solo en continua.

Se puede apreciar que la amplificación de la etapa se puede variar con el potenciómetro R5. Así, la amplificación podrá estar en un rango de entre 48 y 318.

Por último, la etapa amplificadora también actúa como filtro paso bajo. Es por ello que se añade el condensador C13, atenuando así las señales de intermodulación a frecuencias más altas provenientes del mezclador.

Conversor lineal

Como la alimentación disponible es de 9 V y el NE602 se alimenta con 5V, es necesario utilizar un conversor lineal.

También es recomendable utilizar un conversor lineal de tensión para evitar posibles rizados en la tensión de alimentación que induzcan a distorsiones en la salida del mezclador aunque el valor nominal de la alimentación sea el deseado.

Dimensionado de valores

C7: según las notas de aplicación del fabricante se recomienda un valor de 0.33 µF.

C9: se utiliza para evitar variaciones de tensión y actúa como la verdadera fuente de alimentación. Es por ello que cuanto mayor sea su capacidad mejor, por ejemplo 10 µF.

C10: se utiliza para bloquear la tensión continua. Debe ser un cortocircuito a la frecuencia de trabajo, por tanto:

eq1

C6: se utiliza para no modificar la polarización interna del NE602. A la frecuencia de trabajo debe comportarse como un circuito abierto. En este caso, se trabaja a 27 MHz, por tanto puede ser de una capacidad bastante menor que C10. Podría servir 1 nF.

C2: mismo criterio que C6. Si no estuviera C2, en continua el pin 6 estaría conectado a masa. De esta manera podría alterarse el funcionamiento del mezclador por haber modificado su polarización.

L1 y C3: sus valores no son críticos. Solo hay que tener en cuenta que la frecuencia de resonancia del pico del tanque debe estar por debajo de 27 MHz y por encima de 9 MHz. Dado que es más complicado hacer una bobina que comprar un condensador variable, se recomienda fijar un valor de inductancia y buscar un condensador que satisfaga la expresión:

eq2

 

Debería tenerse en cuenta antes de elegir un valor de inductancia los valores de condensadores variables comercialmente disponibles.

El circuito equivalente con estos valores sería:

Conversor DC-DC buck-boost Ćuk

¿Qué podemos hacer si queremos obtener una tensión de 50V a partir de una de 100V? Quizá una de las respuestas más inmediatas sea utilizar un divisor resistivo, pero es evidente que la eficiencia del sistema es más bien escasa. ¿Y si queremos obtener una tensión de 100V a partir de una de 50V? Para hacer este tipo de ajustes, se utilizan fuentes conmutadas. Estas son las responsables de que actualmente los cargadores de móvil (por poner un ejemplo) sean tan pequeños, en comparación a los de hace unos años, que tenían un peso y unas dimensiones considerables.

Las fuentes conmutadas, a su vez, utilizan el principio de las bobinas a no poder cambiar bruscamente su corriente. De esta manera se puede conseguir aumentar o disminuir una tensión con una eficiencia superior al 90%. Existen 3 tipos de conversores DC-DC:

  • Buck: son aquellos que son capaces de reducir una tensión de entrada. Si aplicamos 100V a la entrada de un conversor, podemos conseguir una tensión menor sin sufrir las pérdidas inherentes del divisor resistivo.
  • Boost: son capaces de generar tensiones superiores a las de entrada. De esta manera podriamos pasar una señal de 3V a 5V sin necesidad de fuentes de alimentación adicionales.
  • Buck-boost: el nivel de conversión de estos es variable y pueden conseguir tanto ganancias menores que uno como superiores a la unidad.

Un ejemplo un poco más complejo de conversor buck-boost habitual es el conversor Ćuk (pronunciado como Chook). Consta de 2 condensadores y 2 inductores, un transistor y un diodo. La principal ventaja respecto a los buck-boost más sencillos es que el rizado de tensión a la salida es menor.

La disposición del circuito es la siguiente:

cuk-converter
Conversor ĆUK buck-boost

Ganancia

Para analizar circuitos de potencia, hay que fijarse en los parámetros que pueden cambiar bruscamente para cada componente: la tensión en las bobinas, la corriente en los condensadores.

Con el interruptor en la posición 1:
\[v_{L_1} = V_g\]
\[v_{L_2} = -V_1 – V_2\]
\[i_{C_1} = i_2\]
\[i_{C_2} = i_2 – \frac{V_2}{R}\]
Con el interruptor en la posición 2:
\[v_{L_1} = V_g – V_2\]
\[v_{L_2} = – V_2\]
\[i_{C_1} = i_1\]
\[i_{C_2} = i_2 – \frac{V_2}{R}\]
Por tanto, la forma de las señales en el conversor Ćuk son:

Señales en el conversor CUK
Señales en el conversor CUK

En régimen estacionario, el valor medio de todas las tensiones y corrientes debe ser cero (de lo contrario indicaría que no estamos en regimen estacionario). Por tanto:
\[v_{L_1} = V_g DT_s +\left(V_g-V_1\right)D’T_s = 0\]
\[v_{L_2} = \left(-V_1 – V_2\right) DT_s+ V_2 D’T_s = 0\]
\[i_{C_1} = I_2 DT_s +I_1 D’T_s = 0\]
\[i_{C_2} = i_2 + \frac{V_2}{R} = 0\]
A la hora de definir las ecuaciones es importante tener en cuenta si se toma el valor sin modificar el signo o si por lo contrario se calcula a partir del area. En caso de coger el valor sin modificar el signo, la suma de ambos debe ser 0. Sin embargo, si se escoge el area, la resta de las dos areas debe ser 0. En este caso he optado por la forma más genérica que es tomar los valores conforme están, sin cambiar signos. Tened cuidado en este paso porque si se mezclan ambos procedimientos simplemente las expresiones no cuadran.

Resolviendo el sistema de ecuaciones, obtenemos:
\[V_1 = \frac{V_g}{D’}\]
\[V_2 =-\frac{D}{D’}V_g\]
\[I_1 = \left(\frac{D}{D’}\right)^2V_g\]
\[I_2 = -\frac{D}{D’}\frac{V_g}{R}\]
Como podemos observar, la ganancia del sistema es \(\frac{V_2}{V_g} = \frac{D}{1-D}\). Si lo reprensentamos en función de D, vemos perfectamente que el conversor pertenece a la clase buck-boost, ya que teóricamente es capaz de tener cualquier ganancia entre 0 y 1.

Ganancia conversor DC-DC Cuk

Como se puede esperar de una función del tipo \(\frac{x}{1-x}\), cuando nos aproximamos al 1 tiende a infinito.

Rizado de tensión y corriente

Por último falta calcular la magnitud del rizado de las tensiones y corrientes. Ello nos ayudará a escoger los valores de inductancia y de capacidad. Para calcularlos simplemente utilizamos la propiedad de corriente en un inductor y de tensión en un condensador:
\[\frac{di\left(t\right)}{dt} = \frac{v\left(t\right)}{L}\]
\[\frac{dv\left(t\right)}{dt} = \frac{i\left(t\right)}{C}\]
Como conocemos estos valores, podemos calcular la corriente en las bobinas y la tensión en el condensador fácilmente.

Durante el primer subintervalo, los valores son:
\[\frac{di_1\left(t\right)}{dt} = \frac{v_1\left(t\right)}{L} = \frac{V_g}{L_1}\]
\[\frac{di_2\left(t\right)}{dt} = \frac{v_2\left(t\right)}{L} = \frac{-V_1-V_2}{L_2}\]
\[\frac{dv_1\left(t\right)}{dt} = \frac{i_{c_1}\left(t\right)}{L} = \frac{I_2}{C_1}\]
Sabiendo la derivada, sabemos la pendiente, por lo que tendrían un aspecto parecido al siguiente:

Rizado de tensión y corriente
Rizado de tensión y corriente

Sabiendo la pendiente y cuánto tiempo dura, podemos calcular la variación máxima. Como la forma del rizado debe ser simétrica, podemos calcularlo como la pendiente (V/s o A/s) por el tiempo DTs (s). Como queremos el rizado de pico y no el rizado pico a pico, tenemos que dividir por 2. Luego reordenando términos para dejarlo en función de los parámetros conocidos:
\[\Delta i_1 = \frac{V_g D T_s}{2L_1}\]
\[\Delta i_2 = \frac{-V_1-V_2}{2L_2}\cdot D T_s = \frac{V_g D T_s}{2L_2}\]
\[\Delta v_1 = \frac{I_2}{2C_1}\cdot D T_s = \frac{V_g D^2 T_s}{2 D’ R C_1}\]
Como vemos, falta el rizado más importante, que es el rizado de la tensión de salida. Sin embargo no podemos aplicar el mismo procedimiento para calcularlo, ya que el resultado es que el rizado es 0. Esto ocurre en todos los conversores con dos polos en la función de transferencia del filtro paso bajo. En estos casos, la única componente que entrega corriente al condensador viene de la bobina. Por tanto vamos a estudiar con detenimiento como es la corriente del condensador sabiendo como es la de la bobina L2.

La forma del rizado de corriente será el mismo que el del inductor. Sin embargo, no tendrá componente continua. ¿Por qué? Porque el condensador está en paralelo con una resistencia, con lo que si suponemos que el condensador está bien diseñado como para tener una impedancia mucho mayor a frecuencias bajas, toda la componente continua la absorbería la resistencia y el condensador se quedaría con el rizado. Tiene sentido, ¿no?

Ahora bien, para calcular la tensión del condensador a partir de su corriente, solo tenemos que integrar.

ripple-out-cuk(2)

Cuando la corriente en el condensador es positiva, la carga que almacena aumenta. Esta carga la podemos expresar de dos manera: utilizando la corriente y utilizando el valor de tensión:
\[q = C \left( 2 \Delta v \right)\]
\[q = \frac{1}{2} \Delta i_L \cdot \frac{T_s}{2}\]
Igualando las ecuaciones, finalmente conseguimos una expresión para el rizado de la tensión de salida:
\[\Delta v = \frac{\Delta i_L T_s}{8 C}\]
Y esta es toda la información que necesitamos para poder dimensionar un convertidor DC-DC buck-boost Ćuk. Sabiendo cuál es rizado máximo que queremos a la salida, podemos obtener todos los valores. El procedimiento que se ha aplicado para calcular los parámetros es perfectamente extrapolable a cualquier otro convertidor, así que solo necesitaréis particularizar las formas de tensión y corriente para conseguir analizar completamente un de estos circuitos.

Cálculo de enlaces LTE

\(P_{util} = P_u\),\( P_{interfencia} = P_i\) y \(P_{noise} = P_n\)
\[SINR = \frac{P_u}{P_i + P_n} \Rightarrow SINR < \frac{P_u}{P_i} = CIR\]

\[\frac{1}{SINR} = \frac{P_i}{P_u}+\frac{P_n}{P_u} = \frac{1}{CIR} + \frac{1}{CNR}\]

\[\frac{1}{CNR} = \frac{1}{SINR} \left( 1- \frac{SINR}{CIR} \right)~~~\left(1\right)\]

De aquí podemos expresar la CNR como:
\[CNR = SINR \left( \frac{1}{1-\frac{SINR}{CIR}} \right)\]

Que pasado a dBs:
\[CNR(dB) = SINR(dB) – 10\log{\left(1-\frac{SINR}{CIR} \right)}\]
\[\left.P_u\right|_{Rx} = \frac{P_{Tx}}{l_{total}}~~~\left(2\right)\]

\[l_{total} = \frac{l_{prop} \cdot l_{conectores} \cdot l_{cables} \cdot l_{penetración~edificios}}{g_{antenas}}\]

De (1) y (2):
\[L_{total}(dB) = \left.P_{Tx}\right|_{EB} (dBm) – \left.P_{u}\right|_{Rx} (dBm)~~~ \left(3\right)\]

Aprovechando la definición de CNR:
\[\left.CNR\right|_{Rx} (dB) = \left.P_{u}\right|_{Rx} (dBm) – P_{n}(dBm)\]

\[\left.P_{u}\right|_{Rx} (dBm) = \left.CNR\right|_{Rx} (dB) + P_{n}(dBm)\]

\[\left.P_{u}\right|_{Rx} (dBm) = SINR(dB) – 10\log{\left(1-\frac{SINR}{CIR} \right)} + P_{n}(dBm)\]

Sustituyendo ahora en (3):
\[L_{total}(dB) = \left.P_{Tx}\right|_{EB} (dBm) – SINR(dB) + 10\log{\left(1-\frac{SINR}{CIR} \right)} – P_{n}(dBm)\]

La potencia del ruido es:
\[\left.P_n~(dBm)\right|_{LTE} = 10 \log{(k T_0 B F)} + 30~dB\]

donde \(B=180~kHz \cdot N_{RB}\) (180 kHz = 15 · 12)
\[\left.P_n~(dBm)\right|_{LTE} = 10 \log{(k T_0 12 \cdot 15~kHz)} + 30~dB + F(dB) + 10\log{(N_{RB})}\]
\[\left.L_{total}(dB)\right|_{LTE} = 121.5 + 10\log{\left(1-\frac{SINR}{CIR} \right)} + P_{Tx}(dBm) – \left.F\right|_{Rx}(dB) – 10 \log{N_{RB}} – SINR(dB)\]

De esta manera podemos calcular las pérdidas totales, que por otra parte, sabemos que:
\[\left.L_{total}(dB)\right|_{LTE} = L_{prop} (dB) + L_{conectores}(dB) + L_{cables}(dB) + L_{penetración}(dB) – \left.G\right|_{EB} (dB) – \left.G\right|_{Mobile~Station} (dB)\]