Testprogram for TMC2209-Library. Uses Speed-Control via VACTUAL instead of Step/Dir
Dependencies: TMCStepper mRotaryEncoder-os
Diff: main.cpp
- Revision:
- 0:3f4cfbeda9d3
- Child:
- 1:60419aa0c030
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Feb 04 19:46:56 2021 +0000
@@ -0,0 +1,93 @@
+/* mbed Microcontroller Library
+ * Copyright (c) 2019 ARM Limited
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+#include "mbed.h"
+#include "platform/mbed_thread.h"
+
+
+DigitalOut ledDir(LED2);
+//Virtual serial port over USB with 15200 baud 8N1
+static BufferedSerial host(USBTX, USBRX,115200);
+
+
+// apply number of steps, direction, speed and
+// a linear acceleration/deceleration to a Stepper Motor Controller
+
+#include "TMCStepper.h"
+
+// 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 // Match to your driver
+#define MICROSTEPS 64
+
+//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(5); // Enables driver in software
+ stepper.rms_current(600); // Set motor RMS current in mA
+ stepper.microsteps(MICROSTEPS); // Set microsteps to 1:Fullstep ... 256: 1/256th
+ stepper.en_spreadCycle(false); // Toggle spreadCycle on TMC2208/2209/2224
+ stepper.pwm_autoscale(true); // Needed for stealthChop
+ printf("TMC-Version: %02X\r\n",stepper.version());
+
+ 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
+ int maxspeed = 1600;
+ int actspeed = 0;
+ while (actspeed < maxspeed) {
+ actspeed += 200;
+ printf("actspeed: %i",actspeed);
+ stepper.VACTUAL(actspeed*MICROSTEPS);// Set Speed to value
+ ThisThread::sleep_for(20ms); //wait
+ }
+ printf("VACTUAL(): %zu \r\n", stepper.VACTUAL());
+ ThisThread::sleep_for(10s);
+ // decrease
+ maxspeed = 0;
+ while (actspeed > maxspeed) {
+ actspeed -= 200;
+ printf("actspeed: %i",actspeed);
+ stepper.VACTUAL(actspeed*MICROSTEPS);// Set Speed to value
+ ThisThread::sleep_for(20ms); //wait
+ }
+*/
+ stepper.VACTUAL(400*MICROSTEPS);// Set Speed to value
+ ThisThread::sleep_for(5s); //wait
+ printf("loop...\r\n");
+ }
+ }
\ No newline at end of file