Hi everyone, I 'm going to measure bldc rpm . I have issue with the opto sensor .
I bought a Groove Opto Coupler for Arduino which states 'LOW' when IR led lights on the phototransistor .
Everywhere I find sensor which states 'HIGH' when IR led lights on TR .
What is true code about rpm calculating ?
the program :
unsigned int rpm;
float iin=0.0;
float iout=0.0;
int current=0;
float vout = 0.0;
float vin = 0.0;
float R1 = 100000.0;
float R2 = 10000.0;
int value = 0;
const byte pinStopBTN = A0;
const byte pinStartBTN = A1;
const byte LED1 = 9;
const byte LED2 = 8;
volatile int rpmcount = 0;
unsigned long timeold = 0;
byte startFlag = LOW;
byte StopBTN = LOW;
byte StartBTN = HIGH;
void rpm_func()
{
rpmcount++;
}
void setup(){
pinMode(analogInput, INPUT);
pinMode(currentInput, INPUT);
pinMode(PWMPin,OUTPUT);
pinMode(digitalPin, INPUT);
pinMode(digitalPin2, INPUT);
pinMode(analogPin, INPUT);
attachInterrupt(0, rpm_func, FALLING);
pinMode(pinStartBTN,INPUT);
pinMode(pinStopBTN,INPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
lcd.begin(16, 2);
}
void loop(){
if (!StartBTN) {
digitalWrite(LED1,LOW);
digitalWrite(LED2,HIGH);
startFlag = HIGH;
}
if (!StopBTN) {
digitalWrite(LED1,HIGH);
digitalWrite(LED2,LOW);
startFlag = LOW;
}
StartBTN = digitalRead(pinStartBTN);
StopBTN = digitalRead(pinStopBTN);
{
inputValue = analogRead(inputPin);
inputValue = map(inputValue,0,1023,128 ,255);
analogWrite(PWMPin,inputValue);
if (!startFlag) {
analogWrite(PWMPin,0);
if (rpmcount >= 12) {
detachInterrupt(0);
rpm = (rpmcount * 60000)/(millis() - timeold); Here I might change something
timeold = millis();
rpmcount = 0;
attachInterrupt(0, rpm_func, FALLING);
}
if (millis() - timeold > 1500) {
rpm = 0;
}
value = analogRead(analogInput);
current=analogRead(currentInput);
iout=(current*5)/1024.0;
iin=((iout/10)/0.03);
vout = (value * 5.0) / 1024.0;
vin = vout / (R2/(R1+R2));
if (vin<0.09) {
vin=0.0;
}
lcd.setCursor(0,0 );
lcd.print("I= ");
lcd.print(iin);
lcd.setCursor(0, 1);
lcd.print("V= ");
lcd.print(vin);
lcd.setCursor(8, 0);
lcd.print("RPM=");
lcd.print(rpm);
delay(500); //
}
}
Thank you in advance:)