Code zur Erfassung der Drehzahlen
Dependencies: mbed-dev
Diff: main.cpp
- Revision:
- 0:9eba4fa208fb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed May 10 09:35:28 2017 +0000 @@ -0,0 +1,84 @@ +#include "mbed.h" + +//AnalogOut aout1(PA_5); //A4 Motor 1 +//AnalogOut aout2(PA_6); //A5 Motor 2 + +InterruptIn rising2(D3); //Inkrementalgeber Spur A Motor 1 +//DigitalIn direction2(D2); //Inkrementalgeber Spur B Motor 1 +InterruptIn rising1(D8); //Inkrementalgeber Spur A Motor 2 +//DigitalIn direction1(D9); //Inkrementalgeber Spur B Motor 2 + +Timer t1; //Timer für den Inkrementalgeber des Motor 1 + +int t_period1 = 0; // This is the period between interrupts in microseconds +float t_freq1 = 0; // Umrechnung in Frequenz +int calculation1; // Kennlinien Berechnung +int calculation2; +int t_period2 = 0; // This is the period between interrupts in microseconds +float t_freq2 = 0; // Umrechnung in Frequenz +int tneu1,tneu2, tdiff1, tdiff2, talt1, talt2; + +void extTrigger1(); +void extTrigger2(); + +int main() +{ + RCC->APB1ENR |= 0x24000000; // Enable Interface clock for DAC1 and DAC2 + GPIOA->MODER |= 0x00003f00; // MODE PortA, PA4 PA5 & PA6 are analog! + DAC->CR |= 0x00030003; // DAC control reg, both channels ON + DAC2->CR |= 0x00000003; // DAC2 control reg channel 1 ON + + wait(0.1); + + rising1.mode(PullDown); + rising1.rise(&extTrigger1); + rising2.mode(PullDown); + rising2.rise(&extTrigger2); + t1.start(); + + while(1) + { + //printf("tdiff1: %d \n", tdiff1); + //printf("tdiff2: %d \n", tdiff2); + t_freq1 = (1.0/((float)tdiff1)*(1000000.0/256.0)); + t_freq2 = (1.0/((float)tdiff2)*(1000000.0/256.0)); + calculation1 = (((0.66f*t_freq1+1.65f)/3.3f)*4095.0f); + if (calculation1 >= 4095) + { + calculation1 = 4095; + } + DAC2->DHR12R1 = calculation1; + //printf("Motor 1: %.2f Hz %i Bitwert\n",t_freq1, calculation1); + + calculation2 = (((0.66f*t_freq2+1.65f)/3.3f)*4095.0f); + if (calculation2 >= 4095) + { + calculation2 = 4095; + } + //printf("Motor 2: %.2f Hz %i Bitwert\n",t_freq2, calculation2); + if (calculation2 >= 4095000){ printf("a");} //Printf Funktion wird gebracuht damit das Programm Ordnungsgemäß arbeitet + DAC->DHR12R2 = calculation2; + } +} + +void extTrigger1() +{ + tneu1 = t1.read_us(); + tdiff1 = tneu1 - talt1; + //printf("tdiff1: %d \n", tdiff1); + if (tdiff1 > 0) + { + talt1=tneu1; + } +} + +void extTrigger2() +{ + tneu2 = t1.read_us(); + tdiff2 = tneu2 - talt2; + //printf("tdiff2: %d \n", tdiff2); + if (tdiff2 > 0) + { + talt2=tneu2; + } +} \ No newline at end of file