Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
gbarrosp7

Controle motor CC por PWM e encoder

Recommended Posts

Postado (editado)

Estou fazendo um projeto para controlar um motor cc por pwm, que será programado em um MC HCS08, e para medir a rotação usarei um encoder.

A velocidade desejada será setada através de potenciômetro e um botão.

Estou tendo dificuldades para trabalhar com o encoder, segue o código que fiz: 

 

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */


char FlagIrq=1;
int voltas=0;
int passo =0;
int rpm=0;

void interrupt isr_irq(void);
void Delay(long); 

void main(void)

{
 PTAPE = 0xFF; // Liga resistores Pull ups da porta A
 PTBPE = 0xFF; // Liga resistores Pull ups da porta B
 SOPT1_COPE=0; // Desabilita módulo COP (WDT)
 IRQSC_IRQPE=1; //Liga o pino PTA5 como interrupção
 IRQSC_IRQPDD=0; //Mantém o resistor Pull up no pino IRQ
 IRQSC_IRQMOD=0; //Seleciona IRQ por borda de descida
 IRQSC_IRQIE=1; //Habilita parcialmente a interrupção IRQ
 _asm CLI; //Habilita globalmente as interrupções
 
 PTBDD_PTBDD6 = 1; // Configura PTB6 como saída (LED1)
 PTBDD_PTBDD7 = 1; // Configura PTB7 como saída (LED2)

 for(;;) // Início do loop eterno
 {
 if(!FlagIrq)
 {
 passo ++;
 }
 
 voltas = passo/20;
 Delay(10000); // atraso aproximado 1 segundo
 rpm = voltas/60;


 if (rpm >=300) 
 {
 PTBD_PTBD6 = 1; // Desliga o LED1
 PTBD_PTBD7 = 0; // Liga o LED2
 }
 else
 {
 PTBD_PTBD6 = 0; // Liga o LED1
 PTBD_PTBD7 = 1; // Desliga o LED 
 }
 
 
 } // Fim do loop eterno
}

void Delay(long t)
{
 while (t--)
 continue;
}
 

void interrupt isr_irq(void)
{
 IRQSC_IRQACK=1; // Limpa flag do IRQ
 FlagIrq = !FlagIrq;
} 

A ideia é : o disco do encoder tem 20 furos, então a cada 20 pulsos será contada uma volta, após 1s quando dividir o numero de voltas por 60 eu teria o valor em rpm, mas não está funcionando.

 

 

Componentes usados : https://www.eletrogate.com/sensor-de-velocidade-encoder

                                          https://produto.mercadolivre.com.br/MLB-960364033-roda-pneu-motor-dc-3-a-6v-com-reducao-robotica-arduino-_JM

Editado por gbarrosp7

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sabe o que o processador faz durante um delay? Simplesmente espera o tempo passar, mais nada. Se necessita montar um cronômetro para ter base de tempo, use o timer. Ajuste-o para ter sua base de tempo e use a flag de saída como interrupção. Sem estar com os braços cruzados pelo efeito da função delay o processador conseguirá contar os pulsos. Por ocasião do disparo da flag aí então se faz as continhas para ver quanto deu de RPM.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×