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

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

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #960 en: 13 de Julio de 2011, 08:03:05 »
OK, por lo visto estas mas avanzado que muchos que llegan aqui...
El conector DB9 es uno de los estándares de CanBus, si bien es similar al port serial, no es lo mismo.
No lo puedes conectar directo a tu puerto serie en el PC.

Si vas a programar tu interfaz gráfica, siempre deberá estar en medio el analizador CanBus.
Lo que te sugiero es que entres a la pagina del fabricante de tu analizador, ya que muchos fabricantes permiten bajar librerías o complementos para los distintos entornos de programación, que te permiten desarrollar una aplicación sin tener que escribir toda la interfaz con tu hardware analizador.
En algunos casos suelen dejar algunos ejemplos de utilización, para acelerar el proceso de análisis.

Espero te sirva de utilidad.  :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado preficetor

  • PIC10
  • *
  • Mensajes: 3
Re: Mis experiencias con el BUS CAN
« Respuesta #961 en: 13 de Julio de 2011, 09:12:57 »
He visto este aparato http://www.can232.com/ que parece como si fuera un conversor de Can a puerto serie. Pienso que me puede ser útil pero tampoco estoy seguro si con este aparato y un hyperterminal (bien configurado) podré ver las tramas. ¿Esto me podría ser útil?

Estoy buscando lo que me has dicho de las librerias en la web del fabricante a ver si encuentro algo. El analizador que me han dado es un CanCaseXL, que por lo que dicen es uno de los mejores.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #962 en: 13 de Julio de 2011, 09:34:55 »
Ese que mencionas tiene librerias que te permiten hacer tu propia interfase.
De todos modos, tienes uno de los mejores productos del mercado en tus manos, porque cambiarlo??

En la pagina de Vector puedes bajar las librerias que te comente, en esta dirección y usando el filtro por productos asi:

Vector Downloads CanCaseXL
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado preficetor

  • PIC10
  • *
  • Mensajes: 3
Re: Mis experiencias con el BUS CAN
« Respuesta #963 en: 14 de Julio de 2011, 05:32:50 »
He estado viendo lo que me comentaste, y la verdad es que tiene bastantes posibilidades.

El único problema es que creo que este aparato (CANcaseXL) sólo quieren usarlo para visualizar tramas, sin darle más utilidad. Por lo que yo sé el objetivo es hacer una aplicacion en C#. Es por esto por lo que necesitaria que los datos me vinieran por puerto serie, de manera que a través de unas líneas de código yo leyera lo que esta llegando por el puerto serie.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #964 en: 14 de Julio de 2011, 08:31:20 »
Entonces si ve por el CAN232, que también te da librerías para el desarrollo de tu aplicación.
Otra opción es el de ADFWEB, que te da librerías y tiene interfase 232 o USB.
Y ahora veo que tienen por ethernet también.
http://www.adfweb.com/home/products/CAN_BUS_analyzers.asp?frompg=nav1_10
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado estenolotienen

  • PIC10
  • *
  • Mensajes: 23
Re: Mis experiencias con el BUS CAN
« Respuesta #965 en: 14 de Julio de 2011, 12:58:41 »
Hola a todos, os llevo siguiendo bastante tiempo, y estoy empezando a poner en práctica un proyecto CAN, para eso este hilo me ha venido fenomenal, pero me ha surgido un problemilla... Vereis, para ir iniciandome, he decidido hacer un receptor de mensajes CAN, y lo que reciba que lo envíe por RS232, al otro lado del bus can tengo una placa del trabajo que envía mensajes can cada 5sg a una velocidad de 50kb. Siguiendo con breakpoints, veo que no me entra al "if ( can_kbhit() )", alguien me puede echar una mano? El código es el siguiente:

Código: [Seleccionar]
#include <18F2580.h>

#device ICD=TRUE
#device adc=8

#FUSES NOWDT                  //No Watch Dog Timer
#FUSES WDT128                //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                    //High speed Osc (> 4mhz)
#FUSES NOPROTECT              //Code not protected from reading
#FUSES BROWNOUT              //Reset when brownout detected
#FUSES BORV21                //Brownout reset at 2.1V
#FUSES PUT                    //Power Up Timer
#FUSES NOCPD                  //No EE protection
#FUSES STVREN                //Stack full/underflow will cause reset
//#FUSES NODEBUG                //No Debug mode for ICD
#FUSES NOLVP                  //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                  //Program memory not write protected
#FUSES NOWRTD                //Data EEPROM not write protected
#FUSES NOIESO                  //Internal External Switch Over mode enabled
#FUSES FCMEN                  //Fail-safe clock monitor enabled
#FUSES PBADEN                //PORTB pins are configured as analog input channels on RESET
#FUSES BBSIZ1K                //1K words Boot Block size
#FUSES NOWRTC                //configuration not registers write protected
#FUSES NOWRTB                //Boot block not write protected
#FUSES NOEBTR                //Memory not protected from table reads
#FUSES NOEBTRB                //Boot block not protected from table reads
#FUSES NOCPB                  //No Boot Block code protection
#FUSES NOLPT1OSC              //Timer1 is not configured for low-power operation
#FUSES MCLR                  //Master Clear pin enabled
#FUSES NOXINST                //Extended set extension and Indexed Addressing mode disabled (Legacy mode)

#use delay(clock=22110000)

#define CAN_DO_DEBUG TRUE
#define set_50k_baud
#include <can-18F4580.c>

void main()
{
struct rx_stat rxstat;
int32 rx_id;
int buffer[8];
int rx_len;
  int i;

for(i=0;i<8;i++)
{
buffer[i]=0;
}

printf("\r\n\r\nCCS CAN EXAMPLE\r\n");

can_init();

while(TRUE)
{
if ( can_kbhit() )
{
printf("\n\rEntro al kbhit\n\r");
printf("\r\n");
if(can_getd(rx_id, &buffer[0], rx_len, rxstat))
{
  printf("Byte 0: %X\r\n",buffer[0]);
}
}
}

}



Muchas gracias!!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #966 en: 14 de Julio de 2011, 14:52:25 »
Es extraña la frecuencia del cristal que pones allí:

Citar
#use delay(clock=22110000)

No encuentro cristales de 22110000 hz, es raro...

Ademas estas seguro que la sentencia:

Citar
#define set_50k_baud

 tiene bien hecha la configuración del baudrate para 10 Kb y ese cristal??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17667
    • MicroPIC
Re: Mis experiencias con el BUS CAN
« Respuesta #967 en: 14 de Julio de 2011, 15:26:57 »
Una duda: ¿es posible optoacoplar el bus can?, ¿se suele hacer?, ¿hay optoacopladores que soporten 1mbit/s?
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #968 en: 14 de Julio de 2011, 15:31:37 »
Si se suele hacer, lo vi escrito en varias hojas de datos de diferentes equipos.
Que optoacoplador usan no se, pero por lo que vi se hace entre el transceiver y el PIC (o controlador CAN que se use).
El transceiver va siempre conectado al bus y se optoacoplan las señales.
esto es porque el transceiver tiene todas las protecciones por sobretensiones y otras yerbas... :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17667
    • MicroPIC
Re: Mis experiencias con el BUS CAN
« Respuesta #969 en: 14 de Julio de 2011, 15:42:41 »
Ah, claro, si lo pongo en la salida USART del PIC hacia el MCP2551 necesitaré un par de optos que aguanten 115Kbps. Gracias por la info Don Marcos.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #970 en: 14 de Julio de 2011, 15:47:44 »
No se conecta el MCP2551 a la USART del PIC, sino a los pines CAN TX y CAN RX respectivos, y si deben soportar hasta 1 mbit/seg... :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17667
    • MicroPIC
Re: Mis experiencias con el BUS CAN
« Respuesta #971 en: 14 de Julio de 2011, 15:52:10 »
Touché  :mrgreen:

En qué estaría yo pensando  :D

Pues va a tocar buscar optoacopladores muy rápidos, ya tuve problemas con un bus RS485 optoacoplado a 115Kbps.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado estenolotienen

  • PIC10
  • *
  • Mensajes: 23
Re: Mis experiencias con el BUS CAN
« Respuesta #972 en: 14 de Julio de 2011, 17:14:03 »
Es extraña la frecuencia del cristal que pones allí:

Citar
#use delay(clock=22110000)

No encuentro cristales de 22110000 hz, es raro...

Ademas estas seguro que la sentencia:

Citar
#define set_50k_baud

 tiene bien hecha la configuración del baudrate para 10 Kb y ese cristal??

Hola MGSLSOFT, si es rara, pero es esa frecuencia seguro, además lo pone en el mismo cristal, y justamente es el mismo de la placa emisora de mensajes. Supongo que esa parte está bien, la transmisión de mensajes por la UART me va bien.

Respecto a "#define set_50k_baud", he realizado los siguientes cambios en la función can_set_baud de can-18f4580.c:
Código: [Seleccionar]
void can_set_baud(void)
{
#ifdef set_50k_baud
{
BRGCON1 = 0x09;
BRGCON2 = 0xBC;      //CAN a 50 KBps     
BRGCON3 = 0x07;      //Reloj a 22,11MHz   
}#endif

#ifdef set_250k_baud
{
BRGCON1 = 0x01;
BRGCON2 = 0xBC;      //CAN a 250 KBps
BRGCON3 = 0x07;      //Reloj a 22,11 MHz 
}#endif   
}


Esos valores son los que he obtenido con el Bit Time Calculator.

Gracias por tu ayuda!!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7839
Re: Mis experiencias con el BUS CAN
« Respuesta #973 en: 14 de Julio de 2011, 17:49:12 »
Hay un problema, no le has puesto un Id al receptor, de todos modos deberia haber entrado en la linea
Citar
   if ( can_kbhit() )

Con que haces el debug??
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17667
    • MicroPIC
Re: Mis experiencias con el BUS CAN
« Respuesta #974 en: 15 de Julio de 2011, 02:06:39 »
Pues va a tocar buscar optoacopladores muy rápidos, ya tuve problemas con un bus RS485 optoacoplado a 115Kbps.

He encontrado esta nota de aplicación de Analog sobre optoacopladores para CAN:
http://www.analog.com/static/imported-files/application_notes/396914861238030599415561924AN770_0.pdf

y estos optoacopladores de NEC que garantizan el ancho de banda necesario:
http://www.nuhorizons.com/xrefs/CEL/selguides/HiSpeed.pdf

Son muy caros, pero voy a pedir algunos para probar.

Amplío información: he descubierto que hay transceptores CAN que ya garantizan el aislamiento eléctrico:
ISO1050 de TI
ADM3053 de Analog
« Última modificación: 15 de Julio de 2011, 02:36:00 por Nocturno »
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ