Hallo zusammen,
nachdem ich es hinbekommen habe bei meinem Arduino Uno den Motor anzusteuern und die Encoderpulse zu lesen, würde ich gerne parallel dazu Gyrodaten aus einem MPU6050 auslesen.
Leider funktioniert aber die Datenübertragung des MPU nicht zur gleichen Zeit.
Könnt ihr mir sagen, was ich falsch mache?
#include <Wire.h> // IIC communication library
#include <MsTimer2.h> // Internal Timer2 for ISR Routine
////////// Nidec 24H677H010 BLDC Motor Variablen ///////////////////////////
const int nidecDirection = 8; // CW/CCW Drehrichtung
const int nidecBrake = 7; // Bremse
const int nidecPWM = 6; // Nidec Motor PWM
float rw, pulseCount,pwmOut,pwmOut2;
///////// Anfang der Integrated Service Routine ISR Zahler Variablen ////////
#define nidecHalleffect 3 // Externer Interrupt für Nidec FG Ausgang 6 Impulse/Umdrehung
volatile long countHall = 0; // Zählt die Pulse des Hall Encoders
///////// Anfang der MPU6050 Variablen //////////////////////////////////////
const int MPU1=0x68;
float AcX1,AcY1,AcZ1,GyX1,GyY1,GyZ1;
void setup() {
//Nidec Motor Control Pins
pinMode(nidecDirection,OUTPUT);
pinMode(nidecPWM,OUTPUT);
pinMode(nidecBrake, OUTPUT);
pinMode(nidecHalleffect, INPUT);
// Initialer Zustand
digitalWrite(nidecDirection,LOW);
analogWrite(nidecPWM,245); // No PWM Signal
digitalWrite(nidecBrake,HIGH); //Bremse an
attachInterrupt(digitalPinToInterrupt(nidecHalleffect), Code_Hall, RISING);
MsTimer2::set(1000, ISR_Routine);
MsTimer2::start(); //start interrupt
Serial.begin(9600);
}
void loop() {
}
void Code_Hall()
{
countHall ++;
}
void ISR_Routine(){
countpulse(); //Encoder Impulse Zählen
MPUCAL();
}
void countpulse(){
rw = countHall; // Counter zu RW zuweisen
countHall = 0; // Counter löschen
pulseCount = rw/6; // 6 Pulse/Umdrehung
Serial.print("Pulsecount = "); Serial.println(pulseCount,5);
}
void MPUCAL(){
Wire.beginTransmission(MPU1);
Wire.write(0x3B);
Wire.endTransmission(true);
Wire.requestFrom(MPU1,12,true);
AcX1=Wire.read()<<8|Wire.read();
AcY1=Wire.read()<<8|Wire.read();
AcZ1=Wire.read()<<8|Wire.read();
GyX1=Wire.read()<<8|Wire.read();
GyY1=Wire.read()<<8|Wire.read();
GyZ1=Wire.read()<<8|Wire.read();
Serial.print(AcX1);
Serial.println();