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

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

Desconectado Andr1c

  • PIC10
  • *
  • Mensajes: 8
Re: Mis experiencias con el BUS CAN
« Respuesta #1380 en: 03 de Abril de 2013, 23:49:09 »
De hecho no lo quería simular, simplemente quería generar el diagrama para presentarlo en clase  :mrgreen: , pero ¿A que cree se deba que no me compilen?  :shock:

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7840
Re: Mis experiencias con el BUS CAN
« Respuesta #1381 en: 03 de Abril de 2013, 23:55:09 »
Puedes bajarte el DesignSpark PCB, que es gratis (solo debes registrarte para bajarlo) y tiene un modo de uso similar a Eagle.
Podras hacer tus esquemas y ademas luego pasarlos a PCB.

No me queda claro, estas realmente usando una placa para las pruebas??
Puedes subir tu esquema, aunque sea hecho a mano??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Andr1c

  • PIC10
  • *
  • Mensajes: 8
Re: Mis experiencias con el BUS CAN
« Respuesta #1382 en: 04 de Abril de 2013, 00:10:40 »
Gracias por el programa sugerido, haré uso de él, y no, lamentablemente no cuento con una placa con la cual probar, de hecho planeo hacer uso del esquema que subió el compañero "pierno10" y montarla sobre placa (PD: no se como adjuntar el archivo .rar del esquema) pero el esquema del cual te hablo es el corregido de la página 9 del usuario "pierno10" (El cual espero no se moleste  :( )

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7840
Re: Mis experiencias con el BUS CAN
« Respuesta #1383 en: 04 de Abril de 2013, 00:28:37 »
Cuando quieras adjuntar un archivo, aprietas en Opciones adicionales, y te sale un botón de Seleccionar Archivo y puedes adjuntar archivos de hasta 256 Kb.

Los archivos de Pierno fueron un gran aporte, y si los publico aquí es porque no tiene problemas en que los usen, yo mismo use uno de sus archivos en una placa...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado AioriaG

  • PIC10
  • *
  • Mensajes: 15
Re: Mis experiencias con el BUS CAN
« Respuesta #1384 en: 05 de Abril de 2013, 15:14:46 »
Hola Andr1c que tal, mira creo que estas tratando de implementarlas cosas sin entenderlas, yo a principio de febrero 2013 no sabia nada del can, hoy 5 de abril ya tengo varias tarjetas que uso con can. No lo he aprendido por completo aun, pero ya entiendo bastantes cosas, cuando me trabo o tengo dudas vuelvo a dar una hojeada. Y esa es mi primera recomendación, lee lo que esta escrito en este foro y trata de entender como funciona el can, después lo que necesitas para implementar la comunicación, no encontraras un simulador con el que puedas probarlo así que hay que hacer el circuito y probarlo de forma real (en pcb de preferencia), comienza con lo mas simple que conozcas,  lee los datasheet de los componentes eso ayuda mucho a entender como debes conectarlo. Lo malo es que tendrás que gastar algo de dinero al no poder simularlos, si estas estudiando pues aveces eso es lo mas complicado, pero si vale la pena hacer ese esfuerzo, la primera tarjeta con la que probé solo use el can, el mcp2551 y un max 232 para poder monitorear los datos que envío

Desconectado Andr1c

  • PIC10
  • *
  • Mensajes: 8
Re: Mis experiencias con el BUS CAN
« Respuesta #1385 en: 05 de Abril de 2013, 17:32:46 »
Gracias Ingeniero Marcos, de verdad no sé como agradecerte toda la ayuda que me has brindado si algún día necesitas de algo contarás conmigo, toda la info que he leído en el foro me ha sacado de grandes dudas, y gracias por tus consejos AioriaG de verdad que los estoy tomando en cuenta y como tu dices hacer gastos junto con la escuela es algo pesado pero no imposible. Saludos y los mantendré al tanto de mis avances. :)

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7840
Re: Mis experiencias con el BUS CAN
« Respuesta #1386 en: 05 de Abril de 2013, 17:51:12 »
Je..je.. :mrgreen: :mrgreen:
Gracias por lo de ingeniero, pero soy apenas un tecnico que se esmera en aprender todos los dias.

Si van a decir que me merezco ese titulo, les dire que los realmente ingenieros de este foro, hay muchos que deberian tener ya un doctorado por la categoria del material que aportaron.

 ((:-)) ((:-)) ((:-)) ((:-))
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado carlosPino

  • PIC10
  • *
  • Mensajes: 4
Re: Mis experiencias con el BUS CAN
« Respuesta #1387 en: 23 de Abril de 2013, 02:53:45 »
Saludos a todos los participantes del foro, veo que tienen una excelente información. Estoy iniciando con el BusCan con el dsPIC30F4011, ya tengo los transceiver MCP2551, y trato de hacer una prueba sencilla con dos nodos usando el código de ejemplo que provee el programa MikroC 5.0, pero no he logrado comunicación. El código es el siguiente no se si vean algún detalle que no he considerado. El cristal que uso es de 4MHz.

Nodo 1
Código: [Seleccionar]
unsigned int Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags;  // can flags
unsigned int Rx_Data_Len;                                    // received data length in bytes
char RxTx_Data[8];                                           // can rx/tx data buffer
char Msg_Rcvd;                                               // reception flag
unsigned long Tx_ID, Rx_ID;                                  // can rx and tx ID

void main() {

  ADPCFG = 0xFFFF;
  PORTB = 0;
  TRISB = 0;

  Can_Init_Flags = 0;                            //
  Can_Send_Flags = 0;                            // clear flags
  Can_Rcv_Flags  = 0;                            //

  Can_Send_Flags = _CAN_TX_PRIORITY_0 &           // Form value to be used
                   _CAN_TX_XTD_FRAME &            //  with CAN2Write
                   _CAN_TX_NO_RTR_FRAME;

  Can_Init_Flags = _CAN_CONFIG_SAMPLE_THRICE &    // Form value to be used
                   _CAN_CONFIG_PHSEG2_PRG_ON &    //  with CAN2Initialize
                   _CAN_CONFIG_XTD_MSG &
                   _CAN_CONFIG_DBL_BUFFER_ON &
                   _CAN_CONFIG_MATCH_MSG_TYPE &
                   _CAN_CONFIG_LINE_FILTER_OFF;

  RxTx_Data[0] = 9;                              // set initial data to be sent
  CAN2Initialize(1,3,3,3,1,Can_Init_Flags);      // initialize CAN2
 
  CAN2SetOperationMode(_CAN_MODE_CONFIG,0xFF);    // set CONFIGURATION mode

  CAN2SetMask(_CAN_MASK_B1,-1,_CAN_CONFIG_MATCH_MSG_TYPE & _CAN_CONFIG_XTD_MSG);   // set all mask1 bits to ones
  CAN2SetMask(_CAN_MASK_B2,-1,_CAN_CONFIG_MATCH_MSG_TYPE & _CAN_CONFIG_XTD_MSG);   // set all mask2 bits to ones
  CAN2SetFilter(_CAN_FILTER_B2_F3,3,_CAN_CONFIG_XTD_MSG);                         // set id of filter B1_F1 to 3
 
  CAN2SetOperationMode(_CAN_MODE_NORMAL,0xFF);                                   // set NORMAL mode
 
  Tx_ID = 12111;                                                                // set transmit ID
 
  CAN2Write(Tx_ID, RxTx_Data, 1, Can_Send_Flags);                               // send initial message
 
  while(1) {                                                                    // endless loop
    Msg_Rcvd = CAN2Read(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags);     // receive message
    if ((Rx_ID == 3u) && Msg_Rcvd) {                                            // if message received check id
      PORTB = RxTx_Data[0];                                                     // id correct, output data at PORTB
      RxTx_Data[0]++;                                                          // increment received data
      Delay_ms(10);
      CAN2Write(Tx_ID, RxTx_Data, 1, Can_Send_Flags);                           // send incremented data back
    }
  }
}


Nodo 2
Código: [Seleccionar]
unsigned int Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags;  // can flags
unsigned int Rx_Data_Len;                                    // received data length in bytes
char RxTx_Data[8];                                           // can rx/tx data buffer
char Msg_Rcvd;                                               // reception flag
unsigned long Tx_ID, Rx_ID;                                  // can rx and tx ID


void main() {

  ADPCFG = 0xFFFF;
  PORTB = 0;
  TRISB = 0;

  Can_Init_Flags = 0;                              //
  Can_Send_Flags = 0;                              // clear flags
  Can_Rcv_Flags  = 0;                              //

  Can_Send_Flags = _CAN_TX_PRIORITY_0 &             // Form value to be used
                   _CAN_TX_XTD_FRAME &              //  with CAN2Write
                   _CAN_TX_NO_RTR_FRAME;

  Can_Init_Flags = _CAN_CONFIG_SAMPLE_THRICE &      // Form value to be used
                   _CAN_CONFIG_PHSEG2_PRG_ON &      //  with CAN2Initialize
                   _CAN_CONFIG_XTD_MSG &
                   _CAN_CONFIG_DBL_BUFFER_ON &
                   _CAN_CONFIG_MATCH_MSG_TYPE &
                   _CAN_CONFIG_LINE_FILTER_OFF;

  CAN2Initialize(1,3,3,3,1,Can_Init_Flags);        // initialize CAN2
 
  CAN2SetOperationMode(_CAN_MODE_CONFIG,0xFF);      // set CONFIGURATION mode

  CAN2SetMask(_CAN_MASK_B1,-1,_CAN_CONFIG_MATCH_MSG_TYPE & _CAN_CONFIG_XTD_MSG);   // set all mask1 bits to ones
  CAN2SetMask(_CAN_MASK_B2,-1,_CAN_CONFIG_MATCH_MSG_TYPE & _CAN_CONFIG_XTD_MSG);   // set all mask2 bits to ones
  CAN2SetFilter(_CAN_FILTER_B1_F1,12111,_CAN_CONFIG_XTD_MSG);                     // set id of filter B1_F1 to 12111

  CAN2SetOperationMode(_CAN_MODE_NORMAL,0xFF);                                   // set NORMAL mode

  Tx_ID = 3;                                                                    // set tx ID

  while(1) {                                                                    // endless loop
    Msg_Rcvd = CAN2Read(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags);     // receive message
    if ((Rx_ID == 12111u) && Msg_Rcvd) {                                        // if message received check id
      PORTB = RxTx_Data[0];                                                     // id correct, output data at PORTB
      RxTx_Data[0]++;                                                          // increment received data
      CAN2Write(Tx_ID, RxTx_Data, 1, Can_Send_Flags);                           // send incremented data back
    }
  }
}


Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7840
Re: Mis experiencias con el BUS CAN
« Respuesta #1388 en: 23 de Abril de 2013, 08:24:45 »
Estas seguro que en ambos nodos has utilizado el puerto CAN 2 para comunicarte??
Porque asi esta escrito en este codigo que pones...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado carlosPino

  • PIC10
  • *
  • Mensajes: 4
Re: Mis experiencias con el BUS CAN
« Respuesta #1389 en: 25 de Abril de 2013, 02:07:22 »
Buenas noches. El código que publiqué, lo tomé tal cual sale en los ejemplos de Mikro C. Como estoy utilizando el dsPIC30f4011 (que solo tiene un modulo para CAN) le hice el cambio a CAN1 en ambos. Para verificar el dato que se exterioriza al puerto B, conecte unos leds para visualizar los 8bits, pero no hace absolutamente nada. El trasceiver que estoy utilizando es el MCP2551. Agradezco su ayuda

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7840
Re: Mis experiencias con el BUS CAN
« Respuesta #1390 en: 25 de Abril de 2013, 08:41:04 »
Veo que usas  un cristal de 4 Mhz, en el circuito de MikroC, que cristal usan??
Ese mismo??
Si es asi, sabes cual es la velocidad de bus CAN a la cual estas trabajando??  (o intentando hacerlo) :mrgreen:
Puede que por ahi venga el problema...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7840
Re: Mis experiencias con el BUS CAN
« Respuesta #1391 en: 25 de Abril de 2013, 08:46:44 »
Me respondo solo.
La velocidad del bus sera de 125 Kb, siendo de 8Tq, te da 1,3,3,1 que es lo que se configura en el codigo.

Deberias ponerle leds a las lineas Tx y Rx que van desde el PIC al MCP2551, para ver si alguno de ellos estan intentando transmitir...

Una pregunta obvia sobre lo nunca obvio:
¿esta cableado el bus entre CanH y CanL de ambos MCP2551 ?
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado carlosPino

  • PIC10
  • *
  • Mensajes: 4
Re: Mis experiencias con el BUS CAN
« Respuesta #1392 en: 25 de Abril de 2013, 19:44:21 »
Efectivamente esa es la velocidad configurada. El hardware del dsPIC y el transceiver lo he revisado muchas veces pensando que por allí puede estar el error y esta correcto, incluyendo el cableado de las salidas CanH CanL. Probare lo de los leds en las lineas Tx y Rx y reportare lo que vea. Muchas gracias

Desconectado Picuino

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5172
Re: Mis experiencias con el BUS CAN
« Respuesta #1393 en: 09 de Mayo de 2013, 17:23:17 »
Estoy estudiando el CAN bus y he leido buena parte del hilo (es difícil porque ya lleva 70 páginas) y no he conseguido responder algunas dudas que tengo.

1º ¿Cómo se mantiene la tensión recesiva del bus de 2.5 voltios?
Imagino que se puede conectar la salida de tensión de referencia de uno de los transceivers MCP2551 al bus. ¿Como se hace? ¿Hay que poner un operacional entre medias? ¿Condensadores? ¿Se conectan 2 resistencias de 60 ohms desde la tensión de referencia a cada cable?


2º Recuerdo que el cable de Devicenet (que usa bus CAN en los niveles OSI 1 y 2) cuesta bastante dinero. Es un cable de 120 ohmios.
El cable ethernet (cat. 5) tiene 100 ohmios, por lo que las resistencias terminadoras de 120 ohmios no tienen la misma impedancia y no evitan reflexiones de la señal.
Para distancias cortas no dara problemas, pero para distancias largas ¿hay cables baratos de 120 ohmios? ¿Se puede poner una resistencia terminadora de 100 ohmios al cable ethernet?


Saludos.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Mis experiencias con el BUS CAN
« Respuesta #1394 en: 09 de Mayo de 2013, 17:56:52 »
Estoy estudiando el CAN bus y he leido buena parte del hilo (es difícil porque ya lleva 70 páginas) y no he conseguido responder algunas dudas que tengo.

1º ¿Cómo se mantiene la tensión recesiva del bus de 2.5 voltios?
Imagino que se puede conectar la salida de tensión de referencia de uno de los transceivers MCP2551 al bus. ¿Como se hace? ¿Hay que poner un operacional entre medias? ¿Condensadores? ¿Se conectan 2 resistencias de 60 ohms desde la tensión de referencia a cada cable?


2º Recuerdo que el cable de Devicenet (que usa bus CAN en los niveles OSI 1 y 2) cuesta bastante dinero. Es un cable de 120 ohmios.
El cable ethernet (cat. 5) tiene 100 ohmios, por lo que las resistencias terminadoras de 120 ohmios no tienen la misma impedancia y no evitan reflexiones de la señal.
Para distancias cortas no dara problemas, pero para distancias largas ¿hay cables baratos de 120 ohmios? ¿Se puede poner una resistencia terminadora de 100 ohmios al cable ethernet?


Saludos.

1º: Lo hace el solo, no hay que hacer nada, ni ponerle nada. Las resistencias se ponen en los 2 extremos del cable, seria 120ohm a cada extremo para hacer 60ohm


2º: En la resistencia (tanto terminadoras como del cable) lo que influye es la velocidad, a baja velocidad puedes poner cables de alta resistencia y resistencias terminadoras mayores, a alta velocidad debes hacer lo contrario, te pongo una web donde vienen algunas tablas:
http://www.cd-systems.com/Can/can-cables.htm