Ir ao conteúdo
  • Cadastre-se

Algúém me ajuda com esse PWM usando PIC


granrato

Posts recomendados

Gente é o seguinte, eu arrumei esse software para simular um PWM na Saida do PIC 12F675 e preciso saber se esse software tá certo mesmo e produzirá com certeza uma saída PWM para eu usar com um motor.

Preciso q alguém analíze esse software pra eu poder usa-lo, pois não saco muito de programação de PICs:

Por favor me respondam... a fonte do programa está abaixo:

#include <p12f675.inc>

;sem wdt : __CONFIG 3144h

__CONFIG 314Ch

#define BANK0 BCF STATUS,RP0

#define BANK1 BSF STATUS,RP0

;****************************

;variaveis do programa

;****************************

CBLOCK 0X20

STACKW

STACKS

COUNTER

COUNTER2

PWMDESIRED

PWMMAX

PWMHELP

MAX ;VALOR MAXIMO DO PWMDESIRED

MIN ;VALOR MINIMO

FILTRO1 ;filtros dos botões

FILTRO2

FLAGS

ENDC

;****************************

; Constantes usadas no programa:

PWMADJUSTVAL EQU .22

PWMMAXVAL EQU .29

;****************************

#define LDR GPIO,0

#define BT1 GPIO,1

#define BT2 GPIO,2

#define JUMPER GPIO,4

#define LED GPIO,5

org 0x00

goto power_on

;***********************************

;Endereco inicial da interrupcao

;***********************************

org 0x04

btfsc TMR0,0

GOTO PwmInt

PwmInt:

movwf STACKW

SWAPF STACKW,F

SWAPF STATUS,W

MOVWF STACKS

BCF INTCON,T0IF

BTFSC LED

GOTO LOWPULSE

HIGHPULSE:

COMF PWMDESIRED,W

MOVWF PWMHELP

ADDWF PWMMAX,F

BTFSS STATUS,C

GOTO HIGHIMPINT

HIGHIMPSHRT:

MOVF PWMMAX,W

ADDWF PCL,F

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BSF LED

BCF LED

INCF COUNTER,F

COMF PWMHELP,W

ADDLW PWMADJUSTVAL+5

MOVWF TMR0

GOTO LOWIMPINT2

HIGHIMPINT:

ADDLW PWMADJUSTVAL

MOVWF TMR0

HIGHIMPINT2:

BSF LED

INCF COUNTER,F

MOVLW PWMMAXVAL-1

MOVWF PWMMAX

SWAPF STACKS,W

MOVWF STATUS

SWAPF STACKW,W

RETFIE

;****************************

LOWPULSE:

COMF PWMHELP,W

ADDWF PWMMAX,F

BTFSS STATUS,C

GOTO LOWIMPINT

LOWIMPSHRT:

MOVF PWMMAX,W

ADDWF PCL,F

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BCF LED

BSF LED

COMF PWMDESIRED,W

MOVWF PWMHELP

ADDLW PWMADJUSTVAL+5

MOVWF TMR0

GOTO HIGHIMPINT2

LOWIMPINT:

ADDLW PWMADJUSTVAL

MOVWF TMR0

LOWIMPINT2:

BCF LED

MOVLW PWMMAXVAL

MOVWF PWMMAX

SWAPF STACKS,W

MOVWF STATUS

SWAPF STACKW,W

RETFIE

;*********************************************************************

; inicio do programa propriamente

;*********************************************************************

power_on: ;ajustes iniciais

clrf TMR0

CLRF PWMDESIRED

BCF LED

MOVLW PWMMAXVAL

MOVWF PWMMAX

;*******************************************************************

; configuração do PIC

;*******************************************************************

BANK1 ; ajusta oscilador interno para 4MHz

CALL 3FFh

MOVWF OSCCAL

BANK0

CLRF GPIO

MOVLW 07h

MOVWF CMCON ; desliga comparadores analogicos

BANK1

CLRF ANSEL ;todos I/Os digitais

MOVLW 1Fh

MOVWF TRISIO ;configura as saidas e entradas

MOVLW 16h

MOVWF WPU ;configura os resitores de pull-up

MOVLW B'00000000' ; ajusta o OPTION_REG, TMR0 com divisor 1:2

MOVWF OPTION_REG ; habilita os pull-up

MOVLW B'10100000' ;ajusta o INTCON

MOVWF INTCON ;liga interrup do TMR0 e liga pull-ups

BANK0

;****************************************

Idle:

clrwdt

btfss COUNTER,07h

goto Idle

bcf COUNTER,07h

;**********************

;Controle do PWM

;**********************

MOVLW .0

MOVWF PWMDESIRED ;valor inicial do PWM

MOVWF MIN ;valor minimo do pwm

MOVLW .250 ;valor maximo do pwm

MOVWF MAX

CONTROLE:

clrwdt

;******************

;Checa o botao 1:

;******************

BTFSS BT1

GOTO AUMENTAR

;******************

;Checa o botao 2:

;******************

BTFSS BT2

GOTO DIMINUIR

goto CONTROLE

;******************

;******************************************************************

AUMENTAR:

MOVF MAX,W ; verifica se o valor de pwmdesired já esta no maximo

XORWF PWMDESIRED,W

BTFSC STATUS,Z

GOTO CONTROLE ; se pwmdesired=MAX volta para CONTROLE

INCF PWMDESIRED,1 ; caso contrario, incrementa a variavel pwmdesired

CALL DELAY

GOTO CONTROLE

;******************************************************************

;******************************************************************

DIMINUIR:

MOVF MIN,W

XORWF PWMDESIRED,W

BTFSC STATUS,Z

GOTO CONTROLE

DECF PWMDESIRED,1

CALL DELAY

GOTO CONTROLE

;******************************************************************

;*************************

; Rotina de delay

;*************************

DELAY:

movlw .30

movwf FILTRO2

DL1:

clrwdt

movlw .255

movwf FILTRO1

DL2:

clrwdt

NOP

DECFSZ FILTRO1,F

GOTO DL2

DECFSZ FILTRO2,F

GOTO DL1

RETURN

;************************

END

Link para o comentário
Compartilhar em outros sites

Cara, para quê estes milhões de BSF LED? Se você deu comando para acender LED a saída ficará em 1 até você mandar desligar. Debugar programa é a fase mais chata da programação. Mesmo que olhe o código não iremos dar grandes passos na eliminação de erros. Eu uso para Debug o próprio MPLAB.

Link para o comentário
Compartilhar em outros sites

Cassiano, isso aí é uma solução em Software do PWM - q já é implementado em Hardware em outros PICs como o 16f628a

Pulse Width Modulation. An acronym which describes a switch-mode control technique used in amplifiers and drivers to control motor voltage and current. This control technique is in contrast to linear control and offers the advantages of greatly improved efficiency.

Ou seja - Pulso por modulação de Largura.

Pra controle de um motor DC por exemplo, é melhor q se use PWM do q um potenciometro. porque?

Com Potenciomentro você altera a velocidade, alterando a corrente - então logo quanto menor a velocidade, menor será a corrente E por consequencia, o torque é baixo.

já com PWM, você da 'picos' de corrente total - aí o motor da uma 'viradinha' bem rapida... mas com o torque total - então alterando a duração e a largura desses 'picos' de corrente, você terá velocidades diferentes mas mantendo o torque, q aliás, é o total, tanto em altas quanto em baixíssimas rotações.

Rafael: porque você usa um PIC q já tenha PWM ? o 16f628a já tem e é bem barato - entre 7 e 8 reais no Mercado Livre...

Link para o comentário
Compartilhar em outros sites

Poxa gente!

Eu to querendo usar esse soft porque ele serve pra qualquer PIC.

Eu não saco muito de programação e achei essa rotina aí. Tenho até outra rotina q parece sermelhor. Mas essa aí ao menos eu entendi um pouco. Só não sei se funciona!

Queria só mesmo saber se ela funciona ou mesmo se tem lógica pra funcionar.

Obrigado mesmo assim pelo auxílio.

Eu rodei esse programa no simulador PROTEUS.

Coloquei a rotina dentro mas ela não parecia estar funciionando...Eu apertava os botões da simulação para aumentar e dim a vel e não aocontecia nada.

Link para o comentário
Compartilhar em outros sites

Poxa gente!

Eu to querendo usar esse soft porque ele serve pra qualquer PIC.

Eu não saco muito de programação e achei essa rotina aí. Tenho até outra rotina q parece sermelhor. Mas essa aí ao menos eu entendi um pouco. Só não sei se funciona!

Queria só mesmo saber se ela funciona ou mesmo se tem lógica pra funcionar.

Obrigado mesmo assim pelo auxílio.

Eu rodei esse programa no simulador PROTEUS.

Coloquei a rotina dentro mas ela não parecia estar funciionando...Eu apertava os botões da simulação para aumentar e dim a vel e não aocontecia nada.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!