Created
May 27, 2017 10:34
-
-
Save neuroprod/f0dae827451fd74da729476f4b0e72df to your computer and use it in GitHub Desktop.
Arduino brushless motor driver
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// BCMotor.h | |
// RollingCube | |
// | |
// Created by Kris Temmerman on 03/10/15. | |
// | |
// | |
#ifndef BCMotorCube_h | |
#define BCMotorCube_h | |
#include <Arduino.h> | |
class BCMotorCube | |
{ | |
int An; | |
int Ap; | |
int Bn; | |
int Bp; | |
int Cn; | |
int Cp; | |
int Ha; | |
int Hb; | |
int Hc; | |
int currentHallState; | |
public: | |
BCMotorCube(){} | |
int power; | |
bool reverse; | |
int speedCount; | |
void setPins(int _Ap,int _An,int _Bp,int _Bn,int _Cp, int _Cn ,int _Ha, int _Hb, int _Hc ) | |
{ | |
Ap = _Ap; | |
An = _An; | |
Bp = _Bp; | |
Bn = _Bn; | |
Cp = _Cp; | |
Cn = _Cn; | |
pinMode (Ap,OUTPUT); | |
pinMode (Bp,OUTPUT); | |
pinMode (Cp,OUTPUT); | |
pinMode (An,OUTPUT); | |
pinMode (Bn,OUTPUT); | |
pinMode (Cn,OUTPUT); | |
Ha=_Ha; | |
Hb=_Hb; | |
Hc=_Hc; | |
pinMode(Ha, INPUT); | |
pinMode(Hb, INPUT); | |
pinMode(Hc, INPUT); | |
reverse =false; | |
currentHallState = -1; | |
speedCount =0; | |
power =0; | |
} | |
int getSpeed() | |
{ | |
int s =speedCount; | |
speedCount =0; | |
return s; | |
} | |
void setPower(int _power) | |
{ | |
power = _power; | |
currentHallState = -1; | |
if(power==0) | |
{ | |
analogWrite (Bn ,0); | |
analogWrite (An ,0); | |
analogWrite (Cn ,0); | |
digitalWrite (Ap ,HIGH); | |
digitalWrite (Cp ,HIGH); | |
digitalWrite (Bp ,HIGH); | |
} | |
} | |
void testHall(String motor) | |
{ | |
int hallState =getHallState(); | |
if( hallState!= currentHallState ) | |
{ | |
Serial.print(motor+ ": "); | |
Serial.println(hallState); | |
currentHallState =hallState; | |
} | |
} | |
void update() | |
{ | |
if(power==0)return; | |
int hallState =getHallState(); | |
if( hallState!= currentHallState ) | |
{ | |
if(reverse) | |
{ | |
if(hallState<currentHallState) speedCount--; | |
int s = hallState-3; | |
if(s<0)s+=6; | |
setloopState(s); | |
} | |
else | |
{ | |
if(hallState>currentHallState) speedCount++; | |
setloopState(hallState); | |
} | |
currentHallState =hallState; | |
} | |
} | |
int getHallState( ) | |
{ | |
bool vHa =digitalRead(Ha); | |
bool vHb =digitalRead(Hb); | |
bool vHc =digitalRead(Hc); | |
int hallState; | |
if(vHa && vHb ){hallState=1;} | |
else if(vHa && vHc ){hallState=5;} | |
else if(vHb && vHc ){hallState=3;} | |
else if(vHa ){hallState=0;} | |
else if(vHb ){hallState=2;} | |
else if(vHc ){hallState=4;} | |
return hallState; | |
} | |
void setloopState(int loopState) | |
{ | |
switch (loopState) | |
{ | |
case 0: | |
analogWrite (Bn ,0); | |
analogWrite (An ,0); | |
digitalWrite (Cp ,HIGH); | |
digitalWrite (Bp ,HIGH); | |
//Ap && Cn open | |
digitalWrite (Ap ,LOW); | |
analogWrite (Cn ,power); | |
break; | |
case 1: | |
digitalWrite (Bp ,HIGH); | |
digitalWrite (Cp ,HIGH); | |
analogWrite (An ,0); | |
analogWrite (Cn ,0); | |
//Ap && Bn open | |
digitalWrite (Ap ,LOW); | |
analogWrite (Bn ,power); | |
break; | |
case 2: | |
analogWrite (Cn ,0); | |
analogWrite (An ,0); | |
digitalWrite (Bp ,HIGH); | |
digitalWrite (Ap ,HIGH); | |
//Cp && Bn open | |
digitalWrite (Cp ,LOW); | |
analogWrite (Bn ,power); | |
break; | |
case 3: | |
digitalWrite (Bp ,HIGH); | |
digitalWrite (Ap ,HIGH); | |
analogWrite (Cn ,0); | |
analogWrite (Bn ,0); | |
//Cp && An open | |
digitalWrite (Cp ,LOW); | |
analogWrite (An ,power); | |
break; | |
case 4: | |
analogWrite (Cn ,0); | |
analogWrite (Bn ,0); | |
digitalWrite (Ap ,HIGH); | |
digitalWrite (Cp ,HIGH); | |
//Bp && An open | |
digitalWrite (Bp ,LOW); | |
analogWrite (An ,power); | |
break; | |
case 5: | |
digitalWrite (Ap ,HIGH); | |
digitalWrite (Cp ,HIGH); | |
analogWrite (Bn ,0); | |
analogWrite (An ,0); | |
//Bp && Cn open | |
digitalWrite (Bp ,LOW); | |
analogWrite (Cn ,power); | |
break; | |
default: | |
break; | |
} | |
} | |
}; | |
#endif /* BCMotorCube_h */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment