Autor Tema: Controladora para QUAD con 18F4550  (Leído 12405 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Controladora para QUAD con 18F4550
« Respuesta #15 en: 07 de Mayo de 2014, 03:37:58 »
No es un OR exclusivo ??
 

Es una XOR Marcos, sí. En este caso particular se comporta como una negación. Si bien tanto ^ 255 como ~ logran el mísmo resultado. Puede que usar ~ ahorre una instrucción ASM.

Por otro lado, es cierto también lo que mencionás. Es el mísmo problema que te mencioné, sólo que ahora por exceso en lugar de defecto.

Entonces, una idea para solucionarlo sería restringir el momento en el que puede ocurrir un cambio de dutys al inicio (o final) de un ciclo de PWM. Esto se podría lograr con un arreglo temporal de dutys[] adicional, para contener los nuevos valores y flags que indiquen el request de cambio. Luego al inicio (o final) del ciclo PWM proceder a aplicar los cambios del array de dutys[] temporal al array efectivo y proceder a regenerar las máscaras en el dutys_buff[], tanto la vieja como la nueva.

En la mayoría de las aplicaciones PWM puede ser aceptable ese error. Personalmente utilizo una subrutina en ASM propia para generar los PWM por software, y como generalmente aplica a PWMs para LEDs suele funcionar sin inconvenientes porque si bien cuando ocurre un cambio en medio de un ciclo PWM pueden ocurrir estos cambios de flanco, la subrutina al menos tiene a acomodar e ir llevando el valor RMS al deseado. El problema es que con los Servos estos cambios de flancos adicionales pueden inducir vibraciones o efectos ineseados en el servo.

Saludos!
  
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Controladora para QUAD con 18F4550
« Respuesta #16 en: 07 de Mayo de 2014, 10:59:50 »
Si, es cierto. Básicamente hay que emular con software lo que está implementado por hardware en el módulo PWM del uC. En este caso lo que se controla son los variadores de velocidad de los motores brushless, me parece que le llegue un pulso de 2mseg (acelerado a fondo) cada tanto no va a ser nada bueno para el control.
La otra alternativa, que incluso me permitiría ganar en resolucion del PWM es, durante los 2mseg (de los 20) en donde el PWM se puede mover es adueñarme del micro y hacer solo el PWM. O sea, cuando entra a la interrupcion del timer que indica que arranco con el PWM no salgo de la misma hasta que hallan pasado los 2mseg. De este modo, se evita el problema de cambio de duty mientras estoy en el medio del PWM... por otra parte cuando el PWM esta manejado por interrupcion pasa que si dejo el duty en un valor dado, a veces tengo un ancho de pulso y aveces tengo otro muy parecido si lo veo con el osciloscopio. Esto debe ser por el codigo ASM que se genera, que dependiendo como entra puede haver alguna instruccion mas. En cambio si toda la temporizacion la hago a mano puedo hacer que siempre se obtenga el tiempo exacto. Me explico?
La contra es que durante 1-2 mseg la aplicacion no puede hacer otra cosa. Lo cual no sé si es muy crítico ya que la señal del radio control se actualiza a 50Hz... por lo tanto si yo ocupo 2 mseg todavia tengo tiempo de ejecutar 2 o 3 actualizaciones de los PID antes de que decibir nuevos Set Point... voy bien con el razonamiento?

Saludos!
-
Leonardo Garberoglio

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Controladora para QUAD con 18F4550
« Respuesta #17 en: 10 de Mayo de 2014, 12:48:42 »
Podrías hacerlo tomando control del CPU durante esos 2ms, aunque es un desperdicio de CPU y potencial complicación a futuro. En muchas aplicaciones interrumpo cada 20uS para generar el PWM y no tengo problemas, aunque hay que tener varias precauciones para que funcione bien.

Me resulta un poco extraña la variación entre entradas a la interr. Tal vez haya varias cosas que revisar:
1) El código asm que se genera, tanto de parte del compilador para gestionar la ISR, como el tuyo. Revisar cualquier instrucción de salto que pueda estar generando la variación. Las instrucciones que no afectan al PC no deberían modificar los tiempos de ingreso/egreso de la ISR;
2) El default es la última condición que se revisa del switch. Tal vez usar IF sería mejor que el switch y el primer IF dedicado a la generación del PWM;
3) El 18F4550, tiene 2 niveles de interr. deberías utilizar la high para generar el PWM, de esa manera asegura que aún si hay otras interr low, el tiempo de ingreso y atención prioritaria la tendrá el PWM;
4) Pensar en cambiar el código de refresco a otro, sin usar tanta RAM y directamente hacerlo por instrucciones ASM (así lo hago yo desde hace años).

Saludos!
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado elbarto

  • PIC10
  • *
  • Mensajes: 2
Re: Controladora para QUAD con 18F4550
« Respuesta #18 en: 31 de Marzo de 2015, 20:40:54 »
Disculpa, te envié un correo solicitando información de tu código. Espero me puedas apoyar. Gracias

Desconectado elgarbe

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2178
Re: Controladora para QUAD con 18F4550
« Respuesta #19 en: 31 de Marzo de 2015, 21:43:24 »
dejame que busco los archivos y los subo.

sds
-
Leonardo Garberoglio

Desconectado elbarto

  • PIC10
  • *
  • Mensajes: 2
Re: Controladora para QUAD con 18F4550
« Respuesta #20 en: 03 de Abril de 2015, 00:10:05 »
Te pido me avises si los subes. Gracias