C1 - Partida Estrela/Triângulo

MicrocontroladorPICPIC16F887MPLABX-XC8SimulIDE

Partida de Motor Trifásico

Objetivo

Simular uma partida estrela/triângulo de motor trifásico.

Conteúdo

  • Estrutura condicional switch case;
  • Máquina de estados.

Circuito (Hardware)

Figura 1: Partida Estrela-Triângulo para motor trifásico
circuito

Programa (Firmware)

Figura 2: Árvore de diretório do projeto
circuito

Biblioteca local partida Estrela-Triângulo

#include <xc.h>

void pet_init( void )
{
    TRISDbits.TRISD7 = 0;
    TRISDbits.TRISD6 = 0;
    TRISDbits.TRISD5 = 0;
    TRISDbits.TRISD1 = 1;
    TRISDbits.TRISD0 = 1;
    
    PORTDbits.RD7 = 0;
    PORTDbits.RD6 = 0;
    PORTDbits.RD5 = 0;
}

void pet_k1_set( void )
{
    PORTDbits.RD5 = 1;
}

void pet_k1_reset( void )
{
    PORTDbits.RD5 = 0;
}

void pet_k2_set( void )
{
    PORTDbits.RD6 = 1;
}

void pet_k2_reset( void )
{
    PORTDbits.RD6 = 0;
}

void pet_k3_set( void )
{
    PORTDbits.RD7 = 1;
}

void pet_k3_reset( void )
{
    PORTDbits.RD7 = 0;
}


char pet_s1( void )
{
    return( !PORTDbits.RD1 );
}

char pet_s0( void )
{
    return( !PORTDbits.RD0 );
}
#ifndef PARTIDA_ESTRELA_TRIANGULO_H
#define PARTIDA_ESTRELA_TRIANGULO_H

void pet_init( void );
void pet_k1_set( void );
void pet_k1_reset( void );
void pet_k2_set( void );
void pet_k2_reset( void );
void pet_k3_set( void );
void pet_k3_reset( void );
char pet_s1( void );
char pet_s0( void );

#endif

Programa principal

/*
 * File:   main.c
 * Author: josewrpereira
 *
 * Created on 20 April 2021, 20:28
 * 
 * IDE:                 MPLAB X IDE v5.45
 * Compiler:            XC8 v2.31
 * Operating System:    Debian GNU/Linux bullseye/sid
 * Kernel:              Linux 5.10.0-5-amd64
 * Architecture:        x86-64
 * 
 * Objetivo: 
 *      Simular uma partida estrela/triângulo de motor trifásico.
 * 
 * nº Pinos| PORT |Conexão
 *  11,32  | VDD  | Alimentação (Vcc/+5V)
 *  12,31  | VSS  | Alimentação (GND/0V)
 * 
 *  30     | RD7  | Contator K1: Comum (source)
 *  29     | RD6  | Contator K2: Triângulo (source)
 *  28     | RD5  | Contator K3: Estrela (source)
 * 
 *  19     | RD0  | Botão Pulsador Desligar (pullUp)
 *  20     | RD1  | Botão Pulsador Ligar (pullUp)
 * 
 */

#include "config.h"
#include <xc.h>
#include "delay.h"
#include "partida_estrela_triangulo.h"

void main(void)
{
    char estado = 0;
    int tempo;
    
    pet_init();
    
    while( 1 )
    {
        switch( estado )
        {
            case 0:
                    pet_k3_reset();
                    pet_k2_reset();
                    pet_k1_reset();
                    estado = 1;
                    break;
            case 1:
                    if( pet_s1() )
                    {
                        estado = 2;
                    }
                    break;
            case 2:
                    pet_k1_set();
                    pet_k3_set();
                    tempo = 5000;
                    estado = 3;
                    break;
            case 3:
                    delay(1);
                    --tempo;
                    if( tempo == 0 )
                        estado = 4;
                    if( pet_s0() )
                        estado = 0;
                    break;
            case 4:
                    pet_k3_reset();
                    pet_k2_set();
                    estado = 5;
                    break;
            case 5:
                    if( pet_s0() )
                        estado = 0;
                    break;
        }
    }
}

Agora é a sua vez!

Crie o seu projeto, copie o código, execute-o, procure os erros, arrume-os, seja resiliente, leia novamente a explicação, busque outras fontes, pergunte, responda, faça alterações conscientes no código, explore, divirta-se.

Ficou alguma dúvida, entre em contato.

Bom trabalho!


« C1 - Semáforo com Máquina de Estados « C1 - Partida Estrela/Triângulo » C1 - Display de 7 segmentos »


Voltar