Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo implementar la especificación canopen 301 en código

Cómo implementar la especificación canopen 301 en código

1. Introducción a CANopen

1.1.CANopen define tres partes: protocolo de aplicación, capa de aplicación y protocolo de comunicación

1.2.La arquitectura general del código fuente de CANopen

Aquí no hay una introducción detallada a los conocimientos básicos de CANopen. Si necesita saber más, siga la cuenta pública "Hongke CANopen y EtherCAT Knowledge Platform". EtherCAT Knowledge Platform".

Capa de controlador CAN: principalmente relacionada con el controlador CAN subyacente. Los controladores CAN de diferentes plataformas de hardware son diferentes. El controlador CAN utilizado aquí es el controlador CAN del controlador STM32F bxCAN

Capa de pila CANopen: esta es CANopen

Capa CCM: algunas funciones API están escritas en C, que es la capa de llamada intermedia para implementar funciones como guardar varios mensajes y parámetros

Cabe señalar que la implementación de algunas funciones requiere agregar programas usted mismo. Por ejemplo, para guardar y restaurar los parámetros predeterminados de 1010 y 1011, debe escribir sus propios programas. Si estos parámetros se guardan en flash o. eeprom? 3 Inicialice algunos servicios, incluidos los parámetros de comunicación y los objetos de comunicación

2.4 Procesar el contenido del protocolo CANopen en el programa

2.5 Cerrar la capa CANopen si es necesario. p>

Nota: Antes de ingresar las funciones principales en la figura, se inicializará el programa, como configurar el reloj del sistema. El reloj del sistema utilizado en este tutorial es 168M, el oscilador de cristal externo es 8M y el PLL es. Utilizado como fuente de reloj, parte de la configuración está relacionada principalmente con la configuración del reloj del sistema F407, que no se explicará en detalle aquí

Trasplante de código fuente CANopen

2.1. inicialización

Después de ingresar a la función principal,

Inicialización del puerto serie: inicialice el puerto serie si ocurre un error cuando el programa se está ejecutando, la capa CANopen llamará a algunas funciones estándar y. envíe algunas instrucciones de error y códigos de error a través del puerto serie para facilitar la depuración de errores, como el código de error 0x0013. Verifique la tabla de códigos de error y descubra que es un error de inicialización de CAN. En este momento, debe verificar la inicialización de CAN. Al verificar, se confirma que el Rx y el Tx de CAN son correspondientes durante la migración del programa. Esto puede reducir el tiempo de error de migración. Por ejemplo, si es 0x0078, debe verificar el diccionario de objetos y.

Inicialización del reloj: F407 configura el temporizador de 407 para generar una interrupción cada 1 ms

Configuración de CAN: seleccione CAN único o CAN múltiple y configure los pines relacionados con Rx y Tx

2.2. Inicializar capa CANopen

CcmInitCANopen es una función que inicializa la capa CANopen y crea un diccionario de objetos al ejecutar esta función. La creación es exitosa y el valor predeterminado se incluye en las entradas del índice relevantes. las entradas de índice del diccionario de objetos aún no están conectadas a la aplicación, es decir, la parte del programa que llama a estos datos de índice aún no está completa.

Establezca el ID del nodo en 0x41 y la velocidad en baudios. 125k

Nota:

Divida los parámetros en la estructura tCcmInitParam. Cabe señalar que aquí Los miembros de la estructura son fijos, por lo que se almacenan en la ROM si es la dirección del nodo. debe cambiarse, o el nodo debe cambiarse a través de DIP, la estructura debe guardarse en la RAM

2.3 Inicialización de la capa CANopen y comenzar a ingresar la conmutación de la máquina de estado NMT. Ejecute la función CcmConnectToNet() para cambiar del estado de transferencia inicial al estado de ejecución previa.

En esta sección, la devolución de llamada se llamará cuando ocurran diferentes xxxNMTEvents, como la inicialización del estado de encendido, el restablecimiento de la capa de aplicación (0x2000-0x5FFF y 0x6000-0x9FFF) y el restablecimiento de los parámetros de comunicación (0x1000-0x1FFF). ).

Nota: Al utilizar esta función de LSS, primero debe ejecutar la máquina de estado LSS y luego ingresar el interruptor de la máquina de estado NMT. Según el protocolo CiA DS-305, si el valor de retorno de CcmProcessLssInitState es 0xFF, el nodo se marca como no válido, por lo que el bucle debe continuar para asegurarse de que el valor de retorno no sea 0xFF.

2.4 Hay dos métodos para ingresar al estado operativo: primero, el dispositivo recibe el mensaje para ingresar al estado operativo (0x00, kNmtCommStartRemoteNode). Este último llama CcmBootNetwork

Dentro de la función principal de la entrada digital analógica, Ccmprocess() es la función de procesamiento del protocolo CANopen, que incluye el módulo PDO, el módulo LSS, el módulo maestro NMT, el módulo esclavo NMT, el módulo EMCP y HBC. módulo, módulo HBCP, etc.