Autor Tema: PWM con pic 16f84A + control de giro de motor DC  (Leído 33945 veces)

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

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
PWM con pic 16f84A + control de giro de motor DC
« en: 18 de Enero de 2011, 09:20:02 »
Hola a todos !  soy nuevita en el foro siempre leo las cosas que publican y he aprendido mucho con ustedes asi que me he decidido a participar , como bien dice el titulo del post necesito si alguien me puede ayudar a realizar el siguiente programa con Pic 16F84A en lenguaje assembler:
Apretando un pulsador la velocidad del motor aumenta y al soltarlo la velocidad alcanzada se mantiene en ese nivel, luego apretando otro pulsador bajamos la velocidad y al soltarlo se mantiene, asi podriamos subir y bajar la velocidad para alcanzar la que querramos entre un minimo y un maximo  

Si me pueden ayudar con esta parte les esatria muy agradecida porque no he logrado hacerlo, luego me gustaria ver como variar el giro Derecha_Izquierda eso lo haria con un puente H LM293, pero eso será para despues de realizar el PWM

gracias a todos!! Ceci

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #1 en: 18 de Enero de 2011, 14:53:25 »
 
Bienvenida al foro.
Un PWM sencillito, se puede hacer mejor, pero para que veas como es, este es el mejor.
Pongamos un PWM de 100Hz (10ms cada ciclo) y que varia del 10% en 10% de DUTTY. en RB0.


RUTINA_10%
bsf  PORTB,0     ; lo ponemos a 1
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
bcf  PORTB,0      ; lo ponemos a 0
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg

RUTINA_20%
bsf  PORTB,0     ; lo ponemos a 1
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
bcf  PORTB,0      ; lo ponemos a 0
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg
call  DEMORA_1MS ;llamamos retardo de 1 miliseg

Y asi sucesivamente, solo hay que ir corriendo para abajo el "bcf PORTB", para variar la frecuencia varias la
DEMORA, si quieres 200Hz seria de 500us, y asi sucesivamente.
Estas DEMORAS se pueden hacer con TIMER0, ES ACONSEJABLE, AUNQUE EN TU CASO NO IMPRESCINDIBLE.
Ve escribiendo codigo y te iremos ayudando.




Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #2 en: 19 de Enero de 2011, 08:28:38 »
 muchas gracias por la respuesta  :mrgreen:!!

lo voy haciendo a ver si me sale y lo paso asi me corrigen  :oops:

ceci

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #3 en: 22 de Enero de 2011, 13:18:58 »
Hola !!! aca paso lo que pude hacer hasta ahora, pero falta bastante para lograr lo que queria hacer al comienzo..

el programa realiza hasta acá lo siguiente:  aumenta la velocidad de un motor DC usando PWM, desde 0 a la maxima velocidad, y vuelve a comenzar,esta secuencia se repite indefinidamente

 Al circuito lo monté en una protoboard y funciona bien,, les paso la simulacion en proteus una breve explicacion del programa en assembler y el archivo completo en assembler

si me pueden ayudar para ir logrando el programa que queria hacer se los agradeceria, creo que como paso siguiente estaria bueno agregarle al programa 2 pulsadores a la entrada para controlar con uno el aumento de la velocidad y con el otro el descenso de la velocidad, si pueden pasenme el archivo assembler con estas modificaciones para ir probandolo :) , a ver si entre todos logramos la meta  :-/

gracias!!!!!, Ceci  :g)

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #4 en: 22 de Enero de 2011, 13:56:28 »
En la simulacion en proteus que envie antes esta mal la conexion del motor a las salidas del PIC, aca lo paso nuevamente bien conectado y le agregue la etapa de potencia para motores de 12V y el circuito de proteccion de los transistores !!!!!!

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #5 en: 24 de Enero de 2011, 06:37:57 »
Primero decirte que en el segundo post no has modificado el esquema en proteus, a mi me sale el mismo del anterior post, que creo que ya sabes que no esta bien.

En cuanto al programa decirte que es una maravilla, has hecho todo el PWM ascendente de 10% en 10% en 51 Bytes increible, dedicate a esto porque eres muy buena, bajate este programa para hacer las rutinas de tiempo, es una pena que alguien con tu talento pierda el tiempo haciendolas

http://www.todopic.com.ar/foros/index.php?topic=5968.0

Le voy a sacar un defectillo al excelente programa que has hecho, aqui:

UNO      DECFSZ AUX_HIGH,F      ;DURACIÓN DEL UNO, SEGÚN THIGH
      GOTO UNO_1
      GOTO CERO
UNO_1                   BSF   PORTA,1
      BSF   PORTA,2
      CALL RETARDO_1
                                GOTO   UNO
no debes hacer dos bsf seguidos sobre el mismo puerto, mejor hazlo asi:

movlw   0x06
movwf   PORTA

En cuanto a los pulsadores, se podria hacer asi:

#DEFINE PUL_ASC PORTB,0
#DEFINE  PUL_DES PORTB,1 ;ponlos donde quieras

SELECCIONAR

   btfss   PUL_ASC      ; esta pulsado?
   goto   $+2      ; no va a chequear el otro
   goto   ASCENDENTE   ; si va a ascendente, incrementar velocidad
   btfss   PUL_DES      ; esta pulsado?
   goto   $-4      ; no vuelve a empezar
   goto   DESCENDENTE   ; si va a decrementar velocidad

ASCENDENTE

   call   ANTIRREBOTES   ; llama demora de 20ms para que pasen rebotes en pulsadores
   btfss   PUL_ASC      ; se pulso o fueron rebotes?
   goto   SELECCIONAR   ; fueron rebotes va a chequear de nuevo
   goto   EMPEZAR      ; va a incrementar velocidad

DESCENDENTE

   call   ANTIRREBOTES   ; llama demora de 20ms para que pasen rebotes en pulsadores
   btfss   PUL_des      ; se pulso o fueron rebotes?
   goto   SELECCIONAR   ; fueron rebotes va a chequear de nuevo
   goto   EMPEZAR_1      ; va a decrementar velocidad


Tienes que hacer otro programa igual para decrementar velocidad, igual que ese que hiciste pero en vez de
incrementar el tiempo que esta en 1 y decrementar el del 0, haces lo contrario, incrementas el de 0 y
decrementas el de 1, a las etiquetas les puedes llamar igual con un guion bajo 1, te pongo todo esto a modo
de ejemplo, se que tu lo vas a hacer mucho mejor

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #6 en: 24 de Enero de 2011, 08:36:40 »
Gracias por tantos alagos me vas a hacer poner colorada  :oops: !!! jeje

Voy a probar las correcciones que me has enviado, espero que me salga hacerle las modificaciones porque hace poquito que estoy manejando los pics y el assembler, una pregunta: el simbolo $ que pusiste nunca lo habia visto antes , se podrá usar en el pic16F84A '??? con este pic estoy comenzando con todo esto por recomendacion de mucha gente y por ahora es el unico que se utilizar un poquito,,, segun me parece ese simbolo apunta a la direccion de programa "actual" y con el -Nº salta hacia atras o me equivoco ??

Voy a probar tambien ese programita para hacer los tiempos de retardo que nunca me gustó hacerlo con la calculadora!!! :-/ :-/

PD: Si puedo hoy subo bien la simulacion en proteus porque la tengo en otra PC, no me di cuenta y subí la que estaba mal 2 veces !!  :5]

gracias nuevamente !!

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #7 en: 24 de Enero de 2011, 14:30:59 »
No te pongas colorada,  :lol: :lol: es en serio que me sorprendio mucho lo bien que lo has hecho. Cuando lo abri y lo vi tan pequeño, me dije, no se entero de nada de lo que le dije, porque creia que era imposible hacerlo en tan poco espacio, pero lo mire un poco y dije, pues parece que tiene sentido, lo puse a simular en el MPLAB y me quede flipado.
Los goto $+3 va 3 posisciones de programa para delante y goto-5 va 5 posiciones para atras, es util para hacer saltos pequeños y no tener que poner una etiqueta.

Te dejo un esquema de un puente H contransistores para hacer el control en ambas direcciones con solo 2 pines del PIC

http://robots-argentina.com.ar/MotorCC_PuenteH.htm

Y otras que lo hacen con MOSFET pero se podria hacer con transistores normales o IGBT, y te hablan del frenado regenerativo, y del frenado controlado aplicando PWM a los transistores inferiores del puente H y otras muchas cosas muy interesantes, incluidos videos, los programan en BASIC asi que el programa lo tendras que hacer, por suerte para nosotros que aprenderemos algo mas   :lol: :lol:

http://www.neoteo.com/puente-h-con-mosfet-para-motores-cc.neo
http://www.neoteo.com/puente-h-para-motores-cc-parte-ii.neo
http://www.neoteo.com/pwm-mosfet-y-motores-cc-parte-iii.neo

Saudos

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #8 en: 26 de Enero de 2011, 12:55:40 »
Ahora que tengo un tiempito les paso el circuito simulado en proteus que habia pasado mal por error la vez pasada, lo que acompaña al motor de DC es el circuito de proteccion de los transistores (de picos positivos y negativos) podria no estar en la simulacion aunque lo coloqué por si alguien quiere armarlo en la practica  :)

Hola tapi8 !! :
Todavia no pude hacerme de tiempo para agregarle los pulsadores al assembler, en cuanto lo tenga lo paso asi me envias tus observaciones, espero poder hacerlo con los consejos que me pasaste, si vos los podes agregar al assembler y enviarlo seria de grandisima ayuda asi solo tendria que retocarlo un poco si hiciera falta  :mrgreen:

Lo del giro del motor lo dejamos para mas adelante cuando ya funcione bien el PWM con los pulsadores, pero estaba pensando en usar un L293 y controlar el sentido de giro (derecha-izquierda) con otros 2 pulsadores!!

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #9 en: 27 de Enero de 2011, 14:43:08 »
El esquema que pones no es muy bueno (de esta vez toca darte caña en vez se halagos  :lol: :lol: ) pones dos MOSFET en paralelo a masa, por que? solo tiene explicacion si el motor es muy potente y no llega uno pero no creo que sea el caso, y en el circuito de proteccion ese C1 y D3 no me gustan nada. Por eso te pase los esquemas en esos enlaces, fijate que ponen dos transistores para cada sentido de giro, uno desde +12V y otro a masa, para un sentido de giro llegaria con un transistor solo, pero bueno como despues lo vas a hacer con el L293.

El programa para dos pulsadores, solo tienes que cambiar etiquetas en el tuyo, ponerles _1 y en los UNO _1 por ejemplo UNO_2_1 cambiar etiquetas en los GOTO y que vaya dcrementando al reves los TLOW y THIHG, la parte de los pulsadores ya la tienes en el otro post que te puse mas arriba, te dara un poco de trabajo, tambien tienes que hacer una demora de 20ms y le llamas ANTIRREBOTES, la puedes hacer con el programa que te puse el otro dia, tendras que definir PDel0 y PDel1.

El programa te funcionara incrementando y decrementando continuamente velocidad pero no se parara en la que esta al soltar, pero cuando te funcione este ya miraremos eso, asi como invertir el sentido de giro.

Es mejor que lo hagas tu, porque seguro que lo vas a hacer muy bien y asi aprendes.

Saludos

Desconectado ceci_lamorocha

  • PIC12
  • **
  • Mensajes: 94
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #10 en: 27 de Enero de 2011, 17:08:28 »
Ok gracias :) te comento que mañana estoy saliendo de vacaciones asi que hasta dentro de 15 dias no voy a poder seguir con este tema  :5] , no me extrañes !!!  :lol:  a la vuelta intento terminarlo. Por los transistores es como dijiste vos, puse esos por si alguien quiere colocar un motor con un consumo mayor a 1.5A  en ese caso hay que agregarle un disipador a los transistores !! en mi caso el motor consume menos de 1A asi que no necesitaria agregarlo...
Por el tema del circuito de proteccion, seguramente se puede diseñar mejor, pero lo hice rapido porque luego al usar el L293 el circuito de proteccion se arma solamente con 4 diodos y el que pase yo en la simulacion ya no se usa, cuando lleguemos algun dia a la conexion del motor  :mrgreen: pasaré bien hecho el circuito de proteccion de los transistores del puente H con solo 4 diodos mas barato y simple iposible !  :) , hasta dentro de 15 dias !!  :mrgreen:

Desconectado Omar266

  • PIC10
  • *
  • Mensajes: 13
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #11 en: 15 de Octubre de 2011, 23:22:34 »
Hola, he estado siguiendo este foro y es fantástico, es la primera vez que trabajo con PWM y con un pic, he hecho un proyecto de un carro controlado por RF y con PIC 16F84A, consta de 5 botones con los cuales avanza, retrocede, derecha, izquierda y para, el cual está funcionando muy bien. El carro tenia servomotores trucados pero es muy lento por lo que le puse micromotores y ahora es un poco rápido, la cuestión es que le deseo agregar tres botones que serian Vel1, Vel2 y Vel 3. He hecho un programa el cual va desde 10% al 100 %, como lo sugirieron en este tema y está trabajando bien.  Mi duda son de las conexiones RB1 a EN1 --  RB2 y RB3 al  Motor.

Muchas gracias por su ayuda
« Última modificación: 30 de Octubre de 2011, 14:35:11 por Omar266 »

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #12 en: 16 de Octubre de 2011, 06:06:08 »
Por aqui tienes informacion en español:

http://robots-argentina.com.ar/MotorCC_L293D.htm

Ojo con este integrado solo puedes manejar motores pequeños. Aunque trae diodos internos es mejor que se los pongas externos tambien, vi algun comentario de gente que no se los puso y lo quemo.

No se si lo sabes pero el 16f84 es un PIC antiguo, con pocas prestaciones y caro, es bastante sencillo pasar el programa para otro PIC mejor y mas barato, pero si ya lo has comprado pues......


Desconectado Olinqui

  • PIC10
  • *
  • Mensajes: 19
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #13 en: 05 de Noviembre de 2011, 07:11:36 »



Hola es un post muy interesante creo que se trata de hacer algo como esto espero les sea útil adjunto la simulación en proteus suerte y saludos desde México.






;################################### CONTROL DE VELOCIDAD DE UN MOTOR DC #####################################
   LIST P=16F84A
   INCLUDE"P16F84A.INC"
   __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC



LT   EQU   H'20'
HT   EQU   H'21'
LT1   EQU   H'22'
HT1   EQU   H'23'
LSB   EQU   H'24'
MSB   EQU   H'25'
AJUSTE   EQU   H'26'

ZERO    EQU     H'3F'      ; Números
UNO     EQU     H'06'
DOS     EQU     H'5B'
TRES   EQU     H'4F'
CUATRO    EQU     H'66'
SINCO    EQU     H'6D'
SEIS     EQU     H'7D'
SIETE   EQU     H'07'
OCHO   EQU     H'7F'
NUEVE    EQU     H'6F'
DIEZ   EQU   H'BF'
V_A   EQU     H'01'
V_B   EQU     H'03'
V_C   EQU     H'07'
V_D   EQU     H'0F'
V_E   EQU     H'1F'
V_F   EQU     H'3F'
V_G   EQU     H'80'
V_H   EQU     H'A3'
V_I   EQU     H'C8'
V_J   EQU     H'FF'
;----------------------
   ORG   0X00
   GOTO   INICIO
INICIO                  ; INICIO
   CLRF   PORTB
   CLRF   AJUSTE   
   CLRF   LSB            ; BORRAMOS REGISTROS
   CLRF   MSB
   BSF   STATUS,5
   MOVLW   B'00010111'    ;  PORTA,3 COM SALIDA
   MOVWF   TRISA
   CLRF   TRISB
   BCF   STATUS,5
   BCF   PORTA,3
   BCF   PORTA,2
   GOTO   PRUEBA
PRUEBA
   CALL   MOSTRAR
   MOVWF   PORTB
   BTFSS   PORTA,0
   GOTO   BAJAR
   BTFSS   PORTA,1
   GOTO   SUBIR
   GOTO   PREPARA
BAJAR
   CALL   RETARDO
   MOVLW   .0
   SUBWF   AJUSTE,W
   BTFSC   STATUS,Z
   GOTO   PRUEBA
   DECF   AJUSTE,F
   CALL   MOSTRAR
   MOVWF   PORTB
   GOTO   PREPARA
SUBIR
   CALL   RETARDO
   MOVLW   .10
   SUBWF   AJUSTE,W
   BTFSC   STATUS,Z
   GOTO   PRUEBA
   INCF   AJUSTE,F
   CALL   MOSTRAR
   MOVWF   PORTB
   GOTO   PREPARA
MOSTRAR               
   MOVF   AJUSTE,W
CÓDIGO               
        ADDWF   PCL,F
        RETLW   ZERO
        RETLW   UNO
        RETLW   DOS
        RETLW   TRES
        RETLW   CUATRO
        RETLW   SINCO
        RETLW   SEIS
        RETLW   SIETE
        RETLW   OCHO
        RETLW   NUEVE
   RETLW   DIEZ
        RETLW   V_A
        RETLW   V_B
        RETLW   V_C
        RETLW   V_D
        RETLW   V_E
        RETLW   V_F
        RETLW   V_G
        RETLW   V_H
        RETLW   V_I
   RETLW   V_J
;--------------------
PREPARA               
   CLRF   HT1
   CLRF   LT1
   MOVLW   .0
   SUBWF   AJUSTE,W
   BTFSC   STATUS,Z
   GOTO   PRUEBA
TRATAMIENTO            
   MOVF   AJUSTE,W
   ADDLW   .10
   CALL   CÓDIGO
   MOVWF   HT1
   SUBLW   .255   
   BTFSC   STATUS,Z
   INCF   LT1,W
   MOVWF   LT1
   GOTO   VERIFICA
VERIFICA               
   MOVF   HT1,W
   MOVWF   HT
   MOVF   LT1,W
   MOVWF   LT
PULSO_O               
   BCF   PORTA,3  ; PORTA,3'COMO "0" AHORA
   CALL   CICLO
   DECFSZ   LT,F
   GOTO   PULSO_O
;----------------------
   BTFSS   PORTA,0
   GOTO   BAJAR
   BTFSS   PORTA,1
   GOTO   SUBIR
;----------------------
PULSO_I                  
   BSF   PORTA,3  ; PORTA,3'COMO "1" AHORA
   CALL   CICLO
   DECFSZ   HT,F
   GOTO   PULSO_I
   GOTO   VERIFICA
;----------------------
CICLO            ; CONTADOR
   MOVLW   .10
   MOVWF   LSB
CICL               
   DECFSZ  LSB,F
   GOTO CICL
   RETURN
;----------------------
RETARDO            ; ESPERAR
   MOVLW .255
   MOVWF LSB
DON1
   MOVLW .255
   MOVWF MSB
DON2   
   DECFSZ  MSB,F
   GOTO DON2
   DECFSZ  LSB,F
   GOTO DON1
   RETURN
;============================================================================;

   END



El circuito para el motor es solo demostrativo pero se puede hacer mucho mejor.

Suerte.


PD, Solo falta la implementación  del cambio de giro.





MENTE SOBRE MATERIA

Desconectado kiara2692

  • PIC10
  • *
  • Mensajes: 1
Re: PWM con pic 16f84A + control de giro de motor DC
« Respuesta #14 en: 29 de Noviembre de 2012, 14:51:56 »
hola soy nueva por aquí!

Revise y el tema muy interesante, yo estoy haciendo algo similar es el control de velocidad,  pero para un motor AC y usando un pic 16F870 la parte de potencia esta lista, estoy usando un puente H con transistores mosfet pero en la parte de control estoy un poco perdida y una cosa más debemos usar un pantalla lcd para ver las RPM del motor y el aumento y disminución de la velocidad si alguien, tiene alguna sugerencia de cómo empezar estaría muy agradecida
:)