Hola José,
¡La madre que te parió Unai! ¡Voy muy contento a leer tu proyecto... y está en vasco! jajajajajajajajaja
Me tendré que guiar por los dibujitos... ;)
En Industriales este tema se daba en una asignatura cuatrimestral solo para ella, era el complemento de otra anual (Control Automático)... Control Digital, creo recordar que se llamaba, si alguien está interesado y quiere mis apuntes se los escaneo y mando.
Creo recordar que había una forma de controlar directamente los sistemas digitales que se hacía con un número limitado de muestras (en un par de ellas los sistemas de uno o varios polos en su función de transferencia se controlaban, ¿deathbeat se llamaba?), con esto quiero decir que no hacía falta "digitalizar" un PID (que es eminentemente analógico, Proporcional-Integral-Derivativo), hay sistemas de control directamente digitales, pero se usa el PID porque los ingenieros industriales están acostumbrados a ellos y los operadores tienen un algoritmo de sintonización más que estudiado para usarlo en cualquier sistema a controlar y por otros motivos que ahora no recuerdo... :)
Que nadie se caliente... aunque el controlador ¿deathbeat? permite controlar sistemas en un par de muestras, hay que conocer perfectamente la función de transferencia del sistema y no se ha hablado nada de la potencia necesaria para usarlo porque, aunque los sistemas de digitales de control cuenten con esa potencia para emitir la señal de control necesaria, lo normal es que los sistemas que vas a controlar (eminentemente analógicos) saturen y no admitan esa señal de control... en fin, un rollo.
Usábamos como libro de cabecera los dos del Ogata, yo tengo ambos comprados en papel, pero imagino que lo podéis encontrar por la web o en alguna biblioteca universitaria cercana.
Eso sí, como dice Unai, de las matemáticas no te libra nadie.
Lo dicho, quien tenga interés en ver cómo se explican estas cosas en la ETSII de la Universidad de Málaga (que imagino que no es la mejor... o sí, no sé) que avise y yo le paso mis apuntes de ambas asignaturas. :)
Saludos.
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/d71bae95-a138-46e9-b8a1-3468ab0895a4%40googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/5c3b62fd-d7bc-4d21-bc1d-3e7a8f5da80c%40googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-lib...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Mira, ahí me has pillado totalmente fuera de lugar XD.
He trabajado bastante con motorcillos, pero las máquinas eléctricas se me resisten. Igual tengo conocimientos teóricos un poco más avanzados que tú, por haber hecho la especialidad de electrónica, pero lo justo. Aún así, me cuesta mucho "verlos" en la práctica.
En principio puedes incrementar el par dándole más corriente. Pero claro, si el motor ya está funcionando a su velocidad nominal, al incrementar la corriente estás haciéndolo sufrir. Lo que se me ocurre es que las escobillas den más chispazos y se desgasten antes. O que los propios cables que están en un chasis de plástico no lo lleven bien. O que pete el sensor de efecto Hall. También puede no pasar nada.
Mi referencia son los Brushless (BLDC): un motor DC pero quitándole las escobillas y haciendo la conmutación de forma electrónica. Son muy parecidos a las máquinas síncronas y también a los motores paso a paso. En realidad son nombres diferentes para referirse a lo mismo en diferentes escalas y con diferentes estrategias de control. En estos casos, si quieres incrementar la corriente hay que hacerlo de forma cuidadosa ya que incrementarla hace que se queden "pegados" a una posición. Por lo tanto, hay que coordinar bien el incremento de corriente con la secuencia de cambio, por el riesgo de que se salte un paso y empiece a girar en sentido contrario. Asimismo, como en un paso a paso, incrementarla cuando está fijo en una posición hace que tenga muchísima más capacidad de retención, pero a costa de un "cortocircuito" magnético por así decirlo.
Por lo tanto, por el precio que te cuesta un motor DC de un coche teledirigido (en cualquier tienda de hobbys y maquetas), no merece la pena. La sugerencia del ventilador es porque es lo más rápido para probar sólo el PID y centraros en el diseño dentro de la FPGA. A partir de ahí, lo suyo es coger un motor DC un poquillo más grande y hacer un encoder con una cartulina pintada a rayas y un fototransistor.Un DC no tiene estos problemas que comento, pero los efectos electromagnéticos y las corrientes por dentro son iguales.
Después, cambiarlo por un taco y usar un ADC. Después volver a la tienda de maquetas, y coger un motor de coche teledirigido, pero brushless. O, mejor aún, pedir en aliexpress un motor brushless + controlador por 8-10€. El controlador es como un puente H, pero compuesto por seis transistores. Un proyecto bonito es montarlo en una protoboard.... A mayores, la realimentación de los BLDC se puede hacer con tres sensores de efecto hall, o sin sensores, sólo midiendo la tensión en cada fase en el orden adecuado. Lo cual es una aplicación muy útil para el ADC de la Alhambra. Por las velocidades a las que se tiene que ejecutar es muy probable que el Arduino no sea capaz, pero la iCE40 sí.
¡Por cierto! Los motores brushless + controlador de aliexpress los venden para drones. Sí, con cuatro instancias del PID y cuatro de esos podéis controlar un dron con la Alhambra. Nota: añadiendo una CPU (Arduino) que haga la orquestación de los cuatro motores, leyendo algún acelerómetro/giroscopio.
Todos estos temas los tienes trilladísimos en foros de aficionados a vehículos RC. Muchos controladores incluyen un AVR, como Arduino, y hay varios usuarios que han diseñado firmwares específicos para coches, camiones, aviones, helicópteros...
Sí, también tengo hecho un generador de secuencia de control para motores BLDC en VHDL. Pero, paso a paso. Esa referencia no los la doy todavía, que os explota la cabeza :P. Pedidla cuando queráis.
Ahora que lo pienso... ¿No son los motores de la CPU también brushless? Por lo menos yo he desmontado unos cuantos y no encuentro las escobillas... pero vamos... que siempre que trato con motores también me pierdo... nunca sé donde acaba la electrónica y empieza la parte mecánica para llamarlos de una forma o de otra... o es quizás el controlador el que le da nombre... y cada fabricante con sus submodelos... conocimientos teóricos muchos (suficientes), pero luego cuando llego a la fábrica no sé diferenciar un motor síncrono del extintor.... (menos mal que nadie se da cuenta) jejejeje
Si pudiéramos crear un bloque con el PID e integrarlo en icestudio sería genial, para distintos motores solo se necesitaría repetir el bloque... incluso una colección con bloques de controles automáticos para poder aplicar la teoría de control moderna.... soñar no cuesta nada. :)
<inciso>
Por cierto, ahora que me acuerdo, lanzo la pregunta desde aquí por si Obijuan me lee... Juan, creo haber leido que las ondas senoidales que usabas para tus robots modulares las generabas con una especie de tabla interna en la FPGA... Imagino que ya se te habrá ocurrido, pero te pregunto para que me digas realmente las dificultades o por qué no lo pudiste hacer... ¿Pensaste en algún momento en generar la onda senoidal en un circuito exterior y utilizar el ADC de la placa para alimentar internamente el movimiento del servo?
Imagino que generar una señal seno, cambiar su frecuencia, amplitud y demás, en un pequeño circuito externo es más fácil que sintetizarlo en la FPGA... ¿no?
</inciso>
Hola José,
Disclaimer 1: no me gustá nada de nada utilizar números no enteros. Por eso me dedico a la electrónica digital :D.
Disclaimer 2: las personas que trabajan en teoría de control son matemáticas, o tienen una base de conocimiento matemático muy sólida. Por mi aversión a los números no enteros, no soy una de ellas.
Hola José,
Disclaimer 1: no me gustá nada de nada utilizar números no enteros. Por eso me dedico a la electrónica digital :D.
Disclaimer 2: las personas que trabajan en teoría de control son matemáticas, o tienen una base de conocimiento matemático muy sólida. Por mi aversión a los números no enteros, no soy una de ellas.
Jejeje: Dudo que tengas mucha aversión por las matemáticas, el problema es que no nos las han explicado bien y menos aún nos han dado una formación práctica REAL. Pero ahora tenemos las FPGAs y quizás lo podemos enmendar o que otros lo enmienden...
Dicho lo anterior, mi Proyecto Final de Carrera fue la implementación de un controlador PID de una FPGA. La metodología que seguí fue hacer el ajuste de parámetros con un PID continuo y después aplicarlos a un PID discreto. El fundamento teórico es que si la FPGA funciona suficientemente rápido, el modelo discreto se comporta de forma equivalente al continuo. Aquí, "continuo" quiere decir "en el dominio de Laplace", y "discreto" en el de la transformada Z. Voy a explicarlo de la forma más cutre posible. Si cualquiera percibe un error de concepto matemático, por favor no seáis muy duros.
Como ha comentado José esto tiene relación con los conversores A/D y D/A. Pero vamos a empezar por lo más básico:
- ¿Qué es la derivada de una función? La inclinación de la misma en un punto dado.
- ¿Qué es una integral? El área que hay entre una función y la abscisa, entre dos valores de x.
Supongo que todos os acordáis de las integrales por partes, el cuento de la vieja, etc. Tranquilos, que no vamos a hacerlo XD. Sólo recordad que siempre integramos/derivamos una función, f(x).
Cuando leemos una señal con un conversor A/D (pensemos en una entrada analógica de Arduino), capturamos diferentes puntos de la misma. Digamos que lo que mide esa señal es el caudal de riego de un invernadero. Queremos que Arduino nos avise cuando haya un incremento muy llamativo del caudal. También queremos que nos indique cuántos litros hemos gastado en las últimas 24h. ¿Cómo lo hacemos? Efectivamente, lo primero es la derivada de la función y lo segundo es la integral. Pero... ¡no existe función! No tenemos una expresión matemática que defina la señal que estamos leyendo (si la hubiera, no tendríamos que leerla XD).
Aquí entra en juego la transformada Z. Cuando estamos capturando una señal, el número mínimo de capturas es una. Con eso no podemos hacer nada, porque derivar/integrar requiere noción del tiempo y en una muestra aislada no existe el tiempo. Así pues, cogemos dos muestras. Ahora sí tenemos noción del tiempo, que es lo que hemos tardado entre una muestra y la siguiente. Concretamente tenemos tres números con los que trabajar: x(0), x(1) y T.
Juguemos a ser niños:
- Fulanito, ¿cómo calculas la inclinación entre estos dos puntos?
- x(1)-x(0)
- Muy bien, ¡eso es una derivada en el dominio Z!
- Menganito, ¿cómo calculas el área entre esos dos puntos y la abscisa?
- x(0)*T (rectángulo) + x(1)-x(2)*T/2 (triángulo).
- Perfecto, ¡eso es una integral en el dominio Z! Se llama transformada de Tustin, o transformada bilinear.
Un dibujo para entender qué estan viendo los niños:
Esta sacada de la página 1-23 de la memoria de mi proyecto.
A mayores, la transformada Tustin es una de las existentes. Existen también la transformada de Euler y la backward. La diferencia con respecto a Tustin (ver Figura) es que en estas últimas la integral se calcula mediante un rectángulo sólo (ya sea x(0)*T ó x(1)*T). Por lo tanto, simplemente se está ignorando el triángulo, y se incurre en un error de aproximación mayor. No obstante, si el sistema se ejecuta lo suficientemente rápido con respecto a la señal, el área del triángulo será despreciable con respecto al del rectángulo. Por eso a veces se utilizan Eurler/Bacward, que numéricamente requieren menos operaciones de computación.
En cuanto a la relación entre el dominio del tiempo, Laplace y Z, hay formas de convertir las expresiones de cualquiera de ellas a cualquier otra. Ver ejemplo en la página 1-22 de la memoria. Cuál se use depende del área en el que te muevas. Z es muy habitual en procesamiento de digital de señal. Y los algoritmos clásicos de control (PID, redes de adelanto, filtros paso-bajo, etc.) son procesamiento de señal. En la página 1-25 de la memoria hay un ejemplo del PID expresado en términos de la transformada Z y al lado lo que sería el circuito con registros y sumadores/multiplicadores.
Lo que comenta José de los conversores D/A está muy relacionado con esto, pero al mismo tiempo no tiene nada que ver. Cuando capturamos una señal continua con un sistema digital, estamos leyendo unos pocos valores instantáneos de los infinitos puntos infinitesimales que tiene la señal en el tiempo. Existen varios teoremas, entre ellos el de Shannon y Nyquist, que son indican cómo de rápido tenemos que leer una señal para asegurarnos de que podemos indentificarla de forma única. Es decir, que si una señal puede cambiar su estado 4 veces por segundo y nosotros sólo la leemos una vez por segundo, hay infinitas señales diferentes que nosotros pensaremos que son iguales, porque tienen 1 de 4 puntos en común, y es el que leemos.
Por lo tanto, siempre que se digitalice una señal, se deberá hacer, al menos, al doble de la frecuencia natural (o máxima) del sistema que la está generando. De hecho, para control, se muestrea 10, 20 o 50 veces más rápido. En la página 1-28 de la memoria se muestra la diferencia de comportamiento del mismo controlador, sólo varian la frecuencia con la que se lee la señal. Como veis, Shannon está muy bien teóricamente, pero es insuficiente.
NOTA: esta es la razón por la que muchos sistemas de control con Arduino funcionan mal. No hay ningún problema con el código, simplemente no puede trabajar todo lo rápido que necesita. Por cierto, la librería PID de arduino utiliza una transformada bilinear. http://brettbeauregard.com/blog/?s=PID
Por lo tanto, José, la relación es esta: los requisitos en el tiempo de muestreo para estar seguros de que estamos capturando la señal deseada y no otra muy parecida. La elección es sensible, porque en caso de muestrear demasiado rápido, capturaremos ruido que no nos interesa. A veces, se incluye un filtrado digital de la señal para eliminar ese ruido ahorrándonos un filtro analógico. Ahí entra en juego la Z. Pero, si no se implementa filtro, que muchas veces no es necesario, la señal se puede volver a generar con un D/A directamente con los valores leídos del A/D.
Nota adicional: siempre se suele muestrear en periodos constantes de tiempo. Hay dos razones principales: por un lado, de otra forma tendríamos que guardar no sólo el dato, sino también el tiempo que ha pasado desde la última captura. Por otro lado, que el el periodo sea constante facilita el análisis matemático y la demostración de teoremas basados en series de datos.
A lo largo de todo el mensaje he considerado que se utilizan Zero-Order-Hold. Es decir, que los datos se leen directamente del A/D y, si hay que generarlos, el D/A mantiene un valor constante entre una actualización y la siguiente. Sin embargo, en ocasiones, especialmente en sistemas donde no se puede capturar/generar lo suficientemente rápido, se pueden utilizar First-Order-Hold: https://en.wikipedia.org/wiki/First-order_hold o soluciones más elaboradas. El objetivo es "inventarse" con cierta sensatez la forma que tiene la señal muestreada/reconstruida entre cada pareja de muestras. Una vez más, estos retenedores se pueden diseñar en el dominio del tiempo, de Laplace o de la transformada Z.
Espero que te haya servido para refrescar un poco la memoria,
¡La madre que te parió Unai! ¡Voy muy contento a leer tu proyecto... y está en vasco! jajajajajajajajaja
Me tendré que guiar por los dibujitos... ;)
En Industriales este tema se daba en una asignatura cuatrimestral solo para ella, era el complemento de otra anual (Control Automático)... Control Digital, creo recordar que se llamaba, si alguien está interesado y quiere mis apuntes se los escaneo y mando.
Creo recordar que había una forma de controlar directamente los sistemas digitales que se hacía con un número limitado de muestras (en un par de ellas los sistemas de uno o varios polos en su función de transferencia se controlaban, ¿deathbeat se llamaba?), con esto quiero decir que no hacía falta "digitalizar" un PID (que es eminentemente analógico, Proporcional-Integral-Derivativo), hay sistemas de control directamente digitales, pero se usa el PID porque los ingenieros industriales están acostumbrados a ellos y los operadores tienen un algoritmo de sintonización más que estudiado para usarlo en cualquier sistema a controlar y por otros motivos que ahora no recuerdo... :)
Que nadie se caliente... aunque el controlador ¿deathbeat? permite controlar sistemas en un par de muestras, hay que conocer perfectamente la función de transferencia del sistema y no se ha hablado nada de la potencia necesaria para usarlo porque, aunque los sistemas de digitales de control cuenten con esa potencia para emitir la señal de control necesaria, lo normal es que los sistemas que vas a controlar (eminentemente analógicos) saturen y no admitan esa señal de control... en fin, un rollo.
Usábamos como libro de cabecera los dos del Ogata, yo tengo ambos comprados en papel, pero imagino que lo podéis encontrar por la web o en alguna biblioteca universitaria cercana.
Eso sí, como dice Unai, de las matemáticas no te libra nadie.
Lo dicho, quien tenga interés en ver cómo se explican estas cosas en la ETSII de la Universidad de Málaga (que imagino que no es la mejor... o sí, no sé) que avise y yo le paso mis apuntes de ambas asignaturas. :)
¡La madre que te parió Unai! ¡Voy muy contento a leer tu proyecto... y está en vasco! jajajajajajajajaja
Desde la guardería y hasta el master hice todos mis estudios en euskera XD. Bueno, lo que me permitieron (no todas las asignaturas están disponibles en la uni), y a excepción de un año que estuve en Ferrol. Desde entonces, en inglés. Poco contenido académico he producido en lengua cervantina.
Me tendré que guiar por los dibujitos... ;)
Eso te iba a decir, que las mates y los circuitos digitales son un lenguaje universal :D
En Industriales este tema se daba en una asignatura cuatrimestral solo para ella, era el complemento de otra anual (Control Automático)... Control Digital, creo recordar que se llamaba, si alguien está interesado y quiere mis apuntes se los escaneo y mando.
Yo la curśe como anual en Galicia y, diría que también en Bilbo. Pero en ninguna de ellas se veía la transformada Z, sólo Laplace. La Z la veían quienes cursaban alguna asignatura específica para hacer sistemas de control con PICs. Yo me la "empollé" para el PFC.
Creo recordar que había una forma de controlar directamente los sistemas digitales que se hacía con un número limitado de muestras (en un par de ellas los sistemas de uno o varios polos en su función de transferencia se controlaban, ¿deathbeat se llamaba?), con esto quiero decir que no hacía falta "digitalizar" un PID (que es eminentemente analógico, Proporcional-Integral-Derivativo), hay sistemas de control directamente digitales, pero se usa el PID porque los ingenieros industriales están acostumbrados a ellos y los operadores tienen un algoritmo de sintonización más que estudiado para usarlo en cualquier sistema a controlar y por otros motivos que ahora no recuerdo... :)
Efectivamente, el PID hoy día es una patata. Hay algoritmos más eficientes, que producen un mejor control y además son más fáciles de ajustar a un problema concreta. Que se disponga de un modelo exacto de la planta o no es secundario (hay algoritmos para ambos casos). El número de muestras utilizado también depende del algoritmo y de cuánta "memoria" quieres que tenga. Lo de los polos o el lugar de las raíces es genérico para cualquier controlador. Hay múltiples circuitos que pueden dar como resultado una misma regla de control, y por tanto tener el mismo número de ceros/polos.
Como dices, se sigue usando por "es lo que hemos usado toda la vida y funciona bien". Aunque "funciona bien" depende, como dices de "un agoritmo de sintonización más que estudiado". Sólo que ese "más que estudiado" es "más que probado". Todas las tablas para ajuste automático de PIDs son experimentales. Revisadas y mejoradas durantes años, sí. Pero exprimentales al fin y al cabo.
De hecho, el enfoque de mi PFC viene de ahí: proveer a un operario un chip equivalente al controlador que ya utiliza, y en el que puede introducir los mismos parámetros de configuración.
¿Cuál es el problema principal de los PID, al margen de todo lo anterior? Son para sistemas Single-Input-Single-Output. En cuanto tienes un motor y quieres controlar dos variables, por ejemplo la velocidad y el par, las cosas se empiezan a complicar porque necesitas dos PID. Si quieres velocidad, posición y par, es más interesante. Hasta que directamente las cosas funcionan de churro, o con experimentaciones eternas para ajustarlo todo a base de prueba y error.
Unai, lo que se aprende contigo y lo rápido que bajas la prepotencia (y a veces la moral... jajajajajajaja) :D
Que nadie se asuste que para programar una FPGA (y ahora menos con icestudio) y hacer experimentos de control con ella, no se necesita saber de control automático, ni función de transferencia, ni transformada Z, ni nada de eso... ¡Unai es que sabe de todo! jajajajajaja
Y claro, ya uno se aprovecha para que le envíe referencias aunque sean en euskera, que siempre viene bien aprender cosas... :-P
José Pico, como te veo interesado y a mi también me gusta el tema, si quieres elegimos una "digitalización" del PID (alguna ya hecha de Arduino puede valer), montamos un proyecto con github y trabajamos sobre ello en la FPGA, no tanto por lo bueno del control del PID, sino por la parte didáctica que pueda tener.
Lo más sencillo es trabajar sobre el control de un motor de corriente contínua (velocidad, par, posición... ), pero elige el sistema dinámico que tú quieras para poner a prueba el control PID (ten encuenta que no solo necesitamos el ADC, sino también el DAC para actuar sobre el motor y un tacómetro para realimentar el bucle de control).
Cuando lo tengamos probado sería muy interesante dejarlo como un bloque en icestudio para poder acoplarlo a motores de corriente continua y usarlo así en otros tipos de robots que no usen servos (los motores de juguete DC no cuestan más de un euro y pueden ser interesantes).
Con el proyecto github montado se puede trabajar sin asustar a nadie y así dejamos el grupo para comentarios y preguntas... ¡Que contestará Unai, claro! jajajajajaja :)
Así que si te animas a repasar los apuntes de la transformada Z, yo encantado, busco los mios y hacemos el bloque PID entre los dos y todo aquel que se quiera apuntar... :)
Yo ando con el sistema Cold/Warm Boot de nuestra placa, un proyecto de simulación del antiguo microcontrolador 4004 de Intel (que he tenido que aparacar por el tema de las puertas triestado), el SimpleZ y alguno que otro más... es decir, que ando falto de tiempo en el tema de FPGAS, pero también quería probar el ADC que trae la iceZUM Alhambra y creo que este puede ser un proyecto útil con el que probarla, así que con tu ayuda abriremos otro frente más... Esperemos que con tantos frentes abiertos no perdamos la guerra... :-)
Tú me dices si te apetece.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Imposible Unai, creo que ni a propósito nos podemos salir de un "cacharreo clásico" que tú no sepas... jejejejejeje
Unai, muy rápido, sé que andas corto de tiempo y tienes entrega... pero me interesa el tema de los ventiladores, es verdad que tienen un hall que puede servir de tacómetro, tengo muchos ventiladores para cacharrear...
¿Crees que los ventiladores de las CPU's podrían tener potencia para mover un pequeño robot educativo? Por lo que veo el par que tienen es bajísimo y se paran sin más que rozarlo con los dedos... pero si se les puede aumentar el par sin quemarlos sería genial. ¿Se podría aumentar el par de giro o directamente ni lo intento?
Buenasssss....
El viernes, 24 de marzo de 2017, 15:21:38 (UTC+1), 1138-4EB escribió:Mira, ahí me has pillado totalmente fuera de lugar XD.jajajajajajaj, ¡no puede ser! ¡eso no me lo creo! :)
He trabajado bastante con motorcillos, pero las máquinas eléctricas se me resisten. Igual tengo conocimientos teóricos un poco más avanzados que tú, por haber hecho la especialidad de electrónica, pero lo justo. Aún así, me cuesta mucho "verlos" en la práctica.
A mi me sacas de la "jaula de ardilla" y me pierdo... tanta libertad... jejejejejeje :)En principio puedes incrementar el par dándole más corriente. Pero claro, si el motor ya está funcionando a su velocidad nominal, al incrementar la corriente estás haciéndolo sufrir. Lo que se me ocurre es que las escobillas den más chispazos y se desgasten antes. O que los propios cables que están en un chasis de plástico no lo lleven bien. O que pete el sensor de efecto Hall. También puede no pasar nada.
Ese era mi miedo y la confirmación que te pedía... siempre podemos hacer una buena reductora mecánica... ;)
Mi referencia son los Brushless (BLDC): un motor DC pero quitándole las escobillas y haciendo la conmutación de forma electrónica. Son muy parecidos a las máquinas síncronas y también a los motores paso a paso. En realidad son nombres diferentes para referirse a lo mismo en diferentes escalas y con diferentes estrategias de control. En estos casos, si quieres incrementar la corriente hay que hacerlo de forma cuidadosa ya que incrementarla hace que se queden "pegados" a una posición. Por lo tanto, hay que coordinar bien el incremento de corriente con la secuencia de cambio, por el riesgo de que se salte un paso y empiece a girar en sentido contrario. Asimismo, como en un paso a paso, incrementarla cuando está fijo en una posición hace que tenga muchísima más capacidad de retención, pero a costa de un "cortocircuito" magnético por así decirlo.
Ahora que lo pienso... ¿No son los motores de la CPU también brushless? Por lo menos yo he desmontado unos cuantos y no encuentro las escobillas... pero vamos... que siempre que trato con motores también me pierdo... nunca sé donde acaba la electrónica y empieza la parte mecánica para llamarlos de una forma o de otra... o es quizás el controlador el que le da nombre... y cada fabricante con sus submodelos... conocimientos teóricos muchos (suficientes), pero luego cuando llego a la fábrica no sé diferenciar un motor síncrono del extintor.... (menos mal que nadie se da cuenta) jejejeje
Por lo tanto, por el precio que te cuesta un motor DC de un coche teledirigido (en cualquier tienda de hobbys y maquetas), no merece la pena. La sugerencia del ventilador es porque es lo más rápido para probar sólo el PID y centraros en el diseño dentro de la FPGA. A partir de ahí, lo suyo es coger un motor DC un poquillo más grande y hacer un encoder con una cartulina pintada a rayas y un fototransistor.Un DC no tiene estos problemas que comento, pero los efectos electromagnéticos y las corrientes por dentro son iguales.
Sí, recuerdo que Demócrito en este hilo hizo un control básico por comparación con icestudio (no os perdáis el vídeo porque es alucinante).
Si pudiéramos crear un bloque con el PID e integrarlo en icestudio sería genial, para distintos motores solo se necesitaría repetir el bloque... incluso una colección con bloques de controles automáticos para poder aplicar la teoría de control moderna.... soñar no cuesta nada. :)
<inciso>
Por cierto, ahora que me acuerdo, lanzo la pregunta desde aquí por si Obijuan me lee... Juan, creo haber leido que las ondas senoidales que usabas para tus robots modulares las generabas con una especie de tabla interna en la FPGA... Imagino que ya se te habrá ocurrido, pero te pregunto para que me digas realmente las dificultades o por qué no lo pudiste hacer... ¿Pensaste en algún momento en generar la onda senoidal en un circuito exterior y utilizar el ADC de la placa para alimentar internamente el movimiento del servo?
Imagino que generar una señal seno, cambiar su frecuencia, amplitud y demás, en un pequeño circuito externo es más fácil que sintetizarlo en la FPGA... ¿no?
</inciso>
Fin del inciso, perdona, Unai, es que me acabo de acordar y llevaba un tiempo por preguntarlo y siempre se me olvidaba... si Juan no me lee ya busco el hilo y pregunto en el propio hilo. (Espero no olvidarme).
Después, cambiarlo por un taco y usar un ADC. Después volver a la tienda de maquetas, y coger un motor de coche teledirigido, pero brushless. O, mejor aún, pedir en aliexpress un motor brushless + controlador por 8-10€. El controlador es como un puente H, pero compuesto por seis transistores. Un proyecto bonito es montarlo en una protoboard.... A mayores, la realimentación de los BLDC se puede hacer con tres sensores de efecto hall, o sin sensores, sólo midiendo la tensión en cada fase en el orden adecuado. Lo cual es una aplicación muy útil para el ADC de la Alhambra. Por las velocidades a las que se tiene que ejecutar es muy probable que el Arduino no sea capaz, pero la iCE40 sí.
Apunto esa idea. :)
¡Por cierto! Los motores brushless + controlador de aliexpress los venden para drones. Sí, con cuatro instancias del PID y cuatro de esos podéis controlar un dron con la Alhambra. Nota: añadiendo una CPU (Arduino) que haga la orquestación de los cuatro motores, leyendo algún acelerómetro/giroscopio.
¡Otra idea más al saco! :)Todos estos temas los tienes trilladísimos en foros de aficionados a vehículos RC. Muchos controladores incluyen un AVR, como Arduino, y hay varios usuarios que han diseñado firmwares específicos para coches, camiones, aviones, helicópteros...
Investigaremos.
Sí, también tengo hecho un generador de secuencia de control para motores BLDC en VHDL. Pero, paso a paso. Esa referencia no los la doy todavía, que os explota la cabeza :P. Pedidla cuando queráis.
Gracias, mi cabeza te lo agradece... :P
Pues listo, gracias Unai... José Pico... ¿Qué? ¿nos animamos a mover primero un ventilador con el PID digital y luego.... ¡el mundo! ? jejejejeje :)
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/d68f0903-c3c8-4fc2-8357-106891e8972e%40googlegroups.com.
Muchas Gracias.Esa información tiene buena pinta.
El El sáb, 25 mar 2017 a las 19:04, Democrito <spo...@gmail.com> escribió:
Os dejo con el mejor enlace que he encontrado sobre este tema y realizado en verilog (lleva LCD y todo). De esa misma web tomé el encoder x4 que puse en otro hilo.Recomiendo mirar primero el pdf y luego todo lo demás.Saludos!
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/d68f0903-c3c8-4fc2-8357-106891e8972e%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/CAOPg-BuiW2%2BYgg9cB70%3DZ2wp4DccTxQjNweqfv16kdZSKDXugw%40mail.gmail.com.
Dudo mucho que no te gusten las matemáticas, el problema es que no nos las han explicado bien y nos han motivado lo suficiente con la práctica REAL y PALPABLE, pero ahor tenemos FPGAs y podemos enmendarlo. JJejjejeje
Nuestra FPGA ICE40 trabaja a 12MHz. Entiendo que se puede muestrear bastante bien para realizar una gran infinidad de cosas.
Entiendo que hay una gran cantidad comercial de DACs y ADCs que tienen su sample and hold implementados y solo necesitaremos comunicarnos con ellos ( del proceso de Sample and hold ya se encargarán ellos )
En una de mis etapas de estudio estuve dando cosas llamadas "LOGICA DIFUSA" ,redes neuronales donde se daban cosas como de autoaprendizaje... usé redes Neuronales de Matlab así como una herramienta fantástica llamada XFUZZY ( universidad de Sevilla ) donde se pueden generar circuitos de lógica difusa y te llega a convertir a VHDL. Se implementó una práctica para realizar el aparcamiento de un coche de forma automática....Lo bueno de la lógica difiusa a diferencia de los PIDs típicos es que no son Single Input Single Output, se pueden implementar complejos sistemas.Como siempre lo estudié de una forma tan teórica que hoy por hoy no se nada de aquello que dí y fue una pena no realizar todo aquello que se explicaba o daba en un FPGA real, quizás la oportunidad que me habéis brindado en FPGA Wars me permita a mí a muchos más llegar a desarrollar aquellos interesantes temas....Podría buscar apuntes ( pdfs de aquello que dí y colgarlos en Drive o algún sitio por si alguien con inquietudes quiere ir adaptándolo a FPGAs )Algunos enlaces de Xfuzzy ( Quizás máquinas como vosotros le saquéis fruto )Ostras! Yo también mando deberes! ejjejejejejejeje
H=B*I;
T=sig(H);
G=svd(T)*O;
S = G*sig(B*I);podrían haber calculado en Matlab por ejemplo ( a una frecuencia de muestreo inferior o igual a 12Mhz) y pasarlos a un fichero.
9 Supongo que sería algo como coger la función de transferencia de un PID H(s), pasarlo a H(z) y convertirlo a sumatorio de señales anterirores...aquí estoy perdido
Una pena no disponer de la placa un fin de semana más... :(
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/039e7e82-5e6a-4e5c-8b7f-a94028cc6b8d%40googlegroups.com.
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/fbd4a9dc-12b3-4aca-9cf3-13ccc5be6e40%40googlegroups.com.
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/e3d59bef-badf-4c6f-ad89-0b32f57b2177%40googlegroups.com.
reg [31:0] q=0; // Registro contador de 32 bits de salidas.reg [2:0] cuadA_retardada=0, cuadB_retardada=0; // Tres 3 bits * 2 flips-flops tipo D.
// Registro de desplazamiento de 3 bits. always @(posedge clk) cuadA_retardada <= {cuadA_retardada[1:0], cuadA}; // 3 FFD.always @(posedge clk) cuadB_retardada <= {cuadB_retardada[1:0], cuadB}; // 3 FFD.
// Lógica con puertas XOR.wire habilitador_conteo = (cuadA_retardada[1] ^ cuadA_retardada[2] ^ cuadB_retardada[1] ^ cuadB_retardada[2]); wire direccion_conteo = cuadA_retardada[1] ^ cuadB_retardada[2];
// Decodificación del encoder y puesta a cero del contador.always @(posedge clk)begin if (rst) q<=0; // Poner a cero contador si se pone a 1 la patilla 'rst'. if(habilitador_conteo) // Señal enable del contador. begin if(direccion_conteo)// Si esta señal es 1... q<=q+1; // incrementar el contador. else // En caso contrario (cuando es 0)... q<=q-1; // decrementar el contador. endendreg [31:0] shifter;
always @(posedge cp) if (ld) shifter <= d; else shifter <= {1'b0, shifter[31:1]}; assign qs = shifter[0];
#define NOP __asm__ __volatile__ ("nop\n\t") // "No OPeration", para permitir un ciclo de reloj sin hacer nada; se utilizará como "nano-pausa" (un ciclo de reloj).
// Patillaje.const byte din = 5; // Número de pin de la entrada de datos series provenientes de la FPGA. (Registro de desplazamiento con la información de los pulsos del encoder óptico. 32 bits)const byte clk = 6; // Número de pin de la señal de pulso para el registro de desplazamiento en la FPGA. (idem)const byte ld = 7; // Número de pin de la señal para cargar el contador de pulsos al registro de desplazamiento en la FPGA. (idem)
// Variable general.int cnt = 0; // Contador general para el bucle For-Next.
// Acumulador de pulsos.long pulsos = 0; // Contador de pulsos.long aux = (2^32)-1; // Variables auxiliar para comparar si hay cambios. Cargamos al valor máximo para que imprima el valor desde el comienzo y no salga la pantalla vacía.
void setup(){ Serial.begin(115200); // Configuración del puerto serie virtual. pinMode(din, INPUT); // din como entrada. Estos son los tres pines para la lectura del registro de desplazamiento en la FPGA. (pin 5) pinMode(clk, OUTPUT); // clk como salida. (pin 6) pinMode(ld, OUTPUT); // ld como salida. (pin 7) digitalWrite(clk, LOW); // Esas dos salidas se incian con cero. digitalWrite(ld, LOW);}
void loop(){ digitalWrite(ld, HIGH); // Habilita la carga el contador de pulsos en el registro de desplazamiento en la FPGA. digitalWrite(clk, HIGH); // Se necesita poner a 1 la patilla "ld" (Load) y después un flanco de subida en clk (clock) para hacer la carga. digitalWrite(ld, LOW); // Hecho esto, ambas patillas vuelven a cero. digitalWrite(clk, LOW); pulsos=0; // Ponemos a cero la variable pulsos; luego en el bucle "for" se irán poniendo a 1 los bits correspondientes. for (cnt = 0; cnt < 32; cnt++) // Lectura del registro de desplazamiento. { if (digitalRead(din) == 1) { bitSet(pulsos, cnt); } // Inicialmente todos los bits de la variable "pulsos" están a cero. Aquí va poniendo a 1 los bits correspondientes. digitalWrite(clk, HIGH); // Flanco de subida de clk para pasar al siguiente bit del registro de desplazamiento de la FPGA. NOP; // Un pequeño delay porque no se debe (en teoría) poner una instrucción seguida de otra en la que cambia el estado el mismo pin; en este caso es clk. digitalWrite(clk, LOW); // Se pone a cero la señal clk para completar el pulso. }
if (aux != pulsos) // Si se produce algún cambio de contaje se muestra por el puerto serie. { Serial.println(pulsos); aux = pulsos; // Igualamos para luego ver si hay cambios. } }
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/b5c9aef2-a31e-4d15-a7e9-f2b4f7a9ad66%40googlegroups.com.
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/5a3a7156-819b-4bac-9992-6ea296183610%40googlegroups.com.
Hola:Estoy intentando informarme un poco sobre un tema que me parece más que interesante.La idea es:Como un circuito analógico se puede expresar como H(s) función de transferencia expresada usando la transformada de Laplace y esta a su vez se puede convertir a H(z) su transformada z y a su vez esto se puedeexpresar como en sumas y diferencias, funciones del tipo y(k) = -a1 y(k-1) -a2 y(k-2) + b1 u(k-1) + b2 u(k-2)Si una señal de entrada la muestreamos con un convertidor A/D y los datos digitales los introducimos a nuestro FPGA donde mediante la combinación de sumas de valores anteriores de entradas y salidas,podemos pues, obtener el resulado de salida de un circuito ante una señal de entrada, que serán un conjunto de muestras digitales que si a su vez la extraemos de la FPGA a un convertidor D/A , podemos crear digitalmente el funcionamiento de cualquier circuito analógico.Bueno! esto dicho así parece muy fácil pero entiendo que tiene su miga.Pero estas cosas me surgen al releer algún apunte de cuando era estudiante y me quedé frustado con una gran cantidad de formulaciones que nos daban sin sentido y que nunca llegabamos a comprender porque nunca se hacía nada práctico.Ahora, con esto de las FPGAs libres estoy intentando reordenar todas aquellas ideas que al final muchas de ellas seguro que con dos conceptos básicos y claros se pueden hacer maravillas.Aquí os dejo un poco una hoja recuperada de unos apuntes de los cuales me he inspirado para iniciar este nuevo tema ( Por cierto, me acuerdo poco o casi nada de estos temas matemáticos jejejej )Si alguien sabe algo más del tema y conoce de ejemplo prácticos,etcSaludos y Gracias
Así, debes tener en cuenta estas dos condiciones para garantizar que no habrá overflow:
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/90d865af-74a1-48e9-b229-c28064372e81%40googlegroups.com.
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/49effb41-dc5f-495b-8904-77645f26bbc4%40googlegroups.com.
--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/49effb41-dc5f-495b-8904-77645f26bbc4%40googlegroups.com.
Todavía no está terminado y hay muchas cosas que explicar.Por ejemplo:
1.) La recepción de datos se hace enviando desde el PC un long (32 bits) y de tal manera que cada byte representa un peso. Esto quiere decir que no se puede enviar directamente una cifra tal y como estamos acostumbrados. Puedo subir un programa de ejemplo, pero preferiría hacerlo cuando todo esté terminado de verdad, pero si alguien quiere el código lo subo. Por lo que me parece, envías por puerto serie 4 bytes para indicar al sistema el SetPoint ( punto a donde quieres que se mueva el motor) y por lo que
2.) La entrada "st" (SapleTime, tiempo de muestreo) viene de un detector de pulsos que es una intención de hacer un circuito sincronizado y para explicar esa parte quería poner un circuito muy sencillo para que los que no tenemos mucha experiencia en Verilog y queramos sincronizar en Icestudio, nos sea mucho más sencillo y lógico.
3.) Por experiencia anteriores y siguiendo las recomendaciones de Brett Beauregard, en vez de utilizar el error en la parte diferencial se utiliza la diferencia entre un tiempo el siguiente del Input (el encoder en este caso), de esta forma mejora el comportamiento del sistema.4.) El código verilog que tengo puesto en la cajita (lo primero que se ve) que es el control PID en sí, tiene muchas incosistencias. La primera de todas es que hace todos los cálculos de un golpe, aquí se necesita una jerarquía de cálculos (secuenciarlo) porque si no lo que está haciendo (y de hecho hace) es calcular del pasado en vez del presente. Otra incosistencia es que hago desplazamientos y como lo muevo hacia a la izquierda (hasta donde yo sé) para multiplicar en base 2 n veces el signo se pierde.
5.) Para el control integral, como necesitaba miniminarlo sin utilizar la división, se me ocurrió (sin saber bien si eso era correcto o no) que se ejecutase cada x ciclos del tiempo de muestreo. Por ejemplo, cada 25 veces se ejecuta una. Me parece buena idea como concepto de dividir aunque no sé muy bien si es correcto.
6.) En Arduino me dió muy buen resultado hacer esto para el control integral (no sé si ya estará inventado, pero en mi desesperación por eliminar el respingo del control integral, al hacer eso me llevé una grata sorpresa, porque no sólo desaparece el respingo sino que relantiza la llegada) :[pongo cómo sería originalmente, no lo que hay en verilog]if ((dInput == 0) || (error == 0)) ITerm <= ITerm + error; else ITerm <= ITerm - dInput;
La chapucilla está en que utilizaba en la primera versión de "pseudoPID" ese valor inverso como ciclos que no ha de hacer nada (cada 20 ciclos sólo se ejecuta 1), intentando minimizar y emular sin división ni multiplicación el equivalente a esa operación (utilizando el tiempo). Pese a que mejoraba la respuesta del motor, este planteamiento creo que es erróneo. Entiendo que no es lo mismo dejar pasar 20 ciclos sin hacer nada que acumular los diferentes errores que se producen durante esos 20 ciclos. Si no haces nada durante 20 ciclos es como si ignorases esa parte integral durante 20 ciclos ( eso entiendo yo ).
--
Has recibido este mensaje porque estás suscrito a un tema del grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/fpga-wars-explorando-el-lado-libre/D1TdQdAvjIg/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/9fa8439f-46ed-4f4e-a49b-ef803a295747%40googlegroups.com.
error<=(sp-in)<<<KP;--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/d638c911-36ec-4b6f-96dd-19627a471564%40googlegroups.com.
--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explora...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/359d56fa-2a80-4959-a6ef-2fa54fdd17d5%40googlegroups.com.