Fondo
Estoy desarrollando un proyecto que requerirá el modesto microcontrolador especificaciones de:
- 8 ADC de 12 bits y 10 kHz
- 1kB de RAM
- 48-QFN o tamaño inferior
- Protocolo de comunicación en cadena a 20 kbps resistente al ruido y con corrección de errores
Los requisitos de procesamiento de señales son bastante bajos, y la mayoría pueden exportarse al procesador maestro del sistema. Las tres primeras especificaciones son fáciles de cumplir y pueden hacerse por menos de 2 dólares en cantidad. Sin embargo, la comunicación tendrá lugar en un entorno eléctricamente muy ruidoso, por lo que las redes vulnerables al ruido como LIN e I2C están descartadas. Un argumento adicional en contra de LIN es que me gustaría ejecutar todo el asunto en 5V o 3,3V, y transceptores LIN requieren 12V, y por lo tanto requeriría un regulador adicional o alambre por placa de sensores. Inicialmente elegí CAN para esta tarea. Sin embargo, los controladores CAN añaden un coste considerable, y tengo curiosidad por saber si esto se puede hacer por software.
Capa física CAN
La especificación CAN define las capas de enlace de datos y física del modelo de referencia de red OSI. Muchos circuitos integrados económicos de 8 patillas, como el NXP TJA1040/50 , Maxim MAX3058/59 , Microchip MCP2551 y TI SN65HVD1050 para implementar la capa física. Implementar la capa física con convertidores D/A u op-amps sería difícil, si no imposible, por lo que estos circuitos integrados bien valen el 1$ o así que cuestan.
Enlace de datos CAN/Capa de protocolo
Para la capa de enlace de datos, algunos microcontroladores añaden módulos de protocolo CAN a las capas básicas de comunicaciones UART, I2C y SPI. Sin embargo, son bastante más caros que los chips básicos.
Investigación del coste de los módulos del protocolo CAN
Para corroborar esta afirmación, he aquí algunos micros populares en versiones CAN y no CAN, del :
- ATmega16 - ATMEGA16M1 (con CAN): $3.87, ATMEGA168A (no CAN): $ 3.23
- dsPIC - DSPIC33FJ64MC802 (con CAN): $6.14, DSPIC33FJ64GP202 (no CAN): $ 5.48
- PIC18 - PIC18F2480 (con CAN): $6.80, PIC18F24J10 (no CAN): $ 2.10
- Cortex-M3 - STM32F103C4T6A (con CAN): $6.50, STM32F100C4T6B (no CAN): $ 2.73
Para ser justos, sólo he comparado microcontroladores con tamaños de memoria equivalentes; sin embargo, muchas de las versiones sin CAN están disponibles con tamaños de memoria más pequeños por menos dinero. Los controladores CAN externos, como el Microchip MCP2515 , cuestan casi 2 dólares, así que obviamente es más rentable tener el CAN integrado en el microcontrolador si tienes la opción.
Curiosamente, la pieza ATmega es con diferencia la pieza equipada con CAN más barata del inventario de Digikey.
Función de la capa de protocolo CAN
El módulo CAN que se encuentra en los microcontroladores dsPIC hace lo siguiente:
El módulo de bus CAN consta de un motor de protocolo y mensajes de mensajes. El motor de protocolo CAN se encarga de todas las funciones de recepción y transmisión de mensajes en el bus CAN. Los mensajes se Los mensajes se transmiten cargando primero los registros de datos correspondientes. El estado y los errores pueden comprobarse leyendo los registros correspondientes. Cualquier mensaje detectado en el bus CAN se comprueba en busca de errores y luego se empareja con los filtros para ver si debe recibirse y almacenarse en uno de los registros de recepción. en uno de los registros de recepción.
Esto parece bastante factible en software.
La pregunta
¿Se puede utilizar una capa de protocolo de software para implementar la especificación CAN con sólo un microcontrolador barato equipado con UART y un transceptor CAN? En caso afirmativo, ¿existen implementaciones de código abierto?
Como alternativa, ¿se pueden utilizar transceptores CAN con UART para implementar un protocolo personalizado? Me parece bien una topología de maestro único; entiendo que el arbitraje puede ser difícil de conseguir en un protocolo personalizado.