Testprogram for TMC2209-Library. Uses Speed-Control via VACTUAL instead of Step/Dir

Dependencies:   TMCStepper mRotaryEncoder-os

main.cpp

Committer:
charly
Date:
2021-03-16
Revision:
3:209a9c414f54
Parent:
2:94c5b3f09463
Child:
4:12bfa2c1729f

File content as of revision 3:209a9c414f54:

#include "mbed.h"
#include "platform/mbed_thread.h"
#include "TMCStepper.h"

/*
 Testprogram for TMCStepper-Library
 TMCStepper based on https://github.com/teemuatlut/TMCStepper for Arduino
 by https://github.com/teemuatlut
 +++++
 Tested with https://github.com/bigtreetech/BIGTREETECH-TMC2209-V1.2
*/


DigitalOut ledDir(LED2);
//Virtual serial port over USB with 15200 baud 8N1
static BufferedSerial host(USBTX, USBRX,115200);

// hardware parameters:
// MOTOR Steps per Revolution ( 1/8 Microsteps, 200Steps per Rev / 1.8 degrees per FullStep)
#define MSPR 1600
// Gear Ratio
#define GR 288

#define DRIVER_ADDRESS 0b00 // TMC2209 Driver address according to MS1 and MS2
#define R_SENSE 0.11f   // R-Sense in OHM.Match to your driver
#define MICROSTEPS 128  // # of microsteps
#define RMSCURRENT 500  // RMS current of Stepper Coil in mA

// A TMCStepper-object with UART and given address and R-Sense
//RX, TX, RS, Addr 
TMC2209Stepper stepper(p14, p13, R_SENSE, DRIVER_ADDRESS);

// Assumes little endian
void printBits(size_t const size, void const * const ptr)
{
    unsigned char *b = (unsigned char*) ptr;
    unsigned char byte;
    int i, j;
//    puts("#");
    for (i = size-1; i >= 0; i--) {
        for (j = 7; j >= 0; j--) {
            byte = (b[i] >> j) & 1;
            printf("%u", byte);
        }
    }
//    puts("#");
}
 
 int main()
 {
    printf("\r\nConnected to mbed\r\n");
    stepper.begin();                    // UART: Init SW UART (if selected) with default baudrate
    stepper.toff(3);                    // Enables driver in software - 3, 5 ????
    stepper.rms_current(RMSCURRENT);    // Set motor RMS current in mA / min 500 for 24V/speed:3000
                                        // 1110, 800
    stepper.microsteps(MICROSTEPS);   // Set microsteps to 1:Fullstep ... 256: 1/256th
    stepper.en_spreadCycle(true);     // Toggle spreadCycle on TMC2208/2209/2224: default false, true: much faster!!!!
    stepper.pwm_autoscale(true);      // Needed for stealthChop
    printf("TMC-Version: %02X\r\n",stepper.version());
    
    bool shaft = false;  //direction CW or CCW
    
    while(1) {
//        printf("TSTEP(): %i\r\n", stepper.TSTEP());
        uint32_t status = stepper.DRV_STATUS();
        printf("DRV_STATUS(): "); printBits(sizeof(status),&status);printf("\r\n");
        uint32_t ioin = stepper.IOIN();        
        printf("IOIN(): "); printBits(sizeof(ioin),&ioin);printf("\r\n");
//        uint32_t otp = stepper.OTP_READ();
//        printf("OTP_READ(): ");printBits(sizeof(otp),&otp);printf("\r\n");
      
        printf("VACTUAL(): %zu \r\n", stepper.VACTUAL());
        // increase
        uint32_t maxspeed = 3000; //max 3400 or 3000
        uint32_t actspeed = 0;
        while (actspeed < maxspeed) {
            actspeed += 200;
            if (actspeed > maxspeed) {
                actspeed = maxspeed;
            }
            printf("actspeed: %i",actspeed);
            stepper.VACTUAL(actspeed*MICROSTEPS);// Set Speed to value
            ThisThread::sleep_for(25ms); //wait
        }
        printf("VACTUAL(): %zu \r\n", stepper.VACTUAL());
        ThisThread::sleep_for(5s); 
        // decrease
        maxspeed = 0;
        while (actspeed > maxspeed) {
            actspeed -= 200;
            if (actspeed < 0) {
                actspeed = 0;
            }
            printf("actspeed: %i",actspeed);
            stepper.VACTUAL(actspeed*MICROSTEPS);// Set Speed to value
            ThisThread::sleep_for(25ms); //wait
        }

//        stepper.VACTUAL(400*MICROSTEPS);// Set Speed to value
        ThisThread::sleep_for(5s); //wait 
        // inverse direction
        shaft = !shaft;
        stepper.shaft(shaft);
        // Read Interace-Count
        printf("IFCNT(): %zu \r\n",stepper.IFCNT());
        printf("...\r\n");
   }
 }