Buscar este blog

miércoles, 25 de marzo de 2020

Control de ciclo util de un PWM

La modulación por ancho de pulsos es una técnica en la que se modifica el ciclo de trabajo (o ciclo util) de una señal periódica, para transmitir información a través de un canal de comunicaciones o para controlar la cantidad de energía que se envía a una carga. En este caso se utilizara esta tecnica para cambiar la potencia que recibe un motor y controlar su velocidad.






Componentes:


El circuito se compone de un contador BCD programable y 3 multiplexores, los cuales tienen el mismo dato de seleccion, dicho dato es el que tiene codificado el ciclo util de la salida.




Para mas informacion sobre el contador programable ver contador programable.
 

Conexion

Las entradas de los multiplexores pueden variar de acuerdo a los niveles de velocidad requeridos, para este proyecto se necesitan 11 velocidades, por eso se usan mux de 16 entradas.
Las entradas inicio y fin del contador son de cuatro bits ya que son tipo BCD, asi mismo deben ser, por tanto, los dos mux de entrada. Sin embargo la salida (el PWM) solo necesita 1 bit, por esto es que el mux de salida sirve para escoger unicamente el bit que cumple con el ciclo util requerido.


 Funcionamiento

El contador tiene 4 bits de salida y por tanto 4 PWM para escoger. Una vez claras las conexiones anteriores, el ciclo util se limita de la siguiente forma:

1. Viendo la tabla de secuencia del contador se ve que hay velocidades donde no es necesario limitarlo o iniciarlo.



50% (igual numero de 1's y 0's)
40% (cuatro 1's y seis 0's ) y
20% (dos 1's y ocho 0's)

Para estas velocidades se usan los limites comunes del contador (0 a 9), estos valores van como constantes a los mux de entrada, y en el mux de salida se toma el bit deseado.




2. Sin embargo para formar cualquier ciclo util hay que limitar el contador, para que trabaje en una zona especifica.



60% (cuatro 0's y seis 1's,  o equivalentemente dos 0's y tres 1's)
80% (cuatro 0's y un 1) 

Una vez establecidos los limites necesarios se configuran como contantes en los mux de entrada y se escoge el bit de salida tal como antes, la unica diferencia es que los limites no son 0 y 9.


martes, 24 de marzo de 2020

visualizacion velocidad motor

Para convertir una señal mecánica a digital usamos un enconder en este caso un octopador con el espacio suficiente para que pudiera entrar un pequeño "engranaje"
De esta manera cada según la configuración nos muestra un 1 si el engranaje o que mueve el motor deja o no polarizar el octoaclopador de esta manera podemos contar vueltas en un instante de tiempo podemos utilizar un debouncer y reloj a 1hz para de esta manera sincronizar y medir las vueltas que tendrán en 1 segundo
Para evitar que el contador se sobrescriba la medicion se usa un divisor de frecuencia que deshabilite el contador al acabar el segundo 


lunes, 9 de marzo de 2020

Practica: Contador programable

Se deseaba un contador de 4 digitos BCD que permita definir punto de inicio y de fin de la secuencia. Los datos debian ingresar por teclado matricial y permitir cambiar entre modo manual y automatico.

Diseño

Para empezar se diseñó un contador de 1 digito BCD (4 bits) que permitiera modificar su punto inicial haciendo uso de un contador ascendende - descendente previamente diseñado (aqui), y de las entradas, Preset y Reset, de cada flip-flop. 
El contador esta hecho con flip-flops tipo JK, con las entradas preset y reset cada uno resulta:


Al componente del contador se le agregaron las mismas entradas (1 bit por cada flip-flop). Como se ve:
Una vez Terminado esto se procede a controlar el limite superior del conteo. Para esto se detecta el valor deseado (fin),  y se habilitan las entradas S y R que estan conectadas al otro limite (fin). LLegar al final de la secuencia habilita el "seteo" del inicio, como se puede ver:


El valor de inicio se niega para que los bits que sean 0 pasen como 1 al reset. Para habilitar el Reset general del contador se uso un Mux que envia 1 a todos los reset.
Se presento el problema del inicio de la secuancia, pues solo setea al terminar de contar una vez, para solucionar esto esta el FFD que envia un 1 al habilitador de inicio antes de que pase el primer flanco del reloj.
Una vez probado este componente se procedio a unir 4 iguales. Con los mismos valores de inicio y fin, conectados por la señal "C" (carry) lo que implica que cuando se resetea un contador aumenta el siguiente. A continuacion se ven los cuatro contadores con el sistema de visualizacion:


Prueba

Ahora los videos de prueba del contador de 4 bits programable, en modo ascendente (2 a 7):



Y modo descendente (8 a 3):




domingo, 1 de marzo de 2020

PONG

PONG
Es un juego virtual basado en el tenis de mesa en que se simulan dos raquetas al extremo de un tablero y el objetivo es hacer un punto en el lado del oponente en el área que no alcanza la raqueta 
se nos propone realizar el diseño de un pong en la psoc para la solucion del problema partiremos el problema en partes la pelota , las raquitas y el marcador  despues integraremos todo en un solo diseño que se implemetnara en una matriz de led compuesta de 5 matriz de led 7*5
 .
Raquetas
Para aclarar el movimiento de las raquetas será un desplazamiento de bits e un secuencia desde una posición a otra a traves de la entrada de una señal de subida o bajada,como la barra de mueve de manera horizontal contamos con 7 bits al que le tienen que llegar 1 o 0 dependiendo del tipo de matriz , son 7 estados en el que se puede o no ilumar el led por lo que partimos de la idea de que nesecitamos minimo 3 filps flops antes de iniciar podemos volver una entrada dos entrada al jugar con la entrada podemos decir que con un 1 subimos y con otro bajamos al poner como relog una xnor entre las dos entradas y una entrada directa como arriba el sistema recibira 1 cuando se oprima arriba y cuando se oprima 0 recibira 0
Q3*=Q1Q0EN+Q2EN
Q2*=Q3NEGADO(Q1 XOR Q2)+ENNEGADO(Q3Q2NEGADOQ1NEGADO+Q3NEGADOQ2Q1)
Q1*=Q3NEGADOQ1NEGADO(Q2+EN)+Q3Q2NEGADOQ1NEGADOENNEGADO


Ahora para ver como implementar las salidas veremos el diagrama de como se enciende cada led en cada estado
De esta manera tendremos 7 salidas una para cada fila claro negadas dado que en esta matriz las filas se encienden con 0
f0=A
F1=A+B
F2=A+B+C
F3=B+C+D
F4=C+D+E
F5=D+E
F6=E
Con esto tenemos el bloque completo que controla una raqueta para sincronizarlo utilizamos un deco para las columnas y sincronizamos con una and la columna en la que queramos que aparezcan la raquetas y repetimos este componente para otra raqueta con otros controles
Pelota
El diseño de la pelota se realizo por medio de registros de desplazamiento, uno para filas y uno para columnas. A diferencia de los registros universales se omitio la carga en paralelo y la opcion de mantener 
 la pelota siempre se mueve en alguna direccion, dando como resultado:
Para que ingrese el primer 1 en el registro pero no se repita se utilizo un flip flip D que cambia su estado inicial en el primer flanco del reloj y se mantiene ahi.
Como se utilizaron registros con solo dos opciones de desplazamiento (izquierda o derecha) solo fue necesario un bit de seleccion, dicho bit se controla mediante un flip-flop jk (j derecha, k izquierda) cuyo estado inicial es 0 (por eso la entrada de la pelota es la izquierda). Los bits de J y K se toman de las salidas del registro, las filas.

En un principio se penso en usar las filas inicial y final, pero el bit del selector no alcanzaba a cambiar antes de que la pelota uera desplazada fuera del juego. Para solucionar esto bastó con tomar las filas justo anteriores a las pensadas antes, la segunda y penultima, dando tiempo suficiente al registro de cambiar de direccion.
PUNTAJE
Por ultimo para el conteo de puntaje solo tenemos que tener en cuenta los limites en cada raqueta esta y cuando la pelota pasa por un led que no tiene la raqueta es un punto de esta manera se hace un comparacion bit a bit con los dos negados  solo en los limites de la cancha ,con eso solo nesecitamos una visulacion de una secuencia de numeros hecho con un contador un mux y unas rom con el numero correspondite a la secuencia

CAMBIO DE TAMAÑO
   esta es la parte mas facil cada una de las partes anteriores estaban configuaradas para un esapcio deternanodo el puntaje ya de por si por las rom ocupa los extremos y asi que tenemos el medio de la matriz para maniobrar el tamaño podemos utlizar multriplexores a los selectores de colimnas de cada componente sincronizando el inicio de la secuencia de la pelota y final con los limites de barras 

sábado, 29 de febrero de 2020

Registros de desplazamiento

Registros de desplazamiento 

Un registro de desplazamiento, como su nombre lo indica, en un componente que permite realizar un corrimiento de datos entre los bits de un bus, ya sea de manera serie o paralelo.

Diseño

Se utilizan flipflops para mantener los datos, para controlar el movimiento de los mismos se emplean varios MUX con los mismos selectores. Un registro de desplazamiento universal (n bits) tiene una entrada serie por izquierda, una por derecha y n bits de carga en paralelo, por tanto se tiene:

Se usan tantos Mux como bits tenga el resgistro, para un registro de 5 bits, en este caso la salida va a los catodos de una matriz de led, para desplazar un 0 en vez de un 1 se niega al final:



Como se evidencia en la imagen, el primer y ultimo mux tienen las entradas serie de todo el componente y la carga paralelo va a cada mux por separado. El componente resultante en Psoc creator es:



Implementacion (ejemplo)

Con el fin de observar el registro funcionando, se implementó un circuito que muestre una luz rebotando en el eje horizontal de una matriz con 5 columnas. A continuacion el video:



Si a parte del registro de columnas se utiliza un registro para variar las filas, se puede ver la luz rebotar por toda la matriz.



La logica para ingresar un solo dato y limitar el rebote se presenta mas a fondo en el proyecto: Pong

domingo, 16 de febrero de 2020

conversor binario exceso 3 serie

conversor 4 bits
Analizaremos el problema pensado en que pasa a medida que la entrada como noción que al sumar un numero impar a un numero impar de entrada el resultado será par y si es un numero par el resultado será impar por lo que si entra 1 como bit menos significativo sale un 0 por lo tanto se tiene un 0 sale un 1


Ahora tenemos dos estados y evaluaremos a que estado cambiara a medida que cambia la entrada en el estado correspondiente, a través de la tabla, por inducción vemos que cada estado tiene dos posibles salidas por lo que se duplicaran la cantidad de estados a medida que entren mas números en la siguiente tabla vemos como pasa de los estados iniciales a los siguientes en función del siguiente numero













Vemos una gran cantidad de estados y transiciones pero evaluamos los estados para ver si los podemos simplificar


De la tabla podemos notar que K=M=O, I=J=N Y H=L=I
con esto podemos reducir los estados a 7

Con esto tenemos 7 estados con lo que podemos construir un tabla y sacar las ecuaciones para el sistema

con esto sacaremos las ecuaciones usando algebra 
           Q2*=Q1NQ0NE+Q2Q1Q0+Q0INQ2N
         Q1*=Q0
          Q0=Q1N
SALIDA=Q2NIN+Q2I
con esto implementaremos el sistema




Practica : Contador BCD

Practica : Contador BCD

La practica de esta semana consistió en diseñar e implementar un contador BCD con flip-flop's JK. Como puede ser conveniente para un caso futuro se diseño con modo ascendente y descendente.

Diseño:

Primero se realiza el diagrama de estados y se codifican los mismos, para un contador es mejor una maquina Moore, donde la salida solo cambia con cada flanco de reloj. Teniendo en cuenta la entrada de direccion (ascendente o descendente) tenemos lo siguiente:



De aqui se obtiene la siguiente tabla y ecuaciones:  
 


Montaje:

Una vez que se han implementado las ecuaciones  en PSoC creator se tiene el siguiente componente:

  

Donde la entrada R es Reset y D direccion del conteo.
Finalmente para mantener el dato actual se controla el reloj multiplicandolo por otra entrada, E de Enable. Dando como resultado el siguiente top design en PSoC creator:
Como se observa, con el fin de visualizar con mayor comodidad los datos se utiliza un deco BCD@7segmentos, con la entrada D igual a 1 el contador esta solo en modo ascendente.
A continuacion un video del contador funcionando:




domingo, 27 de octubre de 2019

Modulo visualizacion dinamica

Para poder visualizar 4 digitos en pantallas de 7 segmentos se requiere un modulo de visualizacion dinamica:



 Como se puede ver, consta de un multiplexor de 16 a 4, que es lo mismo que tener un MUX de 4 a 1 donde cada entrada es de 4 bits, tiene por tanto 2 selectores.
El contador va muy rapido alternando los selectores del mux y sincronizando estos con los comunes de las pantallas 7 segmentos por medio de un deco. 
Durante todo este poceso los daots se manejan en codigo BCD, finalmente se agrega un deco BCD@7segmentos a la salida del MUX.

Practica : Sistema de seguridad de una caja fuerte.

El proyecto de esta semana consistio en implementar un circuito que permita definir una clave de seguridad y que sea capaz de reconocerla despues para que responda abriendo la caja.

Componentes necesarios:

-Registro de desplazamiento (4 bit)
-Decodificador de teclado matricial
-Componente de visualizacion dinamica
-Componente que almacena y compara la clave
-Bloqueo del teclado por un tiempo t.

Almacenamiento y verificacion de clave:

Para esta componente solamente fueron necesarios flip-flops tipo D y compuertas xor. La suma exclusiva funciona como comparador de un bit, si se coloca entre la salida y entrada del ffD nos indica cuando son iguales la entrada del ff y el dato que tiene almacenado.
Finalmente se juntaron 16 comparadores de este tipo (16 bits) con una sola salida que indica cuando todos son iguales.

Decodificador de teclado matricial:

Este componente fue diseñado previamente, hay en mas detalles aqui.

Componente de visualizacion dinamica:

Este componente fue diseñado previamente, hay en mas detalles aqui.

Registro de dezplazamiento (4 bit)

El ingreso de datos de la caja fuerte se hizo por medio de un registro de desplazamiento, el cual funciona con flipflops tipo D para guardar el dato y con MUX (8 a 4) para escoger si esta en modo escritura (desplazamiento a la izquierda) o en modo borrar (desplazamiento a la derecha).


Todos los flipflops tienen el mismo reloj, y como se puede observar depende del selector si los MUX envian el dato del flipflop siguiente o del anterior. Este selesctor depende de un flipfliop JK donde J es escribir y K borrar.
Se presento un problema dado que el selector de los MUX debia cambiar del estado de escritura a borrado inmediatamente, de lo contrario seguirian ingesando 0's en el display. La primera solucion fue "resetear" de manera asincrona el flipflop que controla aquel selector.
Sin embargo luego de borrar se presenta el mismo problema, debe volver al estado de escritura justo despues de haber borrado, para evitar este problema se uso un debouncer con la entrada negada para que envie un ulso al reloj de flipfliop cada vez que se deja de presionar "borrar" para que vuelva al estado escribir.

Bloqueo del teclado:

 Para impedir que se puedan ingresar datos por el teclado se utilizaron dos contadores, uno para el numero de errores y otro para el tiempo de bloqueo del teclado.

Montaje:

 En PSoC creator:

Los componentes necesarios se juntan de la siguiente forma en el top design:
Los datos ingresan por medio del decodificador de teclado matricial al registro de desplazamiento y a un comparador que sirve para diferenciar numeros de letras, entre otras cosas. Todo se sincroniza con el debouncer del teclado.
La salida del registro de desplazamiento va a la visualizacion dinamica y a el componenete que almacena y compara la clave. 
Finalmente la salida del componente comparador va al contador de errores, para activar el bloqueo del teclado.

 En protoboard:

 

lunes, 14 de octubre de 2019

sumador-restador

SUMADOR RESTADOR
ya hemos hecho suma y como sabemos que la resta es un caso en especifico de la suma debe haber una manera de hacer con sumas una resta ,siguiendo las propiedades sabemos que lo podemos conseguir a través de complemento a 1 y sumándole 1 al resultado el complemento lo podemos hacer con una compuerta xor y utilizando sumadores completos con los dos números en el caso de la suma podríamos tomarlo directamente del primer sumador pero como hay que agregar la resta utilizamos ,el complemento a uno condicionado al signo para que no cambie si esta sumando y se va a otro sumador completo con un carry de entrada del signo que conocemos al saber que el numero solo es negativo cuando se esta restando y el segundo numero es mayor.
Con el sumador restador ya diseñado crearemos ahora la entrada de todos los datos a través  del teclado ,restringiremos los datos entrada a los números decimales y utilizaremos el botón A para grabar el primer numero y la operación suma , el botón B para guardar el segundo numero y la operación de resta .Para restringir la entrada utilizaresmos un comparador para que a las memorias solo le llegen valores menores a 10
con esto utilizaos un flip flop que solo se moverá si los números son menores a 10 y será una condicional adicional al los selecrores de las memorias

Con esto podemos dectear cuando se oprime B y A con esto determinaresmo si es suma o resta 
hacemos una pequeña modicacion a la memoria de lectura y escritura para que siempre se pueda muestre el numero y el selector solo afecte la escritura de manera en que podamos operar dos numeros a la vez preocupandonos solo por el selector de cada uno y como sabemos que si no es una memoria es la otra podemos utilizar la salida sumaresta para los selectore claro en una llegando negada
como sabemos sumados dos números de 4 bits lo cual podría dar como resultado un numero de 5 bits para convertido a bcd utilizamos el integrado 74185 ya implementado en previas practicas y para asegurarnos del que el numero tenga el signo negativo en la visualización sincronizamos el segmento g del digito de decenas cuando el sumador restador nos diga que el numero es negado además de evitar que todas los demás segmentos se iluminen 
NOTA:se hizo teniendo el cuanta que los siete segmentos destino son ánodo común


Control de ciclo util de un PWM

La modulación por ancho de pulsos es una técnica en la que se modifica el ciclo de trabajo (o ciclo util) de una señal periódica, para tran...