Antecedentes
Estoy desarrollando un proyecto que requerirá las modestas especificaciones de microcontroladores de:
- 8 ADC de 12 bits y 10 kHz
- 1kB de RAM
- Huella 48-QFN o menor
- Protocolo de comunicación de 20 kbps con conexión en cadena, resistente al ruido y con corrección de errores
Los requisitos de procesamiento de señal son bastante bajos, y la mayoría se pueden exportar al procesador maestro en el sistema. Las primeras tres especificaciones son fáciles de cumplir y se pueden hacer por menos de $ 2 en cantidad. Sin embargo, la comunicación ocurrirá en un entorno muy ruidoso eléctricamente, por lo que las redes vulnerables al ruido como LIN e I2C están fuera. Un argumento adicional contra LIN es que me gustaría ejecutar todo a 5V o 3.3V, y los transceptores LIN requieren 12V, por lo que requerirían un regulador o cable adicional por placa de sensores. Inicialmente elegí CAN para esta tarea. Sin embargo, los controladores CAN agregan un costo considerable, y tengo curiosidad por saber si esto se puede hacer en software.
CAN Capa Física
La especificación CAN define el enlace de datos y las capas físicas del modelo de referencia de red OSI. Existen muchos circuitos integrados de 8 pines económicos, como el NXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551 y TI SN65HVD1050 para implementar la capa física. La implementación de la capa física con convertidores D / A o amplificadores operacionales sería difícil, si no imposible, por lo que estos circuitos integrados valen la pena $ 1 o lo que cuestan.
Enlace de datos CAN / Capa de protocolo
Para la capa de enlace de datos, algunos microcontroladores agregan módulos de protocolo CAN en las capas básicas de comunicaciones UART, I2C y SPI. Sin embargo, estos son significativamente más caros que los chips básicos.
Investigación del costo de los módulos de protocolo CAN
Para fundamentar esta afirmación, aquí hay algunos micros populares en versiones CAN y no CAN, desde:
- ATmega16 - ATMEGA16M1 (con CAN): $ 3.87, ATMEGA168A (sin CAN): $ 3.23
- dsPIC - DSPIC33FJ64MC802 (con CAN): $ 6.14, DSPIC33FJ64GP202 (sin CAN): $ 5.48
- PIC18 - PIC18F2480 (con CAN): $ 6.80, PIC18F24J10 (sin CAN): $ 2.10
- Cortex-M3 - STM32F103C4T6A (con CAN): $ 6.50, STM32F100C4T6B (sin CAN): $ 2.73
Para ser justos, solo comparé microcontroladores con tamaños de memoria equivalentes, sin embargo, muchas de las versiones que no son CAN están disponibles con tamaños de memoria más pequeños por menos. Los controladores CAN externos, como el Microchip MCP2515 , cuestan casi $ 2, por lo que obviamente es más rentable tener el CAN integrado en el microcontrolador si tiene la opción.
Curiosamente, la parte ATmega es, con mucho, la parte más barata equipada con CAN en el 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 un buffer / control de mensajes. El motor de protocolo CAN maneja todas las funciones para recibir y transmitir mensajes en el bus CAN. Los mensajes se transmiten cargando primero los registros de datos apropiados. El estado y los errores se pueden verificar leyendo los registros apropiados. Cualquier mensaje detectado en el bus CAN se verifica en busca de errores y luego se compara con los filtros para ver si se debe recibir y almacenar en uno de los registros de recepción.
Esto parece bastante factible en software.
La pregunta
¿Se puede usar una capa de protocolo de software para implementar la especificación CAN con solo un microcontrolador económico equipado con UART y un transceptor CAN? Si es así, ¿existen implementaciones de código abierto?
Alternativamente, ¿se pueden usar los transceptores CAN con los UART para implementar un protocolo personalizado? Estoy de acuerdo con una topología de maestro único; Entiendo que el arbitraje puede ser difícil de lograr en un protocolo personalizado.