Autor Tema: PWM  (Leído 2681 veces)

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

Desconectado ENCARPA

  • PIC16
  • ***
  • Mensajes: 172
PWM
« en: 24 de Octubre de 2004, 13:41:00 »
Alguuien sabe como hacer el ejemplo que biene en prteus 6.2 SP4, de un PWM con invercion de marcha todo comandado por un solo potenciometro pero con PIC, ya que en el ejemplo esta hecho con un MC68H11A8 de motorola, yo tengo hecho el PWM en un 16f873 pero tengo los siguiente problemas:

¿como hacer para que el duty cycle sea 0(cero) con el pote al 50% del recorrido y comiense a aumentar tanto al aumentar como al disminuir el pote?Enfurruñado
 
Salu2 y gracias.

Desconectado mandibu

  • PIC10
  • *
  • Mensajes: 5
RE: PWM
« Respuesta #1 en: 30 de Octubre de 2004, 21:50:00 »
Hola la verdad no se por que queres tener 0% de PWM cuando tenes 50% del pote , pero no es complicado... de la salida del CAD mandas el dato a una variable de 16bits , le restas 512  (quen es la midad de 1024) todo trabajando con complemento A2 y luego de la resta , hacesvalor avsoluto , te puedo pasar algo de codigo ,, pero lo tengo para ñla serie 18 ,
espero0 que te haya servido  suerte

Desconectado ENCARPA

  • PIC16
  • ***
  • Mensajes: 172
RE: PWM
« Respuesta #2 en: 02 de Noviembre de 2004, 17:18:00 »
A ver si entendì,

1º Complemento A2 el resultado de la convercion, o sea ADRESH y ADRESL.
2º Cargo este resultado en una variable
3º Resto a esta variable 512 (1024/2)
4º Hago valor absoluto del resultado
5º Envio el resultado a los registros correspondientes para generar el PWM.

Si esto es correcto solo tengo una duda antes de ponerlo en practica, como hago valor absoluto de un dato en asembler, porsupuesto?Enfurruñado

Gracias voy a intentar escribir el codigo y si surge algun problema aviso.Sonrisa Gigante
 
Salu2

Desconectado mandibu

  • PIC10
  • *
  • Mensajes: 5
RE: PWM
« Respuesta #3 en: 07 de Noviembre de 2004, 21:17:00 »
Los pasos son

1) pasas ADRESL/H  a una variable
2) Cargas el complemento A2 de 512 en otra variable
3) Haces la suma
4) haces Valor abs del resultado de la suma  y listo

El problema es que estoy desde hace tiempo trabajando unicamente con pics de la
serie 18 y las rutinas estan para ellos ... no creo que sea complicado hacer el pase
si se te complica hacemelo saber y con un poquito de tiempo te escribo el codigo en
pic 16 (disculpa ahora tengo mucho sueño Enfurruñado
cualquier cosa no dudes en preguntar

El programa tiene que funcionar bien.. son todas rutinas que uso actualmente

Solo por curiocidad.. que es lo que estas manejando con PWM ???

Suerte


         MOVF        ADRESL,w,0              ;    
      movwf         Res_16b_L,1         ;      paso ADRESL/H a un par de variables
     MOVF        ADRESH,W,0            ;  /  
     movwf       Res_16b_H,1          ; /

         MOVF        ADRESL,w,0              ;    
      movwf         Res2_16b_L,1       ;     en otro par de variables cargo
     MOVF        ADRESH,W,0            ;  /  el complemento A2 de 512  
     movwf       Res2_16b_H,1        ; /  comp A2(512) = 65536 - 512 = 65024



;  ----------------------------------------------------------------
;  ----------------- RUTINA PARA LA SUMA 16b + 16b ------------------
;  ----------------------------------------------------------------
;  La intencion es SUMAR Res2_16b_H/L a las variables Res_16b_H/L
;     RESULTADO en Res_16b_H/L
SUMA_16b
     MOVF    Res2_16b_L,W,1    ;  Sumo Res2_16b_L con Res_16b_L
       ADDWF      Res_16b_L,f,1    ;/
     MOVF    Res2_16b_H,W,1    ;  Sumo Res2_16b_H con Res_16b_H
     ADDWFC   Res_16b_H,f,1    ;/  + 1  si hay carry
     RETURN
;  ----------------------------------------------------------------
;  ------------ FIN DE LA RUTINA PARA LA SUMA  16b + 16b ------------
;  ----------------------------------------------------------------

;------------------  Valor Absoluto --------------------------------------------------------------------
   BTFSS Res_16b_H,7 ;si el bit7 de la variable alta(H) es 1 --> Variable Negativa
   GOTO  resultado_positivo2    ; Res_16b_H/L positivo!!

;-- rutina de Complemento A2 --------
     COMF    Res_16b_L,f    ; <<-Complemento A2            
     COMF    Res_16b_H,f    ;
     INFSNZ  Res_16b_L,f    ;
     INCF      Res_16b_H,f    ; <<-Complemento A2
;-- fin de rutina de Complemento A2 --------

resultado_positivo2
          MOVF        Res_16b_H,w,0          ;    
      movwf        Abs_Var_H,1           ;      paso el resultado a un par de variables
     MOVF        Res_16b_L,W,0        ;  /    de salida
     movwf       Abs_Var_L,1            ; /

Desconectado ENCARPA

  • PIC16
  • ***
  • Mensajes: 172
RE: PWM
« Respuesta #4 en: 08 de Noviembre de 2004, 17:24:00 »
Hola mandibu, mi intencion es tener el control total de un motor solo con un potenciometro, si te fijas bien en el primer post indico lo que quiero hacer.
Yo por ahora vengo haciendo programitas y simulando en proteus, todabia no me hice un lugar para construirme el grabdor de Pic, cuando lo tenga te aseguro que boy a tener bastante pra probar.
No se si tenes Proteus, yo tengo la vercion 6.2 SP4, por privado te envio el ejemplo que viene  en proteus de lo que quiero hacer; esta hecho para un MC68H11A8 de motorola yo lo quiero hacer para un Pic; de paso te mando lo que yo hice el PWM a 20KHz , mis pruebas con tus consignas (tene en cuenta que esta hecho antes de que me dejaras las rutinas, en tu ultimo post), si podes simularlo te bas a dar cuenta que hay un par de errores pero creo que puedo solucionarlos despues de estas rutinas que me enviastes.

Saludo2 y gracias.Sonrisa GiganteRebotadoSonrisa Gigante

Desconectado mandibu

  • PIC10
  • *
  • Mensajes: 5
RE: PWM
« Respuesta #5 en: 09 de Noviembre de 2004, 20:49:00 »
ahora creo entender lo que quieres hacer,   vos pensas colocar un transistor (supongo un mosfet) que alimente un puente H .. el transistor trabajara con PWM y cuando el ciclo sea de 0%  el puente H tendra una tension de 0v  con el puente lo que haces es controlar el sentido giro del motor
Sos ing electronico o estas estudiando ¡¡?  .. te estas metiendo en terreno medio pantanoso... hay varias formas de hacer lo que vos queres... una es la que planteas

No se si tenes la electronica resuelta, por ahi te conviene armar la etapa de potencia probar usando un 555 para hacer PWM , una vez que fuenciona el puente H , los microcontroladores te dan la llave del cielo

Al proteus nunca lo use... no se ni que es... yo siempre use para simular el mismo MPLAB , lo que si te recomeindo que armes el propgramador de pic y te pongas a programar y probar parte por parte (siempre de lo mas simple a lo mas complejo)

esta bueno lo que estas haciendo y a mi ver tiene que funcionar ,, Suerte
Cualquier cosa me comentas .....

PWM con un 555 es muy simple ,. se usa un comparador  y al 555 lo usas para general un señal diente de sierra , lo que si vas a tener que usar un comparador de alta velocidad...  LM6511    o   LM311
el circuito esta en varias hojas de datos y notas de aplicacion del 555


Desconectado ENCARPA

  • PIC16
  • ***
  • Mensajes: 172
RE: PWM
« Respuesta #6 en: 11 de Noviembre de 2004, 17:15:00 »
Empesemos por lo primero, no soy ingeniero aunque intente serlo, apenas tengo el titulo de tecnico, con respecto al ejemplo que esta en Proteus paso a explicarlo para los que no tengan el programa y por ende tampoco el ejemplo.

Recuerdo que lo que voy a comentar esta desarrollado para un micro de motorola, precisamente MC68H11A8.
Bloques:

Potenciometro, micro , puente H

Estando el potenciometro en su posicion central 50% motor pardo.
Aumentando el potenciometro +del 50%, comiensa a generarce un PWM proporcional a ese aumento comenzando desde 0 Duty cycle hasta alcanzar casi el maximo 98% aprox. por consecuente el motor reacciona de la misma forma.

Disminuyendo el potenciometro - del 50%  prestar atencion que esta es la parte mas interesante:

1º Por otra patita del micro se genera la invercion de marcha del motor (esta patita esta conectada al puente H en el lugar correspondiente)
2º Comienza a generarce el mismo PWM de antes (el que comenzaba al aumentar el pote) pero ahora actua de forma inversa, es decir va aumentando dese 0 Duty cycle hasta el 98%, pero  al disminuir el pote.

Oberven que cada vez que el pote se va hacercando al 50% el motor va disminuyendo la velocidad hasta hacerse 0  (motor parado= 50% del pote ),  por encima del 50% un sentido de giro desde 0 al macimo y por debajo otro sentido de giro desde 0 al maximo; de esta manera se logra controlar no solo el sentido de giro del motor si no su velocidad y tan solo con un simple potenciometero sin llaves  ni ninguna otra cosa que actuen sobre la invercion de marcha.

Bueno mi intencion es poder hacer eso en un PIC16f873.

Alguna idea RollEyes

Salu2RebotadoSonrisa GiganteRebotado


 

anything