Konstrukcijski rad Nino Kovačić

Dependencies:   mbed led_Za_KRAJ

Sklop se sastoji od : • 4 tipkala koji su programirani kao hardverski interupti • 1 potenciometar spojen na analogni input • 4 signalne LED diode koje pokazuj status rad • 1 buzer koji je programiran na različite frekvencije zvuka • 2 komada 12VDC elektromotora spojeno preko mosfet sklopa IRF520 • 1 komad NXP LPC1768 mikroupraljvača • 1 napajanje 5VDC 800mA • 1 napajanje 12VDC 2A

DJELOVANJE SKLOPA Pokretanje i zaustavljanje • pritisak tipke start pokreće se odabrani motorčić • odabir motorčića preko tipki „lijevo“ ili „desno“ • Potenciometar odabire brzinu vrtnje • Zaustavljanje motorčića pomoću tipke stop

Signalizacija LED diodama: • Motorčić u radu – pali se zelena LED • Motorčići ne rade – upaljena crvena LED dioda • Lijevi motorčić – lijeva žuta LED dioda • Desni motorčić – desna žuta LED dioda • „Maksimalno vrijeme“ rada treptajuća zelena LED dioda

Signalizacija zvučna: • Svaki pritisak tipke buzzer ispušta kratki zvuk • Dok je bilo koji motorčić u radu buzzer ispušta periodički ponavljajući zvuk

Tipkala su programirana kao hardverski interupti što znače da se u programu nalaze u MAIN dijelu program prije neprekidne WHILE petlje. Ulazi su pomoću jednog timera i 4 zasebne funkcije „debouncani“ tj čeka se 100ms za očitanje pravog stanja tipkala. Očitanje se vrši na padajući brid to jest na spoj prema 0V. Funkcije same po sebi su nužne za funkcioniranje programa te su definirane na početku programa a na kraju program nalaze se njihovi kodovi.

Kroz funkcije napravljeno je različito funkcioniranje buzzera, debounce te PWM upravljanje izlazima za upravljanje motorčićima preko MOSFET sklopa. Mosfet sklop IRF520 se koriti jer su motorčići napajani sa dodatnim napajanjem 12VDC , dok se sami mikro upravljač napaja sa iz USB ili 5VDC. Ticker je iskorišten za periodiko ponavljanje buzzera dok se bilo koji motorčić vrti. Samom sklopu je za vježbu dodano maksimalno vrijeme koliko sklop može raditi. Za potrebe vježbe postavljeno je vrijem od 10sekundi. Nakon istek maksimalnog vremena poziva se klasa u kojoj je isprogramirano blicanje druge zelene LED diode kao pokazatelja da je vrijeme prošlo. Reset maksimalnog vremena obavlja se resetom mikro upravljača.

main.cpp

Committer:
nkovacic
Date:
2020-11-10
Revision:
0:7e85a1ad7266
Child:
1:47811d27625b

File content as of revision 0:7e85a1ad7266:

#include "mbed.h"
#include "led_Za_KRAJ.h"
//tipkala kao interupti
InterruptIn tipstart(p5,PullUp);
InterruptIn tipstop(p6,PullUp);
InterruptIn tiplijevo(p7,PullUp);
InterruptIn tipdesno(p8,PullUp);
//ledice izlazi
DigitalOut ledstart(p25);
DigitalOut ledstop(p26);
DigitalOut ledlijevo(p27);
DigitalOut leddesno(p28);
//potenciometar za brzinu
AnalogIn potbrzina(p15);
//PWM u lijevo
PwmOut PWMlijevo(p21);
//PWM u desno
PwmOut PWMdesno(p22);
//PWM buzzer
PwmOut buzzer(p23);

//definiranje statusa bulovi
volatile  bool vrti=false;
volatile  bool lijevo=false;
volatile  bool desno=true;

volatile float brzina=0;

//uključene funkcije
void Buzz(void); //za buzzer
void BuzzTIPKA(void); //za buzzer
void vrtiL(void); //pwm lijevi
void vrtiD(void); //pwm desni
void kreni(void); //za debouncanje
void stani(void); //za debouncanje
void LEFT(void); //za debouncanje
void RIGHT(void); //za debouncanje

//Ticker
Ticker tStart;

//Timer
Timer debounce;
Timer tKraj;

led_Za_KRAJ led(p29); //definirane pina ledice za kraj

int main()
{

//pokretanje debounc timera i interupata

    debounce.start();
    tipstart.fall(&kreni);
    tipstop.fall(&stani);
    tiplijevo.fall(&LEFT);
    tipdesno.fall(&RIGHT);

    tKraj.start();

//loop petlja

    while(1) {

//kreni stani vrti logika

        if(tKraj.read_ms()>10000) {
            

            led.ledblink(5);   //poziva klasu led_Za_KRAJ

        }



        if(vrti==true) {
            ledstop=0;
            ledstart=1;

            if(lijevo==true&desno==false) {
                ledlijevo=1;
                leddesno=0;

                vrtiL();

            } else if(lijevo==false&desno==true) {
                ledlijevo=0;
                leddesno=1;

                vrtiD();
            }

        } else if(vrti==false) {
            ledstop=1;
            ledstart=0;
            PWMdesno=0;
            PWMlijevo=0;

            if(lijevo==true&desno==false) {
                ledlijevo=1;
                leddesno=0;

            } else if(lijevo==false&desno==true) {
                ledlijevo=0;
                leddesno=1;
            }


        }
    }
}

//moje funkcije
void vrtiL()
{

    brzina=potbrzina;
    PWMlijevo.period(0.001);
    PWMlijevo=brzina;
    PWMdesno=0;
    wait(0.1);
}

void vrtiD()
{

    brzina=potbrzina;
    PWMdesno.period(0.001);
    PWMdesno=brzina;
    PWMlijevo=0;
    wait(0.1);
}

void Buzz()
{
    buzzer.period(0.002);
    buzzer=0.5;
    wait(0.2);
    buzzer=0;
}

void BuzzTIPKA()
{
    buzzer.period(0.001);
    buzzer=0.5;
    wait(0.2);
    buzzer=0;
}

//debouncanje funckije
void kreni()
{
    if(debounce.read_ms()>100) {
        vrti=true;
        BuzzTIPKA();
        tStart.attach(&Buzz, 2); //pokretanje buzera 1sec
        debounce.reset();
    }
}
void stani()
{
    if(debounce.read_ms()>100) {
        vrti=false;
        BuzzTIPKA();
        tStart.detach(); //zaustavljanje buzzera
        debounce.reset();
    }
}
void LEFT()
{
    if(debounce.read_ms()>100) {
        lijevo=true;
        desno=false;
        BuzzTIPKA();
        debounce.reset();
    }
}
void RIGHT()
{
    if(debounce.read_ms()>100) {
        lijevo=false;
        desno=true;
        BuzzTIPKA();
        debounce.reset();
    }
}