Autor Tema: Mis experiencias con el BUS CAN  (Leído 602380 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1230 en: 28 de Octubre de 2012, 13:23:35 »
Buenas!
 La resistencia se ponen para cerrar el bus  quedaria asi




Exactamente, para aclararlo aun mas, las resistencias van en los extremos del bus, y se llaman resistencias terminadoras de bus.
Son de 120 Ohm cada una.
Si miras las especificaciones del bus CAN, veras que hay varias formas de cerrarlo, y las mas completas tienen resistencias de BIAS, que van conectadas a ambas tensiones de alimentacion y tambien a masa.
Te puedo asegurar por experiencia propia, que si dejas una resistencia que a traves de un jumper, puedas seleccionar que cierre el bus, en cada placa que hagas, nunca tendras problemas y cualquiera de las placas podra estar en el final del bus. :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1231 en: 28 de Octubre de 2012, 13:26:29 »
Hola,gracias por responder pronto,entonces reafirmando...
Entiendo que mis dos uC´s no tienen el modulo CAN incorporado, es por eso que compré los modulos externos MCP2515 y MCP2551

1.-Asimilando que trabajaré a 125 Kbps, deberé de incluir tal cual la libreria "can-mcp251x.c" ya sin ninguna modificacion ??
2.-Y para la simulación ¿Que Software usaste ? acostumbro a usar Proteus, pero no tiene los dispositivos MCP2515 y MCP2551 :(

No se puede simular CAN con el Proteus, y aunque consiguieras un simulador, te aconsejo que hagas tus experiencias directamente sobre circuitos, aunque esten armados en protoboard, ya que sino te perderas de miles de detalles que el simulador no te advertira. :? :?
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1232 en: 30 de Octubre de 2012, 06:37:11 »
Buenos días MGLSOFT,

Pero porque ponerle con las resistencias con un puente??Si son necesarias porqué no ponérsela fija??

Y sobre el tema de analizador que estoy haciendo con el FT232 cómo lo ves??

Gracias.
Un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1233 en: 30 de Octubre de 2012, 08:13:49 »
El jumper es para seleccionar cual de los equipos es fin de linea, de otro modo si tuvieras todos equipos iguales, deberías tener 2 de ellos con las resistencias puestas y los demás no, o sea te obliga a preparar un equipo cada vez que reemplazas uno o cuando cambias la traza del Bus.

Para el micro el FT232 es transparente, en la PC es un puerto COMM virtual, así que no le veo problemas, de hecho yo tengo así parte de mis debuggers por serie.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1234 en: 30 de Octubre de 2012, 08:40:00 »
Gracias por tu rápida respuesta. Ahora si me he liado más.

Para la aplicación que quiero hacer habrá 5 tarjetas con bus CAN. y creía que todas deberían de llevar la resistencia. ¿Cuándo un equipo es fin de línea?

Muchas gracias.
Un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1235 en: 30 de Octubre de 2012, 09:25:23 »
Te contesto con otra pregunta:
Porque no dibujas como vas a implementar tu BUS y luego determinas cuales son sus extremos??

Alli veras tu mismo cuales deben llevar las resistencias... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1236 en: 30 de Octubre de 2012, 10:31:07 »
Vale, creo haberlo entendido con tu pregunta.

En el manual pone una resistencia en el bus de 60 Ohmios, como está conectada en el bus en paralelo se pone 120 ohmios ya que al ponerse en los terminales tendríamos los 60 ohmios de resistencia que hay que ponerle al bus. ¿No es cierto?, de ahí el tema del jumper

Ahora, tendría que ver si mi diseño tendría que tener la resistencia. Somos un grupo y cada uno hará un diseño, uno hará una placa para los sensores y por supuesto con el BusCAN, otro hará para cambiar la geometría del motor, ....., y yo haré la telemetría, todos los parámetros recibidos por el CAN los tengo que pasar por RF al equipo. Por lo que si mi imaginación no me falla yo seré uno de los que tenga que poner la resistencia. ¿No creeis?

Muchas gracias.
Un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1237 en: 30 de Octubre de 2012, 10:40:55 »
Ahora vas bien rumbeado, felicitaciones !! ((:-)) ((:-))
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1238 en: 30 de Octubre de 2012, 10:44:28 »
 :-/ :-/ :-/ :-/ :-/

La verdad que el post es tremendo, gracias a vosotros entendí como funcionaba el filtro y las máscaras.
Ahora estoy peleandome con el manual de microchip para ver como se programa el busCAN del PIC32 en C, viendo los comandos y los pasos a seguir, pero tengo mil dudas. A ver si puedo poco a poco ir resolviendolas.

Cuando lo tenga avanzado lo iré colgando por si puede servir a alguien de ayuda.

Seguimos en contacto.
Muchas gracias.
Un saludo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1239 en: 31 de Octubre de 2012, 05:02:23 »
Buenos días,

ya estoy por aquí con más dudas   :oops:

Mirando como se programaban los filtros y las máscaras (el funcionamiento si que lo entiendo gracias a vosotros), me ha surgido una duda:

Supongamos que yo quiero recibir mensajes de los SID 100 a 103, que mi placa tiene el SID 104.
Dicho SID tengo que configurarlo yo??Cómo sé que SID tiene mi placa??

Un saludo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1240 en: 31 de Octubre de 2012, 08:45:09 »
Buenas éste es el código que he hecho para la configuración del CAN. ¿Ésta bien?¿Falta algo por configurar?
Soy todo. Casi todo dudas.

Citar
void ConfigCAN1 (void){
    /*Ponemos el módulo CAN en modo configuración*/
    C1CONbits.REQOP = 100;
    /*Esperamos hasta que conmute a modo configuración*/
    while(C1CONbits.OPMOD != 100);

    /*Configuración FIFO1 como lectura*/
    C1FIFOCON1bits.FSIZE = 2;     /*Almacenara 3 mensajes del buffer*/
    C1FIFOCON1CLR = 0x80;         /*Se limpia el bit de TXEN*/

    /*Configuración Filtro3 y máscara1 para recibir desde SID 1 a 3*/
    C1FLTCON0bits.FSEL3 = 1; /*Almaceno mensajes en FIFO1*/
    C1FLTCON0bits.MSEL3 = 1; /*Uso la máscara 1*/
    C1RXF3bits.SID = 0x1;       /*Filtro 1 SID*/
    C1RXF3bits.EXID = 0;        /*Filtramos Sólo SID*/
    C1RXM1bits.SID = 0x7FC;     /*Ignoramos los últimos 2 bits en compración*/
    C1RXM1bits.MIDE = 1;
    C1FLTCON0bits.FLTEN3 = 1;   /*Habilitamos filtros*/

    /************************************************************************/
    /*Configuración del Bit Timing                                                                                  */
    /*Fsys 80MHz, FBAUD = 250Kbps, N=20, Ftq=5Mbps                                                  */
    /*Calculando BRP=(Fsys/(2*Ftq))-1*, BRP=7                                                             */
    /*Synchronization Segment = 1TQ                                                                            */
    /*Bit Time = Sync Segm + Propagation Segm + PH1 + PH2                                        */
    /*Sync Segm = 1TQ; Propagation Segm = 6TQ; PH2 = 6TQ*; Bit Time = 20TQ             */
    /*PH1 = 7 TQ                                                                                                          */
    /*Basado en un sistema característico si el retraso de propagación                              */
    /*es de 6TQ y el punto de muestra es del 70% del tiempo de bit nominal                     */
    /*PH2 = 30% Del tiempo de bit nominal                                                                     */
    /************************************************************************/
    C1CFGbits.SEG2PHTS = 1;
    C1CFGbits.SEG2PH = 5;    /*Seg Fase 2 es de 6TQ*/
    C1CFGbits.SEG1PH = 6;    /*Seg Fase 1 es de 7TQ*/
    C1CFGbits.PRSEG = 5;     /*Seg Propagación es de 6TQ*/
    C1CFGbits.SAM = 1;      /*'0' Muestrea el bit 1 vez, '1' tres veces*/
    C1CFGbits.SJW = 2;      /*Entre 1TQ - 4TQ*/
    C1CFGbits.BRP = 7;      /*Valor calculado*/


    /*Se pone en modo normal*/
    C1CONbits.REQOP = 0;
    while (C1CONbits.OPMOD != 0);
}


Un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1241 en: 31 de Octubre de 2012, 08:58:01 »
Citar
Supongamos que yo quiero recibir mensajes de los SID 100 a 103, que mi placa tiene el SID 104.
Dicho SID tengo que configurarlo yo??Cómo sé que SID tiene mi placa??

Partamos de la base que quien programa ese micro eres tu, así que deberías saberlo, no?? :D :D

Pero supongamos que quieres hacer una placa genérica que transmite una temperatura, una presion y humedad, o sea, tres valores, y ninguno de ellos debería ser transmitido en una misma trama, es decir, vas a tener tres tramas diferentes a enviar.
En CAN esas tres tramas deberán llevar in ID diferente, para saber quien lo transmitió y que dato viene alli, para las placas que consuman esa información (recuerda que pueden ser varias).

Vamos a suponer que los IDs son asignados así:
  • Temperatura                ID 1001
  • Presion                         ID 1002
  • Humedad                     ID 1003

Esto hará que quien reciba esa información, estará diferenciando las tres variables sin inconvenientes, porque vendrán en mensajes diferentes con IDs diferentes.

¿¿Pero que pasa si agregamos en ese BUS dos placas mas iguales a esta, que envían la misma información ??

En este caso debo ademas diferenciar entre placas, ademas de las variables, ¿¿ como lo hago ??

Hay dos formas (o tal vez tres), que son de distinta implementación pero igual resultado:

  • Agrego un ID de placa, que puede ser de 4 bits (admite 16 placas iguales) o los que necesite, siempre dentro del rango que permite el direccionamiento de CAN. Este ID podrá ser cambiado por comunicación o por teclado, y guardado en una posición de la EEPROM. Al inicio del programa debo recuperarlo.
  • Le pongo a la placa una serie de dip switchs (normalmente 4) que me permiten configurarle ese ID con el programa en marcha, y lo leo al inicio del programa (no se hace en marcha porque puede traer problemas imprevistos)
  • Hago una rutina inteligente que al agregar una de estas placas (tendrá grabada un ID que no corresponda al rango posible), descubra que debe configurarse y escuche la mensajería o testee cuales responden y auto configure su propio ID, y lo guarde en memoria EEPROM

Finalmente, luego deberás agregarle como offset a los tres IDs de las variables, el ID de la placa, que quedaría mas o menos así:
  • Placa 1                  ID de placa 05            


                                Temperatura             ID 1006
                                Presión                     ID 1007
                                Humedad                  ID 1008

  • Placa 2                  ID de placa 08            


                                Temperatura             ID 1009
                                Presión                     ID 1010
                                Humedad                  ID 1011

  • Placa 3                  ID de placa 15            


                                Temperatura             ID 1016
                                Presión                     ID 1017
                                Humedad                  ID 1018


Como veras, ya no hay forma de equivocarse desde que placa viene cada dato, ni que dato es cada uno, no??
Ademas hiciste tres placas idénticas y con el mismo software tambien... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1242 en: 31 de Octubre de 2012, 09:02:42 »
Citar
Buenas éste es el código que he hecho para la configuración del CAN. ¿Ésta bien?¿Falta algo por configurar?
Soy todo. Casi todo dudas.

Haz el ejercicio de hacer esa configuracion con el software CAN Bit Timing y revisala contra la que has hecho, sera mejor a que nosotros lo hagamos por ti, y lo que aprenderas sera impagable.
Estas son las cosas que en el futuro te daran confianza, asi que mejor haz primero eso y si esta mal debieras darte cuenta tu mismo y corregirlo. Lo demas es prueba y error solamente... :mrgreen: :mrgreen:  Y no lo hace Mastercard !! :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado afelio

  • PIC16
  • ***
  • Mensajes: 130
Re: Mis experiencias con el BUS CAN
« Respuesta #1243 en: 31 de Octubre de 2012, 09:18:06 »
Jejejeje.

Ya lo he hecho, y le da como amí BRP 7, en mi caso, yo hago un punto de muestra del 70% y el programa 60%, aún asi, lo he cambiado como el programa.

A la hora de generar informe me da error y no me genera los bits del registro.

Y volviendo al tema de la configuración:

Tengo configurado los Filtros y máscaras, las FIFOs, y el baud rate, me falta algo??

Cómo se yo que SID tiene mi placa??

Muchas gracias por tomaros el tiempo de ayudarnos.

Un saludo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7841
Re: Mis experiencias con el BUS CAN
« Respuesta #1244 en: 31 de Octubre de 2012, 09:20:59 »
Para saber donde se configura tu ID, hay que ver el programa completo... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.