TODOPIC
Microcontroladores PIC => Lenguaje Basic para microcontroladores PIC => Mensaje iniciado por: MICRO.X en 10 de Noviembre de 2005, 10:44:00
-
me encuentro realizando un control proporcional para un motor dc tengo el codigo pero en el momento de montar el control ,este controla pero muy regular .este es el algoritmo ,podrian mirarlo y talvez ayudarme un poco
Define LCD_DREG PORTB
Define LCD_DBIT 0
Define LCD_RSREG PORTB
Define LCD_RSBIT 4
Define LCD_EREG PORTB
Define LCD_EBIT 5
Define LCD_LINES 2
Define LCD_BITS 4
Include "modedefs.bas"
DEFINE ADC_BITS 8 " Set number of bits in result
DEFINE ADC_CLOCK 3 " Set clock source (rc = 3)
DEFINE ADC_SAMPLEUS 50
TRISC=%00000000
TRISA=255
"--------------------------------------------------------------------
aux VAR BYTE
SP VAR BYTE "SP
SEN VAR BYTE "MOTOR
EK VAR BYTE "ERROR
MK VAR BYTE "SEÑAL CONTROLADOR
Q0 CON 22
M0 con 15
Read 0,sp
Lcdout $fe, 1 "limpiar pantalla
Lcdout "CTROL VELOCIDAD"
Lcdout $fe,$C0, "PARA UN MOTOR DC"
Pause 3000
Lcdout $fe, 1 "limpiar pantalla
Lcdout " ACTUADOR X FASE"
Lcdout $fe,$C0, " Ultimo SP:",DEC SP
Pause 5000
"--------------------------------------------------------------------
GOTO INICIO
"--------------------------------------------------------------------
" CONVERTIDOR ANALOGO DIGITAL
ANALOGO:
ADCON1 = %00000000
ADCON0.2 = 1
LOOP: IF ADCON0.2=1 THEN
GOTO LOOP
ELSE
aux = ADRESH
PAUSEUS 100
ENDIF
RETURN
"-----------------------------------------------------------------
INICIO:
ADCON0 = %11000001 "AN0
GOSUB ANALOGO
SP = aux
ADCON0 = %11001001 "AN1
GOSUB ANALOGO
SEN = aux
IF SP>SEN THEN
EK=(SP-SEN)
MK= (Q0/10)*EK - M0/10
if sen = 0 then
mk = 255
endif
portc = mk
IF MK < 0 THEN
MK= 0
ENDIF
IF MK > 255 THEN
MK=255
ENDIF
ELSE
EK=(SEN-SP)
mk = (Q0/10)*EK + 10
if sen = 255 then
mk = 0
endif
portc =- mk
IF MK < 0 THEN
MK=0
ENDIF
IF MK>255 THEN
MK=255
ENDIF
endif
Lcdout $fe, 1 "limpiar pantalla
Lcdout "Control:P", " SP:",dec sp
Lcdout $fe,$C0, "Var:",DEC SEN, " Er:",DEC ek
Pause 500
write 0,sp " espera.1 seg
GOTO INICIO
END
el programa tiene el sp en ra0 y la variable del motor atraves de convertidor frecuencia-voltage es por ra1
-
Hola, me parece que en tu codigo estas generando el PWM para el control de motor por software... verdad? No se que pic estes usando pero para mi lo mas optimo seria utilizar el modulo PWM que tiene el PIC, al igual como configuraste el ADC tendrias de configurar el PWM.
De esa manera que ganas: que mientras que estes haciendo los calculos para setear la salida, la salida ya esta funcionando, es decir funcionando en paralelo, y a la hora que vas a setear el nuevo PWM, solo lo cargas a los registros y LISTO...
A mi parecer esa forma de trabajar te va a dar mejores resultados... pero todo depende si es que tu PIC tiene el modulo para PWM.
Espero haberte ayudado, una abrazo....
-
GRACIAS POR LA AYUDA DESAFORTUNADAMENTE tengo que utilizar un PWM analogo obligatoriamente ,si puedes darme algun consejo con respecto al programa te lo agradeceria
-
Una pregunta como es un PWM analogo... si no me dices como funciona, no podre ayudarte...
nos vemos...
-
el PWM analogo se controla atraves de un divisor de voltaje implementado con un potenciometro ,despues de haber rectificado la señal pasarla por unos comparadores ,haber generado la rampa ,invertirla se concluye con un pulso el cual se modula de 0 a 180 grados, de esta manera se le podra implementar al motor pormedio de una etapa de potencia el porcentaje de voltaje que deseamos aplicar ya sea de media onda (onda rectificada para un motor dc )o la onda completa para un motor ac .
el control que deseo realizar consiste en que le tengo un SP establecido por ejemplo en 90 de esta forma solo le pasara la mitad del voltaje (media onda).tengo un motor a 30V estaria trabajando en 15 V ,al ponerle carga al motor esta señal dada por el conversor frecunencia voltaje se compara con el sp establecido generando un error ,esta senal de correccion pasa a ser el divisor de voltaje al que me referia anteriormente ,de esta forma si se le pone mucha carga al motor el ancho de pulso subiria a su maximo dado que el SP se encuentra en la mitad, y si por alguna razon el motor toma demasiada Velocidad el ancho de pulso seriaminimo contrarestando la accion del motor
espero que me hayas entendido el PWM es manual y se automatiza con el pic.
-
Ahh... Entonces no estoy tan equivocado.... a ver una consulta, en el conversor Frecuencia/Voltaje que usas para tu control, que caracteristicas debe tener la frecuencia que le envias para generar el voltaje. Por ejemplo: debe ser una frecuencia de 150Hz y lo que se varia es el Duty Cycle (tiempo en alto, TH) que es PWM o debe de variarse la frecuencia siendo esta una señal cuadrada (TH =TL) que es PFM.
Una cosa que olvide preguntarte es que PIC estas usando, pues como te dije antes los PIC"s tienen dos modulos de PWM y lo que se tiene que ajustar es el periodo y el duty cycle...
Nos vemos, un abrazo