Biblioteka za upravljanje bipolarnim step motorom

bmotor.cpp

Committer:
mario_meh
Date:
2017-02-08
Revision:
0:ccc31f6eba34

File content as of revision 0:ccc31f6eba34:

#include "mbed.h"
#include "bmotor.h"

int pola[8][6] = {{1,0,1,0,1,1}, {0,0,0,0,1,1}, {1,1,0,0,1,1}, {1,1,0,0,0,0}, {1,1,0,1,0,1}, {0,0,0,1,0,1}, {1,0,1,1,0,1}, {1,0,1,0,0,0}};
int brzina = 2400;
volatile int kreni = 0;
volatile int _gore = 8;
volatile int _dolje = 0;
int okretaja = 520;

Bipolar::Bipolar() : ENA(PTB9),IN1(PTC1),IN2(PTC2),IN3(PTE21),IN4(PTE20),ENB(PTB10)

{
    startSM();
    b_t.start();    
    b_ticker.attach_us(this, &Bipolar::ciklusSM, brzina);    
}

void Bipolar::goreDolje(int y) {
    static uint8_t i = 0;
    if(b_t.read_us() > brzina*0.5) {
        
        switch(i) {
            case 0:
                ENA = pola[y][0];
                i++;
            case 1:
                IN1 = pola[y][1];
                i++;
            case 2:
                IN2 = pola[y][2];
                i++;
            case 3:
                IN3 = pola[y][3];
                i++;
            case 4:
                IN4 = pola[y][4];
                i++;
            case 5:
                ENB = pola[y][5];
                i = 0;
            default:
                i = 0;
        }
        b_t.reset();
    } 
}

void Bipolar::potez() {
    if(b_poz.p_gore == 1) {
        goreDolje(--_gore);
        if(_gore == 0) {
            _gore = 8;
        }
    }
    if(b_poz.p_dolje == 1) {
        goreDolje(_dolje++);
        if(_dolje == 8) {
            _dolje = 0;
        }
    }
}

void Bipolar::ciklusSM() {
    startSM();
    for(int a = 0; a < okretaja; a++) {
        potez();
        if(a == (okretaja - 1)) {
            b_poz.done = true;
        }
    }
    stopSM();
    kreni = 0;
}

void Bipolar::startSM() {
    ENA = 0;
    IN1 = 0;
    IN2 = 0;
    IN3 = 0;
    IN4 = 0;
    ENB = 0;
}

void Bipolar::stopSM() {
    ENA = 1;
    IN1 = 1;
    IN2 = 1;
    IN3 = 1;
    IN4 = 1;
    ENB = 1;
}