Code::Blocks PWM I2C



  • Hallo C++ Community,

    Ich programmiere im Moment an einer PWM um 2 DC-Motoren anzusteuern. Dabei soll mein NVIDIA Jetson TX2 an einen Motortreiber angeschlossen werden. Leider hat das Jetson kein PWM Ausgang, sondern nur einen I2C Bus. Pololu Dual VNH5019 Motor Driver Shield for Arduino heißt der Motortreiber.

    Verwendete IDE: Code::Blocks; verwendetes Betriebssystem: Ubuntu 16.04

    Ich komme aber irgendwie nicht mit meinem Programm weiter. Hier der Code für meine PWM bisher:

    void PWM()
    {

    //Defines
    #define pinENA 1 //Enable A
    #define pinENB 2 //Enable B

    #define pinINA1 6 //forward-backward
    #define pinINB1 7 //forward-backward

    #define pinINA2 4 //direction
    #define pinINB2 5 //direction

    #define pwmSteuer 3 // PWM direction
    #define pwmAntrieb 9 //PWM forward-backward

    int file_i2c;
    int length;
    unsigned char buffer[60] = {0};

    //----- OPEN THE I2C BUS -----
    char *filename = (char*)"/dev/i2c-1";
    if ((file_i2c = open(filename, O_RDWR)) < 0)
    {
    //ERROR HANDLING: you can check errno to see what went wrong
    printf("Failed to open the i2c bus");
    return;
    }

    int addr = 0x5a; //<<<<<The I2C address of the slave
    if (ioctl(file_i2c, I2C_SLAVE, addr) < 0)
    {
    printf("Failed to acquire bus access and/or talk to slave.\n");
    //ERROR HANDLING; you can check errno to see what went wrong
    return;
    }

    //----- READ BYTES -----
    length = 4; //<<< Number of bytes to read
    if (read(file_i2c, buffer, length) != length) //read() returns the number of bytes actually read, if it doesn't match then an error occurred (e.g. no response from the device)
    {
    //ERROR HANDLING: i2c transaction failed
    printf("Failed to read from the i2c bus.\n");
    }
    else
    {
    printf("Data read: %s\n", buffer);
    }

    //----- WRITE BYTES -----
    buffer[0] = 0x01;
    buffer[1] = 0x02;
    length = 2; //<<< Number of bytes to write
    if (write(file_i2c, buffer, length) != length) //write() returns the number of bytes actually written, if it doesn't match then an error occurred (e.g. no response from the device)
    {
    /* ERROR HANDLING: i2c transaction failed */
    printf("Failed to write to the i2c bus.\n");
    }
    ...

    Kann mir da jemand weiterhelfen?

    Beste Grüße Marc



  • Was ist denn der Fehler bzw. was ist deine genaue Frage dazu?

    Evtl. solltest du auch besser in einem Arduino-Forum nachfragen...



  • Meine Aufgabe ist es, eine elektronische Deichsel zu programmieren. Das heißt, dass mir ein Auto hinterher fahren soll und dabei einen Abstand von 1m einhalten soll. Dafür habe ich eine Markererkennung geschrieben. Ich klebe mir den Marker auf den Rücken, das Programm erkennt den Marker und folgt diesem dann bzw. mir. Ich bekomme auch den Abstand zwischen der Kamera auf dem Auto, die den Marker erkennt und dem Marker selbst raus. Diesen Abstand kann ich jetzt mit meinem Sollwert (1m) abgleichen. Das ganze wird mit einem PID Regler geregelt und eine PWM soll jetzt die DC-Motoren, die in meinem Auto verbaut sind, ansteuern. Ich programmiere aber nicht mit Arduino.


Log in to reply