martes, 19 de marzo de 2019
CIAA
Hace unos días en un grupo de Facebook me ayudaron con una duda que me tenía
intranquilo y no puedo expresar lo agradecido que estoy. Me especialicé
en sistemas digitales y comunicaciones y no sé nada de manejo robusto de
transientes e interfaces en entorno industrial. Resulta que los
benditos argentinos tienen un proyecto de hardware y software abierto de
sistemas de cómputo para entornos industriales llamado CIAA (Computadora Industrial Abierta Argentina). Tienen absolutamente
todo lo que requería, diagramas de la circuitería de protección,
documentación, tesis, pruebas ¡Todo! Esto me ahorra meses enteros de trabajo. Tenía muchas dudas sobre el como implementar circuitos de protección robustos para tarjetas de aplicación de microcontroladores (PIC, AVR, STM32, etc.) aptas para soportar las condiciones de un entrono industrial.
Este es el el espíritu del hardware y software abiertos que tanto defiendo: llegar más
lejos echándonos la mano entre todos.
Etiquetas:
Anecdotario,
Electrónica,
PIC's
lunes, 18 de marzo de 2019
LCD en MPLAB X / XC8
Había comentado en una entrada pasada que las nuevas versiones de XC8 dejaron de usar Peripheral Library y en esa misma entrada explico el truco que pueden hacer para utilizarla. Sin embargo, los usuarios de PIC's modernos deben saber lo cómodo que es usar ahora MCC. Pero también habrán notado que no hay un generador de código para el manejo de LCD's. Así que he hecho un fork en GitHub de una librería hecha por Manolis Agkopian a la que hecho una mínima modificación para poder usarla en el PIC18F45K50. Pueden acceder a los códigos aquí. Esta librería me parece genial porque te permite usar el puerto que quieras, a diferencia de la mayoría que he visto que te limitan a un puerto fijo (que debes modificar si quieres usar otro). Lo único que deben hacer es agregar los archivos lcd.h y lcd.c a los headers de su proyecto. Como aún hay muchos usuarios del PIC18F4550 voy a poner aquí un ejemplo con él. Usaré una tarjeta Miuva a 48 MHz:
martes, 12 de marzo de 2019
Máquina de Estados Finitos en C [PIC18F45K50]
Para esta implementación en software de una máquina de estados finitos (FSM: Finite State Machine) haremos uso de punteros a funciones [click en el enlace para ver un video-tutorial]. Usaremos también el compilador XC8 en MPLAB X y un PIC18F45K50 con las mismas configuraciones que en la entrada anterior.
En una gran cantidad de problemas a resolver mediante un sistema embebido es necesario llevar a cabo un proceso estrictamente secuencial. En estos casos es muy útil y elegante estructurar nuestros programas como una máquina de estados. Quizá muchos de ustedes estén tentados a usar una estructura case para elegir un segmento de código cuando se cumple una condición. Si el numero de estados es pequeño, quizá se una opción fácil. Desafortunadamente el uso de case's es muy ineficiente cuando la máquina de estados y su tabla de transiciones es muy compleja. La implementación que se mostrará en esta entrada parecerá un tanto rebuscada pero tiene la ventaja de tener buen despeño a la hora de escalarla a numero grande de estados.
El diagrama de estados de la FSM de este ejemplo es el siguiente:
Las entradas 0/1 representan los estados de un switch conectado a RB0. Los estados se harán visibles enviando el numero correspondiente al Puerto D [esta acción será definida en la función asociada a cada estado]. Obsérvese que está máquina describe a un contador ascendente o descendente según la entrada. Se agregará un retardo de un segundo para poder visualizar las transiciones.
Movámonos al programa. Primero, debemos definir un tipo enumerado para codificar nuestro conjunto de estados:
//-- Definición de tipo de estados
typedef enum {
Estado_0, // Estado inicial
Estado_1,
Estado_2,
Estado_3,
Estado_4,
No_de_Edos
} ESTADOS;
Creamos con esto una variable enumerada global que usaremos para almacenar el estado actual de la máquina:
//-- Variable global de estado
ESTADOS Estado_Actual = Estado_0;
El siguiente paso es definir una estructura que nos permitirá construir un objeto para nuestra FSM:
//-- Estructura de Maquina de Estados (FSM))
typedef struct {
ESTADOS Estado; // Estado miembro del conjunto enumerado ESTADOS
void (*func)(int); // Acciones asociadas al estado
} FSM;
Con lo anterior podemos ahora crear una instancia que sera nuestra FSM:
//-- Prototipos de funciones de estado
void Codigo_EDO_0(int);
void Codigo_EDO_1(int);
void Codigo_EDO_2(int);
void Codigo_EDO_3(int);
void Codigo_EDO_4(int);
//-- Creación de la estructura global de la FSM
FSM Maquina_de_Estados[] = {
{Estado_0,Codigo_EDO_0},
{Estado_1,Codigo_EDO_1},
{Estado_2,Codigo_EDO_2},
{Estado_3,Codigo_EDO_3},
{Estado_4,Codigo_EDO_4},
};
Es importante que los prototipos de las funciones asociadas a cada estado aparezcan antes de la creación de la estructura (estas funciones serán definidas más adelante en el código). El segmento de código principal queda reducido elegantemente de la siguiente manera:
void main(void) {
int sw = 0;
setup();
//-- FSM ---
while(1){
sw = PORTBbits.RB0;
(*Maquina_de_Estados[Estado_Actual].func)(sw);
}
return;
}
Código completo:
Circuito utilizado:
En una gran cantidad de problemas a resolver mediante un sistema embebido es necesario llevar a cabo un proceso estrictamente secuencial. En estos casos es muy útil y elegante estructurar nuestros programas como una máquina de estados. Quizá muchos de ustedes estén tentados a usar una estructura case para elegir un segmento de código cuando se cumple una condición. Si el numero de estados es pequeño, quizá se una opción fácil. Desafortunadamente el uso de case's es muy ineficiente cuando la máquina de estados y su tabla de transiciones es muy compleja. La implementación que se mostrará en esta entrada parecerá un tanto rebuscada pero tiene la ventaja de tener buen despeño a la hora de escalarla a numero grande de estados.
El diagrama de estados de la FSM de este ejemplo es el siguiente:
![]() |
Diagrama hecho en LaTeX con TIKz |
Movámonos al programa. Primero, debemos definir un tipo enumerado para codificar nuestro conjunto de estados:
//-- Definición de tipo de estados
typedef enum {
Estado_0, // Estado inicial
Estado_1,
Estado_2,
Estado_3,
Estado_4,
No_de_Edos
} ESTADOS;
Creamos con esto una variable enumerada global que usaremos para almacenar el estado actual de la máquina:
//-- Variable global de estado
ESTADOS Estado_Actual = Estado_0;
El siguiente paso es definir una estructura que nos permitirá construir un objeto para nuestra FSM:
//-- Estructura de Maquina de Estados (FSM))
typedef struct {
ESTADOS Estado; // Estado miembro del conjunto enumerado ESTADOS
void (*func)(int); // Acciones asociadas al estado
} FSM;
Con lo anterior podemos ahora crear una instancia que sera nuestra FSM:
//-- Prototipos de funciones de estado
void Codigo_EDO_0(int);
void Codigo_EDO_1(int);
void Codigo_EDO_2(int);
void Codigo_EDO_3(int);
void Codigo_EDO_4(int);
//-- Creación de la estructura global de la FSM
FSM Maquina_de_Estados[] = {
{Estado_0,Codigo_EDO_0},
{Estado_1,Codigo_EDO_1},
{Estado_2,Codigo_EDO_2},
{Estado_3,Codigo_EDO_3},
{Estado_4,Codigo_EDO_4},
};
Es importante que los prototipos de las funciones asociadas a cada estado aparezcan antes de la creación de la estructura (estas funciones serán definidas más adelante en el código). El segmento de código principal queda reducido elegantemente de la siguiente manera:
void main(void) {
int sw = 0;
setup();
//-- FSM ---
while(1){
sw = PORTBbits.RB0;
(*Maquina_de_Estados[Estado_Actual].func)(sw);
}
return;
}
Código completo:
Circuito utilizado:
Etiquetas:
C,
Electrónica,
MPLAB X,
PIC's
viernes, 22 de febrero de 2019
Iniciando con el PIC18F45K50 / 25K50 en XC8
El PIC18F4550 es uno de los microcontroladores más populares entre estudiantes y hobbistas. Sin embargo ya es algo viejo (no tiene soporte para MCC , los K50 si). Poco a poco, se está migrando a su sustituto más nuevo: el PIC18F45K50. En México, fecha de 2019, aún no es muy fácil de conseguir en tiendas pero puede comprarse con envío gratis en Newark Mexico. Si nunca han usado MPLAB con XC8 aquí hay un tutorial bastante bueno (con PIC16, pero estén pendientes a mi canal porque subiré un curso para los K50). Vamos a realizar una práctica sencilla para comenzar a familiarizarnos con este MCU: Prender y apagar un led conectado a RB0 mediante un switch conectado a RD0 con un reloj a 48 MHz. Tengan a la mano la datasheet y vayamos por partes:
1. Configuración del reloj
El esquema de reloj es distinto al de su antecesor [pag. 29]. Usando un cristal de 16 MHz, este es el camino que debe estar habitado para conseguir los 48 MHz:
Los configuraciones necesarios son las siguientes:
#pragma config PLLSEL = PLL3X
#pragma config CFGPLLEN = OFF // ver Tabla 3-3
#pragma config CPUDIV = NOCLKDIV
#pragma config FOSC = HSM
#pragma config PCLKEN = ON
2. Configuración de puertos
Los pines RB0 y RD0 son usados por el módulo ADC por lo que deben desactivarse para ellos. En el caso del puerto B, esto puede hacerse al generar la cabecera de fuses con la linea:
#pragma config PBADEN = OFF
Para el caso de RDO deberá hacerse en el código principal escribiendo en el registro ANSELD [la tabla con todos los registros de función especial está en la página 84 de la datasheet] :
3 Código completo en C
Como regla general siempre se debe leer en puerto y escribir en latch:
1. Configuración del reloj
El esquema de reloj es distinto al de su antecesor [pag. 29]. Usando un cristal de 16 MHz, este es el camino que debe estar habitado para conseguir los 48 MHz:
![]() |
Click para agrandar |
#pragma config PLLSEL = PLL3X
#pragma config CFGPLLEN = OFF // ver Tabla 3-3
#pragma config CPUDIV = NOCLKDIV
#pragma config FOSC = HSM
#pragma config PCLKEN = ON
Los pines RB0 y RD0 son usados por el módulo ADC por lo que deben desactivarse para ellos. En el caso del puerto B, esto puede hacerse al generar la cabecera de fuses con la linea:
#pragma config PBADEN = OFF
Para el caso de RDO deberá hacerse en el código principal escribiendo en el registro ANSELD [la tabla con todos los registros de función especial está en la página 84 de la datasheet] :
3 Código completo en C
Como regla general siempre se debe leer en puerto y escribir en latch:
lunes, 4 de febrero de 2019
Toolbox de Control para Python
Para aquellos que busquen un sustituto de código abierto para Matlab hay una buena noticia: Existe el módulo Python Control Systems Library. Acabo de probarlo y me parece mucho mejor que otras alternativas como los toolbox de control para Scilab y Octave. Si usan Anaconda, pueden instalarlo desde la terminal usando conda:
$ conda install -c conda-forge control
Quiero mostrarles algunos ejemplos simples utilizando el modelo de un motor NXT de Lego que describo en una entrada anterior. El modelo es el siguiente:
Creamos el objeto del modelo de la siguiente forma:
#Modelo como función de transferencia
num = [193.3]
den = [1.0, 18.735, 0.0]
sys = ctrl.tf(num,den) #Lazo abierto
print(sys)
El print nos mostrara la función de transferencia como una fracción en texto (al igual que en Matlab). Vamos a graficar ahora la respuesta al escalón de la planta en lazo cerrado:
#Modelo en lazo cerrado
sys_cl = ctrl.feedback(sys,1)
#Respuesta al escalón
t,y = ctrl.step_response(sys_cl)
#Graficas
plt.plot(t,y)
plt.grid(True)
plt.title(u"Respuesta al escalón")
plt.xlabel("segundos")
Lo que nos dará el siguiente resultado:
Para obtener el diagrama de bode:
plt.figure(2)
ctrl.bode_plot(sys)
Para visualizar el diagrama de polos y zeros:
from control.pzmap import pzmap
plt.figure(3)
polos,zeros = pzmap(sys_cl), plt.grid(True)
print(polos[0])
print(polos[1])
¡Trataré de crear notebook's con más ejemplos y subirlos en mi GitHub!
$ conda install -c conda-forge control
Quiero mostrarles algunos ejemplos simples utilizando el modelo de un motor NXT de Lego que describo en una entrada anterior. El modelo es el siguiente:
Creamos el objeto del modelo de la siguiente forma:
#Modelo como función de transferencia
num = [193.3]
den = [1.0, 18.735, 0.0]
sys = ctrl.tf(num,den) #Lazo abierto
print(sys)
El print nos mostrara la función de transferencia como una fracción en texto (al igual que en Matlab). Vamos a graficar ahora la respuesta al escalón de la planta en lazo cerrado:
#Modelo en lazo cerrado
sys_cl = ctrl.feedback(sys,1)
#Respuesta al escalón
t,y = ctrl.step_response(sys_cl)
#Graficas
plt.plot(t,y)
plt.grid(True)
plt.title(u"Respuesta al escalón")
plt.xlabel("segundos")
Lo que nos dará el siguiente resultado:
Para obtener el diagrama de bode:
plt.figure(2)
ctrl.bode_plot(sys)
Para visualizar el diagrama de polos y zeros:
from control.pzmap import pzmap
plt.figure(3)
polos,zeros = pzmap(sys_cl), plt.grid(True)
print(polos[0])
print(polos[1])
¡Trataré de crear notebook's con más ejemplos y subirlos en mi GitHub!
viernes, 1 de febrero de 2019
This Must Be The Place
Hoy descubrí una canción que no conocía de The Talking Heads que ahora quisiera escuchar por el resto de mi vida. Se me ha quedado muy grabado en la mente uno de los comentarios del video. Just buried a dear friend after his long battle with a cruel disease. Instead of a moment of silence, he requested this song be played. Momentos después, un tanto por accidente, me puse a escarbar en la antigua blogosfera. Suelo añorar la época en la que gente escribía con frecuencia sobre sus vidas e ideas. Entre blog y blog empecé a notar que la mayoría parecieron detenerse entre 2009 y 2011, habiendo algunos que aguantaron hasta 2013. De todos hubo uno que atrapó mi atención. El (no tan) maravilloso mundo del Jedi... Suelo saltarme las primeras entradas para tratar de recuperar la secuencia temporal. De haber leído la última entrada hubiera adelantado lo que averigüé después. El autor me cayó bien, de esas personas que hubiera disfrutado leer en 2008. Una costumbre de ex-blogger es mudarse a Twitter así que se me ocurrió buscarlo ahí. Su último tweet, fechado el 10 de agosto de 2013, era una corta despedida. Por un enlace a su Facebook publicado desde su Twitter me di cuenta, por los comentarios de sus amigos y familia, que había fallecido por leucemia en septiembre de 2013. Había visto perfiles de dueños ausentes antes, pero nunca uno tan lleno de escritos abundantes de buenos detalles. El tipo de cosas que muchos quisiéramos que nos escribieran al dejar el mundo. Sin haberlo conocido puedo decir que fue una persona que verdaderamente supo dejar huella en la gente. Incluso en un extraño como yo. This Must Be The Place me suena en la mente como el final de una pelicula.
miércoles, 23 de enero de 2019
Tres libros que verdaremante pueden cambiarte la vida
Al menos lo han sido para mí y considero buena idea hacer algunos comentarios. No me considero muy bueno haciendo reseñas pero creo que si puedo puntualizar por qué me hicieron cambiar mi modo de ver la vida.
The Practicing Mind (Ejercita Tu Mente en la edición en español), Thomas Sterner. Es un libro corto que te da una idea simple pero poderosa. Es una observación aparentemente obvia pero yo no vi hasta muchos años adelante en mi vida: Cada minuto de práctica/estudio cuenta y los minutos se acumulan con el tiempo. Ninguna habilidad se crea de la nada (ni se nace con ella), sino que debe crearse paso a paso a través de la práctica. El libro explica a detalle la profundidad que se oculta en esta idea y los consejos para llevarla a la práctica. Sin duda un libro que hubiera cambiado enormemente mi vida si lo hubiera leído a los 15 o 12.
Learned Optimism (Aprenda Optimismo), Martin Seligman. De acuerdo a las investigaciones del Prof. Seligman los consejos de este libro me habrían evitado muy probablemente el desorden de ansiedad generalizada contra el que luché por casi dos años. Y así lo creo. No se dejen engañar por el título que suena a superación personal barata. Lo digo teniendo una mente científica que no se traga cualquier cosa. En la definición del autor, optimismo es el entendimiento de que nuestras acciones cuentan y que, en la mayoría de las veces, tenemos mucho más control del que creemos, todo esto sin caer en una fastidiosa "actitud positiva" ciega.
Attached (Maneras de Amar), Amir Levine. No creo que en pocas lineas pueda hacer justicia a la manera en que este libro me abrió los ojos a todos los errores que había cometido en mi vida amorosa. Pueden quizá omitir mis anteriores recomendaciones, pero no esta. Este libro debería ser lectura obligatoria en la secundaria o preparatoria. El libro aborda el tema de de los modelos de apego en las relaciones humanas y de como aplicarlos para elegir a una pareja que se adecue a nuestro modo de apego y hasta incluso rescatar una relación. Les puedo asegurar que cuando lo lean lamentarán no haberlo hecho antes.
The Practicing Mind (Ejercita Tu Mente en la edición en español), Thomas Sterner. Es un libro corto que te da una idea simple pero poderosa. Es una observación aparentemente obvia pero yo no vi hasta muchos años adelante en mi vida: Cada minuto de práctica/estudio cuenta y los minutos se acumulan con el tiempo. Ninguna habilidad se crea de la nada (ni se nace con ella), sino que debe crearse paso a paso a través de la práctica. El libro explica a detalle la profundidad que se oculta en esta idea y los consejos para llevarla a la práctica. Sin duda un libro que hubiera cambiado enormemente mi vida si lo hubiera leído a los 15 o 12.
Learned Optimism (Aprenda Optimismo), Martin Seligman. De acuerdo a las investigaciones del Prof. Seligman los consejos de este libro me habrían evitado muy probablemente el desorden de ansiedad generalizada contra el que luché por casi dos años. Y así lo creo. No se dejen engañar por el título que suena a superación personal barata. Lo digo teniendo una mente científica que no se traga cualquier cosa. En la definición del autor, optimismo es el entendimiento de que nuestras acciones cuentan y que, en la mayoría de las veces, tenemos mucho más control del que creemos, todo esto sin caer en una fastidiosa "actitud positiva" ciega.
Attached (Maneras de Amar), Amir Levine. No creo que en pocas lineas pueda hacer justicia a la manera en que este libro me abrió los ojos a todos los errores que había cometido en mi vida amorosa. Pueden quizá omitir mis anteriores recomendaciones, pero no esta. Este libro debería ser lectura obligatoria en la secundaria o preparatoria. El libro aborda el tema de de los modelos de apego en las relaciones humanas y de como aplicarlos para elegir a una pareja que se adecue a nuestro modo de apego y hasta incluso rescatar una relación. Les puedo asegurar que cuando lo lean lamentarán no haberlo hecho antes.
lunes, 21 de enero de 2019
Leer imagenes .BIL del INEGI con Python
Los archivos de Banda Intercalada por Linea (BIL) es un formato de archivo binario en el que las distintas bandas de una imagen se concatenan formando una única matriz de datos. Los disponibles en la página del INEGI suelen tener una sola banda por lo que su extracción resulta aún más sencilla.
Para este ejemplo vamos utilizar fotografías aéreas. Vamos a ir a la pestaña de Datos, luego Mapas y finalmente a Topografía que nos mostrará este mapa. Seleccionamos la escala de 1:20,000 y nos aparecerán cuadriculas sobre el territorio y seleccionamos la que sea de nuestro interés. Al momento en que escribo esta entrada la página tiene un bug y muestra el mensaje de "No existen mapas relacionados con esta carta" cuando se da clic en cualquier zona y se podría pensar que no hay datos disponibles para ella, pero los datos aparecerán más abajo. Voy a utilizar una fotografía que cubre parte del municipio de Jojutla de Juarez, Morelos [archivo E14A69e]. Los archivos vienen en una carpeta comprimida ZIP. La información requerida para extraer los datos (dimensiones y formato) viene en un archivo .txt. En este caso el archivo es e14a69e.txt:
El programa de lectura y visualización es el siguiente:
La visualización de la imagen resultante es esta:
Para este ejemplo vamos utilizar fotografías aéreas. Vamos a ir a la pestaña de Datos, luego Mapas y finalmente a Topografía que nos mostrará este mapa. Seleccionamos la escala de 1:20,000 y nos aparecerán cuadriculas sobre el territorio y seleccionamos la que sea de nuestro interés. Al momento en que escribo esta entrada la página tiene un bug y muestra el mensaje de "No existen mapas relacionados con esta carta" cuando se da clic en cualquier zona y se podría pensar que no hay datos disponibles para ella, pero los datos aparecerán más abajo. Voy a utilizar una fotografía que cubre parte del municipio de Jojutla de Juarez, Morelos [archivo E14A69e]. Los archivos vienen en una carpeta comprimida ZIP. La información requerida para extraer los datos (dimensiones y formato) viene en un archivo .txt. En este caso el archivo es e14a69e.txt:
El programa de lectura y visualización es el siguiente:
La visualización de la imagen resultante es esta:
miércoles, 9 de enero de 2019
Cómo usar un MOSFET de potencia como interruptor
Primero, lo que debemos entender es que a diferencia de los transistores BJT, los transistores FET son conmutados por voltaje y no por corriente. Específicamente, los FET son controlados por la diferencia de potencial que existe entre la compuerta (G) y la fuente (S). Para los MOSFET, la corriente de drenaje (I_D) es proporcional al voltaje Vgs siempre y cuando este voltaje supere un valor de umbral como se muestra en la siguiente figura [Principios de Electrónica, Bates-Malvino]:
Podemos ahora poner en práctica esta consideración y simular un circuito de conmutación de una carga usando un IRF150. Este MOSFET puede aguantar un voltaje Vds de hasta 100V y una corriente Id de hasta 38A, pero usaremos una fuente de 30V solo como ejemplo. Elegiremos un voltaje Vgs de 15V para garantizar la corriente de saturación:
Vemos que este circuito funciona correctamente. Este modo se conoce como Low-Side. ¿Pero que ocurrirá si requerimos que la carga a conmutar deba estar por debajo del MOSFET [High-Side]? Si hacemos la simulación de este nuevo caso notaremos un problema:
Lo que se observa en este caso es que el voltaje entre las terminales G y D supera el voltaje de umbral pero no es lo suficientemente grande para garantizar la corriente de saturación. Esto es un problema muy común a la hora de construir inversores para convertir CD en CA. Este problema se resuelve utilizado un driver de boostrap como pueden ser el IR2001 o el IR2010. La siguiente simulación ejemplifica la manera correcta de conmutar un MOSFET con la carga por debajo:
Es importante señalar que este modo de conmutación no funciona de manera indefinida debido a la descarga del capacitor. Pero en aplicaciones de PWM funciona perfectamente siempre y cuando se elija un valor de capacitancia que mantenga encendido al MOSFET durante todo el ciclo de trabajo. En la práctica la conmutación de potencia suele realizarse desde un microcontrolador, así que recomiendo checar los modelos de drivers de conmutación que maneja Microchip tanto para Low-Side como High-Side y utilizar opto-acopladores ya que el voltaje de encendido supera los 10V en la mayoría de los MOSFET's de potencia.
Podemos ahora poner en práctica esta consideración y simular un circuito de conmutación de una carga usando un IRF150. Este MOSFET puede aguantar un voltaje Vds de hasta 100V y una corriente Id de hasta 38A, pero usaremos una fuente de 30V solo como ejemplo. Elegiremos un voltaje Vgs de 15V para garantizar la corriente de saturación:
Vemos que este circuito funciona correctamente. Este modo se conoce como Low-Side. ¿Pero que ocurrirá si requerimos que la carga a conmutar deba estar por debajo del MOSFET [High-Side]? Si hacemos la simulación de este nuevo caso notaremos un problema:
Lo que se observa en este caso es que el voltaje entre las terminales G y D supera el voltaje de umbral pero no es lo suficientemente grande para garantizar la corriente de saturación. Esto es un problema muy común a la hora de construir inversores para convertir CD en CA. Este problema se resuelve utilizado un driver de boostrap como pueden ser el IR2001 o el IR2010. La siguiente simulación ejemplifica la manera correcta de conmutar un MOSFET con la carga por debajo:
Es importante señalar que este modo de conmutación no funciona de manera indefinida debido a la descarga del capacitor. Pero en aplicaciones de PWM funciona perfectamente siempre y cuando se elija un valor de capacitancia que mantenga encendido al MOSFET durante todo el ciclo de trabajo. En la práctica la conmutación de potencia suele realizarse desde un microcontrolador, así que recomiendo checar los modelos de drivers de conmutación que maneja Microchip tanto para Low-Side como High-Side y utilizar opto-acopladores ya que el voltaje de encendido supera los 10V en la mayoría de los MOSFET's de potencia.
viernes, 7 de diciembre de 2018
Aguacates gratis
Desde finales de julio de este año que termina me entró la espina de plantar arboles de aguacate por toda la Unidad Morelos. Supongo que aquí debería comenzar a relatar todas las cosas que ocurrieron en este año para que tengan más claro el contexto. Es toda una historia que debería utilizar como motivación para regresar a bloggear con más frecuencia. Pero diré por ahora que la razón principal por la que he estado plantando arboles de aguacate ha sido porque me gustaría que en 7 o 10 años en el futuro la gente pueda salir a cortar aguacates sin gastar dinero. Con eso sabría que estoy contribuyendo económicamente al menos un poco en mi comunidad. Además están los beneficios de la sombra, la captación de CO2 y la estética (es más bonito ver arboles por todos lados). Es muy sencillo germinar huesos de aguacate. Hay varios video-tutoriales, aunque lo funciona mejor es enterrar el hueso tan pronto le salen raíces y no hasta después que le salgan las hojas como suelen decir. También funciona muy bien enterrar el hueso directamente (cosa que he hecho por toda la Unidad). Espero que más personas puedan ayudarme a sembrar más arboles por todo el sur de Morelos.
Suscribirse a:
Entradas (Atom)