Basado en el software del sistema de servocontrol STM32 ARM+FPGA (2) y el diseño FPGA

El servosistema completo contiene muchos módulos, por lo que no se puede presentar en detalle uno por uno, por lo que este capítulo se centra en la introducción.
Diseñe la parte FPGA más difícil e introduzca brevemente el flujo de trabajo del lado ARM . La parte FPGA incluye principalmente FOC
El algoritmo, el algoritmo de muestreo de corriente y el algoritmo de muestreo del codificador son la base de todo el sistema de control y determinan directamente el control del motor.
El efecto es bueno o malo. Debido a la particularidad del trabajo de FPGA , es necesario considerar la racionalidad del tiempo de diseño y coordinar racionalmente varios
El orden de ejecución de las tareas ha incrementado enormemente la dificultad de su diseño. Lo siguiente configurará la parte importante del programa FPGA.
Según la descripción del diseño, se divide principalmente en módulo de algoritmo SVPWM , módulo de retroalimentación del codificador y módulo de muestreo actual.
4.1 Programación del algoritmo SVPWM
Según la cuarta sección del Capítulo 2, el flujo de trabajo del algoritmo SVPWM se muestra en la Figura 4-1 . Primero que nada la entrada.
Decodificando y juzgando el sector actual, y luego calculando el tiempo de acción requerido para el vector básico del sector actual, el siguiente paso es
En el momento del valor de comparación PWM , finalmente realice la modulación de ancho de pulso y agregue el tiempo muerto para formar un inversor de control de accionamiento de onda PWM complementario.
El interruptor funciona de manera que genera el voltaje sinusoidal requerido.
4.1.1 Diseño del módulo de software
El diagrama de estructura funcional del módulo SVPWM se muestra en la Figura 4-2 . Las señales del módulo se interpretan de la siguiente manera:
( 1 ) sys_clk
: Reloj del sistema, la frecuencia de funcionamiento es de 50MHz .
(2) sistema_primero
: Reinicio del sistema, activo bajo.
(3) svpwm_en
: Señal de habilitación del módulo.
(4) ualpha , ubeta : la señal de salida del módulo de conversión Park inverso .
(5) Otros
: Seis ondas PWM complementarias .

 

El principio de funcionamiento y la fórmula de cálculo de este módulo se elaboraron en el segundo capítulo, por lo que no entraré en detalles aquí.
Sin embargo, cabe señalar que debido al retraso mecánico de la conmutación del inversor, es necesario generar un complemento
Onda PWM , que puede evitar cortocircuitos y lesiones causadas al abrir los brazos del puente superior e inferior al mismo tiempo.
El principio de generar una onda PWM complementaria con zona muerta es utilizar la onda PWM calculada como objeto de referencia y luego de acuerdo con
La situación actual marca un tiempo muerto razonable. Suponiendo que la señal de entrada del inversor está activa en nivel alto, cuando el objeto de referencia cambia de nivel bajo
Cuando el nivel salta a un nivel alto, primero cierre el brazo del puente inferior, luego retrase el tiempo muerto y finalmente abra el brazo del puente superior; al referirse a
Cuando el objeto salta de un nivel alto a un nivel bajo, primero cierre el brazo del puente superior, luego retrase el tiempo muerto y finalmente abra el brazo del puente inferior.
El efecto se muestra en la Figura 4-3 . Tomando la fase U como ejemplo, u_pwm en la figura es la onda PWM de referencia calculada, u_pwm1
es la onda PWM del brazo del puente superior y u_pwm2 es la onda PWM del brazo del puente inferior.
4.1.2 Prueba de simulación
Realice la verificación de simulación en el módulo SVPWM y los resultados se muestran en la Figura 4-4 . Se puede ver en la figura que cualquier
El valor se asigna a u_alpha y u_beta , y luego el sistema genera una señal de ciclo de reloj svpwm_en , después de la operación.
Obtenga u_pwm como onda PWM de referencia . Genera ondas PWM complementarias u_pwm1 y u_pwm2 según la señal u_pwm ,
Hay un tiempo muerto entre ambos. De los resultados de la simulación se puede ver que el módulo normalmente puede generar ondas PWM complementarias.
4.2 Diseño del programa del protocolo BISS-C
4.2.1 Estructura de datos del protocolo BISS-C
El protocolo BISS proviene de la empresa iC-Haus , es adecuado para la interfaz serial bidireccional del sensor y tiene calibración CRC .
La función de verificación garantiza que los datos transmitidos sean correctos. En comparación con otros protocolos de comunicación similares, el protocolo BISS tiene ventajas en cuanto a compatibilidad y estructura de red.
Tiene más ventajas en términos de alta velocidad y retardo que SSI , y la velocidad de comunicación puede alcanzar hasta 10 Mbps . Al mismo tiempo, BISS
La longitud de los datos del protocolo se puede modificar según la situación real y tiene buena escalabilidad.
El protocolo BISS tiene dos modos de trabajo [43] El modo de trabajo diseñado en este artículo es el modo sensor y el FPGA
El codificador envía un comando de solicitud de posición y el codificador devuelve información relevante. En modo sensor, datos BISS-C
El formato se muestra en la Figura 4-5 a continuación . El host envía la señal del reloj MA a la escala de rejilla y el codificador serializa a través de la línea de datos SLO
Devolver información de datos.

La trama de datos BISS-C consta de ocho partes, que son la fase de respuesta "Ack" , el bit "Inicio" , el bit "0",

Varios bits de datos de posición, un bit de error, un bit de advertencia, seis códigos de verificación CRC y el resultado del tiempo de espera "Timeout"
Etapa final. El ciclo de solicitud de comunicación específico es el siguiente [44] :
( 1 ) Cuando no es una solicitud de posición, la señal del reloj está en un nivel alto y la línea de datos SLO del host que lee el codificador está en un nivel alto
Normalmente, significa que el codificador está listo.
(
2 ) Cuando el codificador está listo, el host comienza a transmitir la señal de reloj MA de frecuencia fija a la escala de rejilla.
(
3 ) El codificador pondrá la línea SLO en nivel bajo cuando detecte el segundo flanco ascendente del reloj MA enviado por el maestro.
nivel como respuesta.
(
4 ) El codificador avisa al host tirando hacia abajo de la línea de señal SLO . El codificador actual está en el estado de respuesta Ack y el host
La máquina debe cambiar al estado de recepción a tiempo.
(
5 ) El host se sincronizará con la señal del reloj MA para recibir el codificador y enviar los datos, y el formato del marco de datos es de bits altos.
El bajo delantero está detrás.
(
6 ) Después de recibir todos los datos, el host eleva la línea del reloj MA . Cuando el codificador está listo para la siguiente posición
Cuando se solicita, el codificador establece la línea SLO en un nivel alto para avisar al host; de lo contrario, permanece bajo.
4.2.2 Diseño del módulo de software
El diagrama de estructura funcional del módulo BISS se muestra en la Figura 4-6 , que se compone principalmente del módulo MA , el módulo SLO y el módulo CRC .
Las señales del módulo se interpretan de la siguiente manera:
( 1 ) biss_es
: Señal de habilitación del módulo, utilizada para obtener información de posición del codificador.
(2) longitud_datos
: Configuración del ancho de bits de datos del codificador.
(3) SLO
: Línea de datos del protocolo BISS .
(4) MA
: Línea de reloj del protocolo BISS .
(5) datos_abs
: Valor absoluto de una sola vuelta, utilizado para el conteo de varias vueltas y el cálculo de ángulos eléctricos de codificadores circulares.
(6) pos_abs
: Los datos de posición total real del codificador.

 

 

El principio de funcionamiento específico de este módulo es el siguiente: primero, la FPGA establece el ancho de bits de los datos de posición de acuerdo con el modelo de escala de red real
Valor data_lentgh , este módulo cumple con el requisito de diseño de que la longitud del ancho de bits de los datos de posición esté dentro de 32 bits . A través del módulo de control principal
Envíe la señal de habilitación biss_en al módulo MA , el módulo de reloj MA comienza a funcionar y envía una frecuencia fija a la regla de rejilla
La señal del reloj MA solicita obtener el valor de posición actual. Después de que la FPGA reciba los datos devueltos por la escala de rejilla, ingresará
Vaya al módulo de verificación CRC para verificar los datos y finalmente envíe los datos de posición correctos al módulo del siguiente nivel.
De acuerdo con las características del diagrama de tiempos del protocolo BISS , este artículo divide el proceso de recepción de datos por parte del módulo SLO en seis estados,
La máquina de estados funciona como se muestra en la Figura 4-7 . Al principio, el módulo de función está en estado inactivo y entra en estado de espera; cuando
Cuando la regla de rejilla baja la línea de señal SLO, ingresa al estado de respuesta Ack ; cuando el SLO cambia de nivel bajo a nivel alto, el estado
La máquina de estado ingresa al estado STATE_ZERO; cuando se detecta que la línea de datos SLO está baja, el módulo ingresa al estado de funcionamiento y comienza
Reciba datos e ingrese al estado "TIMEOUT" después de recibir los datos de ancho de bits establecidos.
En la ingeniería real, hay fallas o fenómenos metaestables en el nivel de datos, si de acuerdo con el flanco ascendente del reloj MA
La señal obtenida al leer el estado de nivel de la línea de datos SLO actual no es confiable. Generalmente, durante la transmisión
El estado de nivel en el medio de los datos es relativamente estable y confiable. Por lo tanto, el método adoptado en este trabajo es: en la parte media
Muestrear la línea de datos SLO varias veces y juzgar qué nivel tiene el número más grande y, finalmente, el valor de la señal de nivel con el número más grande
Sentencia asignada al registro. El principio de implementación específico se muestra en la Figura 4-8 , donde sys_clk es el reloj del sistema y bps_cnt es un
El número de muestras del nivel de línea de datos SLO en un ciclo de reloj MA . La frecuencia de reloj MA real se compara con la frecuencia interna de FPGA.
La frecuencia operativa es un reloj de baja velocidad, por lo que se pueden realizar múltiples muestreos en un ciclo de reloj MA . en cada
Durante los ciclos del reloj MA , cuando se detecta el flanco ascendente del reloj MA ,
El registro bps_cnt comienza a contar muestras desde cero,
Luego juzgue si la cantidad de niveles altos es grande o la cantidad de niveles bajos es grande, y finalmente se acumulará el valor del lado con la mayor cantidad de niveles.
Asignar a un registro. Repita este proceso para recibir todos los datos.
Después de que el módulo SLO recibe los datos, devuelve una señal de finalización de recepción al módulo MA y al módulo de verificación CRC . modo MA
Después de que el bloque reciba la señal de finalización, la FPGA elevará la línea de reloj MA y el módulo CRC configurará el modo SLO en
La trama de datos transmitida por el bloque está sujeta a la operación de verificación CRC . El polinomio CRC del protocolo BISS-C es G ( x ) x 6 x1 ,
Es decir, el campo de verificación es 1000011 . Para aprovechar al máximo las características de trabajo del procesamiento paralelo FPGA y mejorar aún más la eficiencia del trabajo
velocidad, este artículo utiliza un algoritmo de verificación CRC paralelo para obtener el código de verificación CRC en un ciclo de reloj, el código principal
Como se muestra en la Figura 4-9:

 

Entre ellos, d [33:0] son ​​los datos que deben verificarse y crc_out [5:0] es la operación del módulo CRC en los datos que deben verificarse.
El resultado obtenido después del cálculo, el valor inicial de c[5:0] es cero y finalmente el resultado del cálculo se compara con el código de verificación CRC recibido.
coincidencias de línea. Si los dos son consistentes, significa que el módulo SLO recibe los datos correctamente y actualiza los datos de posición correctos para
En el módulo del siguiente nivel, de lo contrario, actualice los datos correctos reservados la última vez y prepárese para iniciar la siguiente solicitud de posición del ráster.
4.2.3 Prueba de simulación
Finalmente, escriba un archivo de prueba para simular y verificar el módulo BISS en el software ModelSim y aplicarlo en ingeniería real.
La estabilidad juega un papel importante. Por lo tanto, se seleccionan los 5 Mbps más altos en términos de velocidad de comunicación , por lo que el modelo en el archivo de prueba
El codificador virtual transmite datos a la FPGA a una velocidad de comunicación de 5 Mbps . Este artículo es para posiciones de 26 y 32 bits de uso común.
Se prueban los modelos de codificadores de ancho de bits de datos.
Primero, configure dos conjuntos de datos para modelos de 26 bits de ancho como se muestra en la Tabla 4-1, donde el primer conjunto y el segundo conjunto de datos son solo
Sólo el último bit del código de verificación CRC es diferente y el segundo conjunto de datos es completamente correcto. A través de este artificial
Los datos establecidos pueden probar si los dos conjuntos de información de datos recibidos por el módulo BISS son consistentes y también detectar el modo de verificación CRC.
bloque para que funcione correctamente. Cabe señalar que el valor de verificación CRC del protocolo BISS-C es el primero
Se envía al host mediante inversión, por lo que el valor de verificación CRC en la tabla se ha invertido. así que haz una combinación
Al comparar y verificar, la FPGA debe invertir el valor de verificación CRC calculado y compararlo con el valor recibido. El conjunto
Los resultados de la prueba corporal se muestran en la Figura 4-10.
El diagrama de tiempo del lado izquierdo de la figura es el primer conjunto de datos, mientras que el de la derecha es el segundo conjunto de datos. En la figura, crc_check está recibiendo
Valor CRC , check_data son los datos a verificar, done es la señal de finalización de recepción de datos, crc_out es la verificación
El valor CRC calculado, crc_done, significa que la verificación está completa, es decir, los datos recibidos son correctos. Se puede ver en la imagen.
En el modo de datos donde data_length es de 26 bits , después de que el módulo recibe la señal de habilitación biss_en , la FPGA envía el
El codificador envía una señal de reloj MA con una frecuencia de 5MHz . El codificador pasa los datos SLO después de detectar la señal del reloj MA .
La línea devuelve datos al host y cuando la FPGA termina de recibir los datos, transmite el valor de verificación CRC recibido y
Es necesario verificar los datos y se envía una señal de finalización para que el módulo CRC funcione. Entonces el módulo CRC necesita verificar el
Los datos verificados se procesan y, después del procesamiento , se comparan con el valor de verificación CRC recibido, si los dos coinciden correctamente.
Luego se genera una señal de marca exitosa crc_done con un pulso de nivel alto ; de lo contrario, la señal crc_done permanece baja.
Verifique más a fondo los detalles de la verificación CRC , como se muestra en la Figura 4-11 . El valor de verificación CRC recibido crc_check en la figura
es 001011 y crc_out es 110100 después de realizar la verificación CRC en los datos que se van a verificar . sección anterior también
Hablando de eso, el valor de verificación CRC del codificador primero se invierte y se envía al host, y los datos obtenidos después de la operación de verificación
crc_check no está invertido, por lo que se puede ver que es consistente con el valor de verificación CRC recibido después de la inversión. También se puede ver en la figura.
El tiempo requerido para la verificación CRC es un ciclo de reloj del sistema, por lo que se puede concluir que el módulo de verificación CRC puede funcionar normalmente.
De los dos diagramas de resultados de simulación anteriores, se puede ver que cuando el módulo BISS normalmente puede enviar MA a una velocidad de comunicación de 5 Mbps
La señal del reloj y los datos del codificador se reciben por completo y, finalmente, la operación de verificación CRC se completa en un ciclo de reloj. Por lo tanto todos
El módulo BISS diseñado ha pasado la prueba de simulación de función en modo de 26 bits .
De manera similar, se establece la prueba de simulación del modelo de 32 bits de ancho , y el conjunto de datos de simulación se muestra en la Tabla 4-2 , y la simulación de función
Las Figuras 4-12 y 4-13 muestran la imagen real y los detalles de la verificación CRC . Se puede ver en la figura que el módulo BISS diseñado también es
Pasó la prueba de simulación de función en modo de 32 bits.

 

 

Por lo tanto, se puede concluir que el módulo BISS diseñado en este trabajo puede cambiar el registro data_lentgh para poder
Comunicación de 5 Mbps para recibir completamente los datos del codificador con un ancho de bits de datos de 32 bits .
4.3 Diseño del programa del protocolo Tamagawa
4.3.1 Estructura de datos del protocolo Tamagawa
El acuerdo de Tamagawa proviene de la Corporación Tamagawa de Japón y utiliza un método de comunicación de "una pregunta, una respuesta".
De esta manera, el host envía diferentes comandos de solicitud al codificador para obtener información de datos diferente [45] . Se comunica con una cuerda.
La comunicación del puerto es consistente y al enviar un byte de datos , se transmitirá desde el bit bajo a una velocidad de transmisión fija de 2,5 Mbps .
Este artículo solo se centra en el modo de funcionamiento del protocolo Tamagawa para leer la información del codificador.
El formato del marco de datos para leer el modo de información del codificador se muestra en la Figura 4-14. Su principio de funcionamiento es: el host envía
Se dan diferentes comandos del marco de control al codificador para obtener la información correspondiente y luego el codificador devuelve un conjunto de datos como respuesta.
Este grupo de datos consta de marcos de control, marcos de estado, varios marcos de datos y marcos CRC . Entre ellos, según los diferentes modelos de codificador,
La cantidad de marcos de datos variará.
El formato de datos del marco de control se muestra en la Figura 4-15 . La parte del sujeto de datos del marco consta de código de sincronización, instrucción de control y control.
El dígito de control de instrucciones consta de tres partes. Entre ellos, el código de sincronización es fijo, mientras que el comando de control y su dígito de control tienen características específicas.
código de comando, como se muestra en la Tabla 4-3 . Diferentes códigos de instrucción representan diferentes funciones y los tipos de datos devueltos por el codificador también son
diferente. Por ejemplo, si el usuario desea obtener el valor de una sola vuelta y el valor de varias vueltas del codificador, consulte la Tabla 4-4 para saber que la instrucción numerada ID 3
El código corresponde al codificador que devuelve un valor de una sola vuelta y un valor de varias vueltas, por lo que el host puede enviar el código al codificador como: 01011000 ,
Cuando el codificador recibe la información codificada, devuelve el valor de una sola vuelta del codificador actual, el valor de varias vueltas y otros datos de información adicional.

 

El formato de datos del marco de estado se muestra en la Figura 4-16 , que consta de bits de información, bits de alarma de error de codificación y bits de alarma de comunicación.
Diferentes modelos de codificador corresponden a diferentes bits de información. Para significados específicos, consulte el manual del codificador correspondiente.
introducir. Si el código del codificador es incorrecto o hay un problema con la fuente de alimentación externa del codificador, el bit de alarma de error del codificador ea0
Si es 1 , significa que la información de codificación actual es incorrecta, y cuando ea1 es 1 , los datos del valor de múltiples vueltas del codificador son incorrectos. Bit de alarma de comunicación
Cuando ca0 es 1 , significa que el bit de verificación del comando de control en la trama de control recibida tiene un error, mientras que ca1 es 1 , significa que todos
Se produjo un error en el bit final de la trama de control recibida.
El codificador absoluto Tamagawa puede realizar datos de codificación de posición de alta resolución con un ancho de bits de hasta 39 bits , incluidos
Valor de una sola vuelta de 23 bits y valor de múltiples vueltas de 16 bits . Pero la comunicación con el protocolo Tamagawa solo envía datos de 8 bits a la vez, así que envíe
Para enviar información de ubicación completa, se debe desmontar y luego enviar en un orden determinado. Un byte de datos específico
El formato de trama y el formato de trama CRC se muestran en la Figura 4-17.
Dado que el host envía diferentes códigos de comando al codificador, los tipos de datos devueltos por el codificador también son diferentes. Según codificador
Con diferentes resoluciones y códigos de comando, el número de tramas de datos efectivas devueltas por el codificador también es diferente. Por ejemplo, solo se puede obtener el valor de una vuelta.
o valor de múltiples vueltas, devuelva un marco de datos válido de 3 bytes y devuelva 8 si necesita obtener tanto el valor de una sola vuelta como el valor de múltiples vueltas
Un marco de datos válido de bytes. El marco de datos correspondiente al código de función específico se muestra en la Tabla 4-4.
En la tabla, ABS representa el valor de código absoluto de una sola vuelta, ABS0 son los ocho bits inferiores de los datos de posición de una sola vuelta y ABS1 es la posición de una sola vuelta.
Los ocho bits del medio de los datos, ABS2 son los ocho bits superiores de los datos de posición de una sola vuelta, si el número de valores de código de una sola vuelta del codificador es inferior a 24 bits
, los bits altos se rellenan con 0 . De manera similar, ABM representa el valor del código absoluto de múltiples vueltas, ABM0 son los ocho bits inferiores de los datos del valor de vuelta, ABM1
Son los ocho bits del medio de los datos del valor del círculo y ABM2 son los ocho bits superiores de los datos del valor del círculo. Si el número de valores de código de múltiples vueltas del codificador es menor que
Para 24 bits , los bits altos se rellenan con 0 . Entonces, para un codificador de alta precisión, el codificador combinará el valor de una sola vuelta de varios bits y el valor de varias vueltas.
Cada valor se divide en 3 bytes de datos y luego se envía secuencialmente desde los ocho bits inferiores hasta que se completa el envío.

 

Supongo que te gusta

Origin blog.csdn.net/YEYUANGEN/article/details/131730593
Recomendado
Clasificación