int phase1 = 2;
int phase2 = 3;
int phase3 = 4;
int led = 12;
void setup() {
pinMode(led, OUTPUT);
pinMode(phase1, OUTPUT);
pinMode(phase2, OUTPUT);
pinMode(phase3, OUTPUT);
digitalWrite(led, LOW);
}
void loop() {
switchStep(1);
switchStep(2);
switchStep(3);
case 2:
digitalWrite(phase1, LOW);
digitalWrite(phase2, HIGH);
digitalWrite(phase3, LOW);
myDelay(stepLength);
break;
default:
digitalWrite(phase1, LOW);
digitalWrite(phase2, LOW);
digitalWrite(phase3, HIGH);
myDelay(stepLength);
break;
}
void setup(){
Serial.begin(9600);
pinMode(phase1pin, OUTPUT);
pinMode(phase2pin, OUTPUT);
pinMode(phase3pin, OUTPUT);
}
void loop(){
switchStep(1);
switchStep(2);
switchStep(3);
}
void setup(){
Serial.begin(9600);
pinMode(phase1pin, OUTPUT);
pinMode(phase2pin, OUTPUT);
pinMode(phase3pin, OUTPUT);
p1start = micros();
digitalWrite(phase1pin, HIGH);
}
void chkP1(){
unsigned long currentTime = micros();
unsigned long td = currentTime - p1start;
unsigned long refractory = 2.25*holdTime;
if(digitalRead(phase1pin)){
if(td > holdTime){
digitalWrite(phase1pin, LOW);
p1end = currentTime;
}
}else if(td > refractory){
digitalWrite(phase1pin, HIGH);
p1start = currentTime;
}
}
void chkP2(){
unsigned long currentTime = micros();
unsigned long td = currentTime - p1start;
if(digitalRead(phase2pin)){
if(td > 1.75*holdTime || td < 0.75*holdTime){
digitalWrite(phase2pin, LOW);
p2end = currentTime;
}
}else if(td > 0.75*holdTime && td < 1.75*holdTime){
digitalWrite(phase2pin, HIGH);
p2start = currentTime;
}
}
void chkP3(){
unsigned long currentTime = micros();
unsigned long td = currentTime - p1start;
if(digitalRead(phase3pin)){
if(td > 0.25*holdTime && p3start < p1start){
digitalWrite(phase3pin, LOW);
p3end = currentTime;
}
}else if(td > 1.5*holdTime){
digitalWrite(phase3pin, HIGH);
p3start = currentTime;
}
}
void loop(){
chkP1();
chkP2();
chkP3();
delayMicroseconds(100);
if(holdTime >= minHoldTime){
holdTime -= 0.5;
}
}
YANG LAEN:
/*
***** BLDC DRIVER *****
*/
int wait = 10;
int p1 = 2;
int p2 = 3;
int p3 = 4;
char inChar;
void setup() {
pinMode(p1, OUTPUT);
pinMode(p2, OUTPUT);
pinMode(p3, OUTPUT);
Serial.begin(9600);
}
if (Serial.available()){
inChar = (char)Serial.read();
if (inChar == '-'){
wait -=1;
}
else{
wait +=1;
}
Serial.println(wait);
}
digitalWrite(p1, 1);
digitalWrite(p2, 1);
digitalWrite(p3, 0);
delay(wait);
digitalWrite(p1, 1);
digitalWrite(p2, 0);
digitalWrite(p3, 0);
delay(wait);
digitalWrite(p1, 1);
digitalWrite(p2, 0);
digitalWrite(p3, 1);
delay(wait);
digitalWrite(p1, 0);
digitalWrite(p2, 0);
digitalWrite(p3, 1);
delay(wait);
digitalWrite(p1, 0);
digitalWrite(p2, 1);
digitalWrite(p3, 1);
delay(wait);
digitalWrite(p1, 0);
digitalWrite(p2, 1);
digitalWrite(p3, 0);
delay(wait);
}
// Change these until you find your min and max speeds.
float min = 3200;
float max = 50000;
void setup() {
Serial.begin(115200);
pinMode(phase1pin, OUTPUT);
pinMode(phase2pin, OUTPUT);
pinMode(phase3pin, OUTPUT);
}
String direction;
bool running = false;
float status;
void chkP1(int pin){
unsigned long currentTime = micros();
unsigned long td = currentTime - p1start;
unsigned long refractory = 2.25*holdTime;
if(digitalRead(pin)){
if(td > holdTime){
digitalWrite(pin, LOW);
p1end = currentTime;
}
}else if(td > refractory){
digitalWrite(pin, HIGH);
p1start = currentTime;
}
}
running = true;
}
void loop(){
if(Serial.available() > 0)
{
// Read serial input ex. "100 reverse" or "50 forward"
float input_targetSpeed = Serial.readStringUntil(' ').toInt();
if(running) {
if(direction == "forward")
{
chkP1(phase3pin);
chkP2(phase2pin);
chkP3(phase1pin);
}
else if(direction == "reverse")
{
chkP1(phase1pin);
chkP2(phase2pin);
chkP3(phase3pin);
}
delayMicroseconds(100);
if(status == 100)
{
// setupMotor(100, "reverse");
}
}
EDIT:
fix it
ATAU:
unsigned long p1start,
p1end,
p2start,
p2end,
p3start,
p3end;
I'm trying to make it run as fast as possible and I start with this code
(arduino uno):
int pin1 = 2;
int pin2 = 3;
int pin3 = 4;
void setup() {
pinMode(pin1, OUTPUT);
pinMode(pin2, OUTPUT);
pinMode(pin3, OUTPUT);
}
void loop() {
digitalWrite(pin1, HIGH);
digitalWrite(pin2, LOW);
digitalWrite(pin3, LOW);
delay(delay_time);
digitalWrite(pin1, LOW);
digitalWrite(pin2, HIGH);
digitalWrite(pin3, LOW);
delay(delay_time);
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
digitalWrite(pin3, HIGH);
delay(delay_time);
}
The motor runs when delay_time bigger than 50 (it run very slowly of course),
with delay_time smaller it just "vibrate". So how can I make that runs at 7200
rpm?