El tema es que lo tengo montado para controlar un pequeño robot. Algo
sencillo, un sensor de colisión, dos sensores de temperatura sobre I2C, dos
motores de contínua con un L298, comunicación por RS232 y poca cosa más.
Hasta ahora funcionaba bien (o eso creía). El tema es que ahora le estoy
haciendo que su comportamiento lo marque una máquina de estados finitos
(FSM), y he visto que cada tanto el PIC se reinicia (iba a decir que sólo,
pero no, si se reinicia es que hay un fallo de diseño en el circuito, en la
programación o yo qué sé), por lo que a tomar la FSM.
Por cierto, los reinicios son aleatorios, no pasan cada un cierto tiempo
determinado, y suceden en dos placas diferentes en diseño físico
(distribución de elementos y pistas) pero iguales en diseño lógico.
La pregunta es, qué puede provocar que un PIC se reinicie?
El motivo más frecuente es ruido eléctrico en los pines. Si comparten
fuente de alimentación el PIC y el motor, se produce ruido y saltos de
tensión que pueden activar el circuito de brown-out o provocar cambios
aleatorios en el estado de la CPU (por ejemplo, cambios del PC). Quítale
los motores o aliméntalos de una fuente secundaria para ver si
desaparecen los reinicios. También te pueden ocurrir si la corriente del
motor comparte camino con la del micro (trazado incorrecto), entonces no
se soluciona con dos fuentes sino con un retrazado.
--
Saludos
Miguel Giménez
todo el sistema está alimentado por una pila de 9V. El PIC a través de un
7805 (5V); y el L298 tiene Vss conectado también a la salida del 7805, Vs
directamente a la pila de 9V y GND al negativo de la pila, que es común
también para el PIC.
Si cambio la pila por un alimentador externo enchufado a la red sigue
pasando.
Lo acabo de probar simplemente desconectando los motores. También ha llegado
a reiniciarse, y me aventuraría a decir que ha tardado bastante más en
hacerlo (aunque como es bastante aleatorio, no es seguro que así haya sido).
Miraré de separar circuitos de alimentación a ver qué ocurre.
Gracias
--
Saludos
Miguel Giménez
1º. Problema software. Como el reseteo es aleatorio, y suponiendo que el
programa lo has escrito en C, habrá que suponer que no es un timer contando
sin control, ni un salto a la página incorrecta, ni nada parecido, pero sí
podría ser por ejemplo que hayas configurado una patilla de reset y no la
hayas conectado. En ese caso, cuando reciba un pico de ruido suficientemente
grande (por radio), reseteará. También podría pasar algo parecido si tienes
un timer configurado por error con un clock externo.
2º. Problema hardware. Lo que te han dicho, ruido en la alimentación, es la
causa más común. La solución, separar alimentaciones de potencia y lógica,
sobredimensionar condensadores de filtro, añadir un condensadore de filtro
de 100nF a la alimentación del PIC, lo más cerca posible de él, asegurar que
las pistas de alimentación y masa están correctamente dimensionadas y
trazadas, y que no sean compartidas por el circuito de potencia y el lógico.
Luego ya podría haber problemas más sutiles, como un acoplamiento incorrecto
entre el PIC y otros chips (una resistencia en cada puerto utilizado que
limite la corriente máxima a 15mA puede hacer milagros).
Otro problema típico con control de motores mediante puentes H es no dejar
tiempo suficiente para la conmutación en cada rama de la H, con lo que
puedes tener corrientes instantáneas muy altas, cercanas a cortocircuito,
que echen abajo la alimentación (esto además seguiría pasando aunque
quitaras los motores).
En fin, ya nos dirás.
--
Saludos de Jose Manuel Garcia
jose...@terra.es
http://213.97.130.124
"jugator EChMotor#140" <jug...@gmail.com> escribió en el mensaje
news:fuhrvc$in0$1...@localhost.localdomain...
pues no dejo tiempos muertos, no. Miraré de ponerlos ahora. El condensador
sí que está puesto.
Muchas gracias
me repasaré a fondo el código, ya que estoy reutilizando algo que alguien
creó en su día
> 2º. Problema hardware. Lo que te han dicho, ruido en la alimentación, es
> la
> causa más común. La solución, separar alimentaciones de potencia y lógica,
> sobredimensionar condensadores de filtro, añadir un condensadore de filtro
> de 100nF a la alimentación del PIC, lo más cerca posible de él, asegurar
> que
> las pistas de alimentación y masa están correctamente dimensionadas y
> trazadas, y que no sean compartidas por el circuito de potencia y el
> lógico.
>
ahora estoy rediseñando la placa para separar circuitos.
> Luego ya podría haber problemas más sutiles, como un acoplamiento
> incorrecto
> entre el PIC y otros chips (una resistencia en cada puerto utilizado que
> limite la corriente máxima a 15mA puede hacer milagros).
>
> Otro problema típico con control de motores mediante puentes H es no dejar
> tiempo suficiente para la conmutación en cada rama de la H, con lo que
> puedes tener corrientes instantáneas muy altas, cercanas a cortocircuito,
> que echen abajo la alimentación (esto además seguiría pasando aunque
> quitaras los motores).
>
lo que comenta Miguel. Lo miraré
> En fin, ya nos dirás.
>
muchas gracias a los dos
En la placa nueva ha seguido fallando, si están los motores conectados.
Desconectando uno o los dos motores, ha dejado de reiniciarse.
La placa nueva de la antigua se diferencia en que la nueva integra toda la
circuitería en una única placa, mientras que la antigua es una placa para la
alimentación, PIC y motores y después conectores para la electrónica de
sensores, comunicaciones y demás.
A ver si hago la prueba separando circuitos a ver qué pasa
"jugator EChMotor#140" <jug...@gmail.com> escribió en el mensaje
news:fuhqir$hvv$1...@localhost.localdomain...
> en concreto un PIC18F452.
>[...]
"jugator EChMotor#140" <jug...@gmail.com> wrote in message
news:fuial2$pga$1...@localhost.localdomain...
Así que ahora a modificar el diseño y ale, a funcionar.
gracias!
"jugator EChMotor#140" <jug...@gmail.com> escribió en el mensaje
news:fuhqir$hvv$1...@localhost.localdomain...
se me había pasado este mensaje. En principio parece estar solucionado, pero
tomo nota por si finalmente los problemas persisten.
gracias