TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: superprp en 16 de Febrero de 2012, 17:06:02

Título: Sincronizar dos microcontroladores
Publicado por: superprp en 16 de Febrero de 2012, 17:06:02
Buenas,

Me gustaría que los timers de dos microcontroladores funcionasen coordinados de tal forma que empezasen desde 0 al mismo tiempo. Como es ésto posible con el menor retardo? planteo mis opciones y ninguna me convence por complejidad o por no ser la más optima, acepto sugerencias:

- Contador externo que interrumpa a los dos micros, misma longitud de pista hacia un micro y hacia otro para que el tiempo sea identico.

- Que un micro antes de resetar el timer interrumpa al otro para avisarle de que lo resetee también éste.

- Utilizar el mismo reloj e intentar que arranquen a la vez y que el software hasta que arranca el timer sean los mismos (esta para mi es la peor y no se si es factible)

la comunicación en SPI, permite sincronizar también los timers? la comunicación es sincrona pero no se si es posible también coordinar los timers de ambos micros...

alguna idea??
Título: Re: Sincronizar dos microcontroladores
Publicado por: RICHI777 en 16 de Febrero de 2012, 20:14:30
Hola, bastante rebuscado lo que pedís. La primera duda, los dos micros van a correr el mismo firmware ? Si esto es correcto, podrías alimentar a los dos con un oscilador externo ( pero no directamente de un cristal ), de esa manera garantizas que los micros corren exactamente a la misma velocidad. Si no es así sincronizaría a los timers de los dos micros usando el Input capture de los timers, el problema con esto es que como corren distintos firmwares puede darse que un timer corra después de otro si justo en el momento que tienen que sincronizarse por el imput capture uno de los dos este dentro de una interrupción. Esto último podría resolverse si el micro tiene interrupciones con prioridad programables o armando un esquema por soft en su reemplazo. Igual nunca podrías estar seguro de que esten 100 % sincronizados ya que cuando el micro atiendo una interrupción termina la ejecución en curso y los dos pueden estar ejecutando instrucciones totalmente distintas.

Igual el desafío esta bueno.

PD. También podrías comentar para que necesitas esto, en una de esas aparecen soluciones mejores.

Saludos !

Título: Re: Sincronizar dos microcontroladores
Publicado por: MerLiNz en 16 de Febrero de 2012, 20:16:25
que sincronizacion quieres? de segundos? milisegundos, us??

dependiendo de que quieras puedes usar la interrupcion externa, que cuando suceda ambos pics dejen un delay y ya estaran sincronizados, el problema esta en que el cristal tiene error y con el tiempo se volverian a desincronizar (igual que los relojes) por eso tendrias que enviar esta señal cada X tiempo para que se vuelvan a sincronizar.
Título: Re: Sincronizar dos microcontroladores
Publicado por: NoSepComo en 17 de Febrero de 2012, 06:11:56
La solución de Merlinz está bien, puedes usar también un PLL para enganchar los relojes de los micros con más seguridad, de esa manera tendrán la frecuencia calcada aunque estén un poco desfasados, para la medida de tiempos está bien yo pienso.
Título: Re: Sincronizar dos microcontroladores
Publicado por: JBQ en 17 de Febrero de 2012, 07:10:51
Se me ocurre algo loco, dependiendo del uc que estes usando. el timer de uno sea el clock el timer del otro; osea, los pulsos del timer de un micro, salen por un puerto de uc, y hacen de clock del timer del otro micro, configurado este último al doble del primero. se entiende???
Título: Re: Sincronizar dos microcontroladores
Publicado por: NoSepComo en 17 de Febrero de 2012, 10:10:03
Hola, yo pienso que lo que ha dicho jbq es imposible, además de la imprecisión inherente a los cambios de nivel de las salidas digitales, tendrías que sumar los retardos de propagación, tiempos de recepción en el otro pic y procesado... es imposible, en todo caso pillar el reloj, o conectarlos a través del I2C o el SPI, aunque siempre tendrás tiempos de retardo, el error por lo menos será constante de esta forma, simplemente tendrías que calcularlo y tenerlo en cuenta para arrancar las temporizaciones.
Título: Re: Sincronizar dos microcontroladores
Publicado por: superprp en 17 de Febrero de 2012, 16:03:07
Quiero que el error sea mínimo (us) menos de 1ms, y que nunca se desincronicen, es decir, que periodicamente se resincronicen.

Cada uno corre un software diferente. Uno lo quiero para leer encoders de un motor y enviar los comandos de velocidad etc.. y el otro lo quiero para leer un IMU (sistema inercial con acelerometro y giroscopo), también un GPS, y lo que quiero es guardar cada 1 ms (t0) guardar incremento de encoders, incremento de acc e incremento de velocidad angular, así como la nuev posición, y tener todos estos datos en el mismo instante de tiempo, para que cuando se procesen sean los datos coherentes.
Cuanto mas retardo exista, mayor será la desviación de los calculos, entonces quiero tener error de us para que sea despreciable y no me afecte en el calculo de la posición.

Creo que la mejor opción es la de un oscilador externo (de frecucia menor que la de los microcontroladores) y que interrumpa a ambos micros a la vez y en ésta interrupción se reseteen los timers. Pero me gustaría saber si hay alguna opción que no requiera ningún elemento externo.

Con el SPI se puede hacer ésto?
Título: Re: Sincronizar dos microcontroladores
Publicado por: MerLiNz en 17 de Febrero de 2012, 16:06:57
creo que tu mejor opcion es un pic potente, con 1 pic te olvidas de sincronizar nada ademas los hay muy veloces, desde un dspic33e a 60MIPS como un PIC32 a +80MIPS vamos que harias el trabajo de 4 pics de 8bits a la vez.
Título: Re: Sincronizar dos microcontroladores
Publicado por: NoSepComo en 20 de Febrero de 2012, 06:14:37
Pues se podría con el SPI, pero lo veo muy complicado que sea tan síncrono, sin embargo si que puedes tener velocidad suficiente, de poder cambiar tu diseño hardware yo haría lo que te ha dicho Merlinz, usa un pic gordo y te olvidas, que los hay con capacidad de sobra para llevar un sistema de análisis de señal en tiempo real, que es más o menos lo que buscas.
(Aunque ya te digo que con dos puedes también, porque mira los coches, con un CAN hacen un tratamiento de la información en tiempo real)
Título: Re: Sincronizar dos microcontroladores
Publicado por: RICHI777 en 20 de Febrero de 2012, 11:03:16
.
Título: Re: Sincronizar dos microcontroladores
Publicado por: superprp en 20 de Febrero de 2012, 16:29:56
Para mi proyecto en concreto, descarto el utilizar un microcontrolador o un microprocesador más grande para realizar todas las tareas, actualmente tengo pensado comunicar 2 dsPIC bastante grandes funcionando a 40Mhz (a priori).

No se si alguien tiene alguna idea mas de como hacerlo. Gracias por los aportes
Título: Re: Sincronizar dos microcontroladores
Publicado por: MerLiNz en 20 de Febrero de 2012, 18:39:55
me temo que ese tipo de velocidades no podras llegar a sincronizar correctamente, ya de por si el SPI es 4 veces menor a la velocidad del micro.

Ya por puro cotilleo, que piensas hacer que necesitas tanta velocidad para tener que usar 2 pics?