Code zur Erfassung der Drehzahlen

Dependencies:   mbed-dev

main.cpp

Committer:
David_90210
Date:
2017-05-10
Revision:
0:9eba4fa208fb

File content as of revision 0:9eba4fa208fb:

#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;
    }
}