Промежуточный
parent
6ba575dfdc
commit
018c4cf2a9
337
M5_TMC2130.ino
337
M5_TMC2130.ino
|
@ -1,125 +1,256 @@
|
||||||
#define EN_PIN 17 // D1
|
// #define EN_PIN 17 // D1
|
||||||
#define DIR_PIN 3 // D2
|
// #define DIR_PIN 3 // D2
|
||||||
#define STEP_PIN 1 // D3
|
// #define STEP_PIN 1 // D3
|
||||||
#define CS_PIN 16 // D8
|
// #define CS_PIN 16 // D8
|
||||||
#define MOSI_PIN 23 // D7
|
// #define MOSI_PIN 23 // D7
|
||||||
#define MISO_PIN 19 // D6
|
// #define MISO_PIN 19 // D6
|
||||||
#define SCK_PIN 18 // D5
|
// #define SCK_PIN 18 // D5
|
||||||
|
|
||||||
// bool dir = true;
|
/*
|
||||||
// #include <TMC2130Stepper.h>
|
* You can control the rotation speed with
|
||||||
// TMC2130Stepper driver = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN, CS_PIN, MOSI_PIN, MISO_PIN, SCK_PIN);
|
* 0 Stop
|
||||||
|
* 1 Resume
|
||||||
|
* + Speed up
|
||||||
|
* - Slow down
|
||||||
|
*/
|
||||||
|
|
||||||
// void setup() {
|
#define MAX_SPEED 40 // In timer value
|
||||||
// Serial.begin(115200);
|
#define MIN_SPEED 1000
|
||||||
// while(!Serial);
|
|
||||||
// Serial.println("Start...");
|
|
||||||
// driver.begin(); // Initiate pins and registeries
|
|
||||||
// driver.rms_current(1200); // Set stepper current to 600mA. The command is the same as command TMC2130.setCurrent(600, 0.11, 0.5);
|
|
||||||
// driver.stealthChop(1); // Enable extremely quiet stepping
|
|
||||||
// driver.microsteps(0);
|
|
||||||
// Serial.println(driver.microsteps()); // shows microsteps setting
|
|
||||||
// digitalWrite(EN_PIN, LOW);
|
|
||||||
|
|
||||||
// Serial.print("DRV_STATUS=0b");
|
#define STALL_VALUE 0 // [-64..63]
|
||||||
// Serial.println(driver.DRV_STATUS(), BIN);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// void loop() {
|
// Note: You also have to connect GND, 5V and VM.
|
||||||
// digitalWrite(STEP_PIN, HIGH);
|
// A connection diagram can be found in the schematics.
|
||||||
// //delayMicroseconds(10);
|
#define EN_PIN 17 // D1
|
||||||
// delay(50);
|
#define DIR_PIN 3 // D2
|
||||||
// digitalWrite(STEP_PIN, LOW);
|
#define STEP_PIN 1 // D3
|
||||||
// //delayMicroseconds(10);
|
#define CS_PIN 16 // D8
|
||||||
// delay(50);
|
|
||||||
// uint32_t ms = millis();
|
|
||||||
// static uint32_t last_time = 0;
|
|
||||||
// if ((ms - last_time) > 3000) {
|
|
||||||
// if (dir) {
|
|
||||||
// Serial.println("Dir -> 0");
|
|
||||||
// driver.shaft_dir(0);
|
|
||||||
// } else {
|
|
||||||
// Serial.println("Dir -> 1");
|
|
||||||
// driver.shaft_dir(1);
|
|
||||||
// }
|
|
||||||
// dir = !dir;
|
|
||||||
// last_time = ms;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
bool dir = true;
|
|
||||||
#define TMC2130DEBUG
|
|
||||||
#include <TMC2130Stepper.h>
|
#include <TMC2130Stepper.h>
|
||||||
// Soft SPI
|
#include <TMC2130Stepper_REGDEFS.h>
|
||||||
TMC2130Stepper driver = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN, CS_PIN, MOSI_PIN, MISO_PIN, SCK_PIN);
|
TMC2130Stepper driver = TMC2130Stepper(CS_PIN);
|
||||||
// Hard SPI
|
|
||||||
//TMC2130Stepper driver = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN, CS_PIN);
|
bool vsense;
|
||||||
|
|
||||||
|
uint16_t rms_current(uint8_t CS, float Rsense = 0.11)
|
||||||
|
{
|
||||||
|
return (float)(CS + 1) / 32.0 * (vsense ? 0.180 : 0.325) / (Rsense + 0.02) / 1.41421 * 1000;
|
||||||
|
}
|
||||||
|
|
||||||
void setup()
|
void setup()
|
||||||
{
|
{
|
||||||
Serial.begin(9600);
|
//init serial port
|
||||||
while (!Serial)
|
{
|
||||||
;
|
Serial.begin(250000); //init serial port and set baudrate
|
||||||
Serial.println("Start...");
|
while (!Serial)
|
||||||
driver.begin(); // Initiate pins and registeries
|
; //wait for serial port to connect (needed for Leonardo only)
|
||||||
driver.rms_current(1200); // Set stepper current to 600mA. The command is the same as command TMC2130.setCurrent(600, 0.11, 0.5);
|
Serial.println("\nStart...");
|
||||||
driver.microsteps(16);
|
pinMode(EN_PIN, OUTPUT);
|
||||||
driver.stealthChop(1); // Enable extremely quiet stepping
|
pinMode(DIR_PIN, OUTPUT);
|
||||||
|
pinMode(STEP_PIN, OUTPUT);
|
||||||
|
pinMode(CS_PIN, OUTPUT);
|
||||||
|
digitalWrite(EN_PIN, HIGH); //deactivate driver (LOW active)
|
||||||
|
digitalWrite(DIR_PIN, LOW); //LOW or HIGH
|
||||||
|
digitalWrite(STEP_PIN, LOW);
|
||||||
|
digitalWrite(CS_PIN, HIGH);
|
||||||
|
SPI.begin();
|
||||||
|
pinMode(MISO, INPUT_PULLUP);
|
||||||
|
}
|
||||||
|
|
||||||
|
//set TMC2130 config
|
||||||
|
{
|
||||||
|
driver.push();
|
||||||
|
driver.toff(3);
|
||||||
|
driver.tbl(1);
|
||||||
|
driver.hysteresis_start(4);
|
||||||
|
driver.hysteresis_end(-2);
|
||||||
|
driver.rms_current(600); // mA
|
||||||
|
driver.microsteps(16);
|
||||||
|
driver.diag1_stall(1);
|
||||||
|
driver.diag1_active_high(1);
|
||||||
|
driver.coolstep_min_speed(0xFFFFF); // 20bit max
|
||||||
|
driver.THIGH(0);
|
||||||
|
driver.semin(5);
|
||||||
|
driver.semax(2);
|
||||||
|
driver.sedn(0b01);
|
||||||
|
driver.sg_stall_value(STALL_VALUE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set stepper interrupt
|
||||||
|
{
|
||||||
|
cli(); //stop interrupts
|
||||||
|
TCCR1A = 0; // set entire TCCR1A register to 0
|
||||||
|
TCCR1B = 0; // same for TCCR1B
|
||||||
|
TCNT1 = 0; //initialize counter value to 0
|
||||||
|
OCR1A = 256; // = (16*10^6) / (1*1024) - 1 (must be <65536)
|
||||||
|
// turn on CTC mode
|
||||||
|
TCCR1B |= (1 << WGM12);
|
||||||
|
// Set CS11 bits for 8 prescaler
|
||||||
|
TCCR1B |= (1 << CS11); // | (1 << CS10);
|
||||||
|
// enable timer compare interrupt
|
||||||
|
TIMSK1 |= (1 << OCIE1A);
|
||||||
|
sei(); //allow interrupts
|
||||||
|
}
|
||||||
|
|
||||||
|
//TMC2130 outputs on (LOW active)
|
||||||
digitalWrite(EN_PIN, LOW);
|
digitalWrite(EN_PIN, LOW);
|
||||||
|
|
||||||
Serial.print("DRV_STATUS=0b");
|
vsense = driver.vsense();
|
||||||
Serial.println(driver.DRV_STATUS(), BIN);
|
|
||||||
}
|
}
|
||||||
bool isKilled = false;
|
|
||||||
|
|
||||||
|
|
||||||
|
ISR(TIMER1_COMPA_vect)
|
||||||
|
{
|
||||||
|
PORTF |= 1 << 0;
|
||||||
|
PORTF &= ~(1 << 0);
|
||||||
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
if (driver.checkOT())
|
static uint32_t last_time = 0;
|
||||||
|
uint32_t ms = millis();
|
||||||
|
|
||||||
|
while (Serial.available() > 0)
|
||||||
{
|
{
|
||||||
if (!isKilled)
|
int8_t read_byte = Serial.read();
|
||||||
{
|
if (read_byte == '0')
|
||||||
Serial.print("Overheat flag triggered: ");
|
|
||||||
Serial.println(driver.getOTPW(), DEC);
|
|
||||||
driver.TPOWERDOWN();
|
|
||||||
isKilled = true;
|
|
||||||
Serial.println("Program stopped");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
delay(1000);
|
TIMSK1 &= ~(1 << OCIE1A);
|
||||||
|
digitalWrite(EN_PIN, HIGH);
|
||||||
}
|
}
|
||||||
|
else if (read_byte == '1')
|
||||||
|
{
|
||||||
|
TIMSK1 |= (1 << OCIE1A);
|
||||||
|
digitalWrite(EN_PIN, LOW);
|
||||||
|
}
|
||||||
|
else if (read_byte == '+')
|
||||||
|
if (OCR1A > MAX_SPEED)
|
||||||
|
OCR1A -= 20;
|
||||||
|
else if (read_byte == '-')
|
||||||
|
if (OCR1A < MIN_SPEED)
|
||||||
|
OCR1A += 20;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if ((ms - last_time) > 100) //run every 0.1s
|
||||||
{
|
{
|
||||||
digitalWrite(STEP_PIN, HIGH);
|
last_time = ms;
|
||||||
delayMicroseconds(10);
|
uint32_t drv_status = driver.DRV_STATUS();
|
||||||
digitalWrite(STEP_PIN, LOW);
|
Serial.print("0 ");
|
||||||
delayMicroseconds(10);
|
Serial.print((drv_status & SG_RESULT_bm) >> SG_RESULT_bp, DEC);
|
||||||
|
Serial.print(" ");
|
||||||
uint32_t ms = millis();
|
Serial.println(rms_current((drv_status & CS_ACTUAL_bm) >> CS_ACTUAL_bp), DEC);
|
||||||
static uint32_t last_time = 0;
|
|
||||||
if ((ms - last_time) > 500)
|
|
||||||
{
|
|
||||||
if (dir)
|
|
||||||
{
|
|
||||||
Serial.println("Dir -> 0");
|
|
||||||
driver.shaft_dir(0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Serial.println("Dir -> 1");
|
|
||||||
driver.shaft_dir(1);
|
|
||||||
}
|
|
||||||
Serial.print("OverTemperature: ");
|
|
||||||
Serial.print(driver.getOTPW(), DEC);
|
|
||||||
Serial.print(" MSTEP: ");
|
|
||||||
Serial.print(driver.microsteps(), DEC);
|
|
||||||
Serial.print(" DIR: ");
|
|
||||||
Serial.println(driver.dir(), DEC);
|
|
||||||
dir = !dir;
|
|
||||||
last_time = ms;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// bool dir = true;
|
||||||
|
|
||||||
|
// #include <TMC2130Stepper.h>
|
||||||
|
// TMC2130Stepper TMC2130 = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN, CS_PIN);
|
||||||
|
|
||||||
|
// void setup() {
|
||||||
|
// Serial.begin(9600);
|
||||||
|
// TMC2130.begin(); // Initiate pins and registeries
|
||||||
|
// TMC2130.SilentStepStick2130(600); // Set stepper current to 600mA
|
||||||
|
// TMC2130.stealthChop(1); // Enable extremely quiet stepping
|
||||||
|
|
||||||
|
// digitalWrite(EN_PIN, LOW);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void loop() {
|
||||||
|
// digitalWrite(STEP_PIN, HIGH);
|
||||||
|
// delayMicroseconds(10);
|
||||||
|
// digitalWrite(STEP_PIN, LOW);
|
||||||
|
// delayMicroseconds(10);
|
||||||
|
// uint32_t ms = millis();
|
||||||
|
// static uint32_t last_time = 0;
|
||||||
|
// if ((ms - last_time) > 2000) {
|
||||||
|
// if (dir) {
|
||||||
|
// Serial.println("Dir -> 0");
|
||||||
|
// TMC2130.shaft_dir(0);
|
||||||
|
// } else {
|
||||||
|
// Serial.println("Dir -> 1");
|
||||||
|
// TMC2130.shaft_dir(1);
|
||||||
|
// }
|
||||||
|
// dir = !dir;
|
||||||
|
// Serial.println(TMC2130.GCONF(), BIN);
|
||||||
|
// last_time = ms;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// bool dir = true;
|
||||||
|
// #define TMC2130DEBUG
|
||||||
|
// #include <TMC2130Stepper.h>
|
||||||
|
// // Soft SPI
|
||||||
|
// TMC2130Stepper driver = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN, CS_PIN, MOSI_PIN, MISO_PIN, SCK_PIN);
|
||||||
|
// // Hard SPI
|
||||||
|
// //TMC2130Stepper driver = TMC2130Stepper(EN_PIN, DIR_PIN, STEP_PIN, CS_PIN);
|
||||||
|
// void setup()
|
||||||
|
// {
|
||||||
|
// Serial.begin(9600);
|
||||||
|
// while (!Serial)
|
||||||
|
// ;
|
||||||
|
// Serial.println("Start...");
|
||||||
|
// driver.begin(); // Initiate pins and registeries
|
||||||
|
// driver.rms_current(1200); // Set stepper current to 600mA. The command is the same as command TMC2130.setCurrent(600, 0.11, 0.5);
|
||||||
|
// driver.microsteps(16);
|
||||||
|
// driver.stealthChop(1); // Enable extremely quiet stepping
|
||||||
|
|
||||||
|
// digitalWrite(EN_PIN, LOW);
|
||||||
|
|
||||||
|
// Serial.print("DRV_STATUS=0b");
|
||||||
|
// Serial.println(driver.DRV_STATUS(), BIN);
|
||||||
|
// }
|
||||||
|
// bool isKilled = false;
|
||||||
|
|
||||||
|
// void loop()
|
||||||
|
// {
|
||||||
|
// if (driver.checkOT())
|
||||||
|
// {
|
||||||
|
// if (!isKilled)
|
||||||
|
// {
|
||||||
|
// Serial.print("Overheat flag triggered: ");
|
||||||
|
// Serial.println(driver.getOTPW(), DEC);
|
||||||
|
// driver.TPOWERDOWN();
|
||||||
|
// isKilled = true;
|
||||||
|
// Serial.println("Program stopped");
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// delay(1000);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// digitalWrite(STEP_PIN, HIGH);
|
||||||
|
// delayMicroseconds(10);
|
||||||
|
// digitalWrite(STEP_PIN, LOW);
|
||||||
|
// delayMicroseconds(10);
|
||||||
|
|
||||||
|
// uint32_t ms = millis();
|
||||||
|
// static uint32_t last_time = 0;
|
||||||
|
// if ((ms - last_time) > 500)
|
||||||
|
// {
|
||||||
|
// if (dir)
|
||||||
|
// {
|
||||||
|
// Serial.println("Dir -> 0");
|
||||||
|
// driver.shaft_dir(0);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// Serial.println("Dir -> 1");
|
||||||
|
// driver.shaft_dir(1);
|
||||||
|
// }
|
||||||
|
// Serial.print("OverTemperature: ");
|
||||||
|
// Serial.print(driver.getOTPW(), DEC);
|
||||||
|
// Serial.print(" MSTEP: ");
|
||||||
|
// Serial.print(driver.microsteps(), DEC);
|
||||||
|
// Serial.print(" DIR: ");
|
||||||
|
// Serial.println(driver.dir(), DEC);
|
||||||
|
// Serial.println("---");
|
||||||
|
// //Serial.println(driver.checkStatus());
|
||||||
|
// //driver.checkStatus();
|
||||||
|
|
||||||
|
// dir = !dir;
|
||||||
|
// last_time = ms;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
80
README.md
80
README.md
|
@ -6,63 +6,79 @@
|
||||||
|
|
||||||
Общее:
|
Общее:
|
||||||
|
|
||||||
Без радиатора будет греться до 75 градусов
|
Без радиатора будет греться до 75 градусов<br/>
|
||||||
С радиатором 65
|
С радиатором 65<br/>
|
||||||
Обдув решает все вопросы. Обдув обязателен
|
Обдув решает все вопросы. Обдув обязателен<br/>
|
||||||
|
Как и в предыдущих версиях драйверов не рекомендуется отключать двигатель при включенном питании драйвера (необзодимо предотвратить самостоятельное отключение)<br/>
|
||||||
|
|
||||||
...............................................
|
...............................................
|
||||||
<strong>- понятная распиновка/соединение для работы по SPI без промежуточных плат между ардуиной и TMC2130
|
<strong>- понятная распиновка/соединение для работы по SPI без промежуточных плат между ардуиной и TMC2130
|
||||||
</strong>
|
</strong>
|
||||||
Первый запуск (Для SPI режима)
|
<br/>
|
||||||
Перед запуском необходимо убедится что драйвер не имеет перемычки на контактах SPI
|
Первый запуск (Для SPI режима)<br/>
|
||||||
Убедиться что правильно припаяны резисторы на контактах CFG4 (GND), CFG5 (VCC).
|
Перед запуском необходимо убедится что драйвер не имеет перемычки на контактах SPI<br/>
|
||||||
|
Убедиться что правильно припаяны резисторы на контактах CFG4 (GND), CFG5 (VCC).<br/>
|
||||||
<strong> После этого подстроечный резистор перестает влиять на работу драйвера, ток выставляется в прошивке. </strong>
|
<strong> После этого подстроечный резистор перестает влиять на работу драйвера, ток выставляется в прошивке. </strong>
|
||||||
|
<br/>
|
||||||
|
В прошивке опытным путем было определено: Лучше использовать программный SPI, так как он учитывает все входы которые в аппаратном SPI необходимо подключить вручную к питанию Vio, GND или выставить необходимый уровень (DIR, STEP, EN) которыми возможно управлять в коде. Индивидуально необходимо рассматривать данные пины при использовании шилда.
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
В файле TMC2130Stepper.h 410 строка необходимо изменить пины:
|
||||||
|
|
||||||
|
<br/>
|
||||||
<b>Лучше всего использовать совместно с BIGTREETECH protector
|
<b>Лучше всего использовать совместно с BIGTREETECH protector
|
||||||
Это шилд между драйвером и любой платой управления для защиты драйвера от перегорания при обрыве части контаков двигателя, или ручной прокрутки двигателей. В общем это защита драйвера от токов которые может генерировать мотор.
|
Это шилд между драйвером и любой платой управления для защиты драйвера от перегорания при обрыве части контаков двигателя, или ручной прокрутки двигателей. В общем это защита драйвера от токов которые может генерировать мотор.
|
||||||
</b>
|
</b>
|
||||||
|
<br/>
|
||||||
<b>Еще лучше использовать готовую плату</b>
|
<b>Еще лучше использовать готовую плату SKR v1.3 которая приходит по умолчанию настроенная на использование данных драйверов</b>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
...............................................
|
..................................<br/>.............
|
||||||
<strong> - понимание по подстройке ограничителя тока на TMC2130 </strong>
|
<strong> - понимание по подстройке ограничителя тока на TMC2130 </strong>
|
||||||
|
<br/>
|
||||||
<strong> После перевода в режим SPI подстроечный резистор перестает влиять на работу драйвера, ток выставляется в прошивке. </strong>
|
<strong> После перевода в режим SPI подстроечный резистор перестает влиять на работу драйвера, ток выставляется в прошивке. </strong>
|
||||||
|
<br/>
|
||||||
Изначально необходимо знать характеристики мотора (используемого)
|
Изначально необходимо знать характеристики мотора (используемого)
|
||||||
|
<br/>
|
||||||
модель: JK42HS34-1334AC
|
модель: JK42HS34-1334AC<br/>
|
||||||
Распиновка: зеленый А+, черный А-, синий В+, красный В-.
|
Распиновка: зеленый А+, черный А-, синий В+, красный В-.<br/>
|
||||||
угол поворота за один шаг: 1.8 º
|
угол поворота за один шаг: 1.8 º<br/>
|
||||||
<b>НОМИНАЛЬНЫЙ ток на обмотку: 1.33 А</b>
|
<b>НОМИНАЛЬНЫЙ ток на обмотку: 1.33 А</b><br/>
|
||||||
сопротивление обмотки: 2.1 Ом по факту 3 Ом
|
сопротивление обмотки: 2.1 Ом по факту 3 Ом<br/>
|
||||||
индуктивность обмотки: 2.5 мГн
|
индуктивность обмотки: 2.5 мГн<br/>
|
||||||
крутящий момент удержания: 2.2 кг/см
|
крутящий момент удержания: 2.2 кг/см<br/>
|
||||||
|
<br/><br/>
|
||||||
|
Верная настройка токов позволяет: <br/>
|
||||||
|
Избавится от пропуска шагов<br/>
|
||||||
|
Снизить нагрев двигателей<br/>
|
||||||
|
Снизить шум двигателей<br/>
|
||||||
|
|
||||||
Верная настройка токов позволяет:
|
<br/>
|
||||||
Избавится от пропуска шагов
|
Как результат надо:<br/>
|
||||||
Снизить нагрев двигателей
|
|
||||||
Снизить шум двигателей
|
|
||||||
|
|
||||||
|
|
||||||
Как результат надо:
|
- выбор библиотеки и экземплы по обработке детектов (stallGuard2)<br/>
|
||||||
|
|
||||||
|
Когда подвижный механизм упирается в препятствие, нагрузка двигателя возрастает, что и обнаруживает stallGuard2<br/>
|
||||||
|
Схема измерения определяет электрическую энергию, подаваемую в двигатель (EI) и энергию, которая возвращается в источник питания (EB). Разница между этими показателями определяет энергию, которая была передана механической системе (EM). stallGuard2 контролирует значение EB, и, если оно приближается к нулю, это значит, что вся энергия передается в систему и подвижный механизм, скорее всего, уперся в препятствие.
|
||||||
|
|
||||||
|
|
||||||
|
<br/><br/>
|
||||||
|
|
||||||
|
|
||||||
- выбор библиотеки и экземплы по обработке детектов (stallGuard2)
|
|
||||||
|
|
||||||
Чтобы можно было отталкиваться от этого для применения где либо и написания прикладного кода.
|
Чтобы можно было отталкиваться от этого для применения где либо и написания прикладного кода.
|
||||||
Возможно на основе этого статью сделаем или видео. т.к. В инете похоже мало элементарных how to по этому драйверу, все что попадалось ориентировано на использование в конкретных 3д принтерах.
|
Возможно на основе этого статью сделаем или видео. т.к. В инете похоже мало элементарных how to по этому драйверу, все что попадалось ориентировано на использование в конкретных 3д принтерах.
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
<br/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Ссылки:
|
Ссылки:
|
||||||
|
<br/>
|
||||||
Интересынй пример: https://revspace.nl/TMC2130
|
Интересынй пример: https://revspace.nl/TMC2130<br/>
|
||||||
Библиотека: https://github.com/teemuatlut/TMC2130Stepper
|
Библиотека: https://github.com/teemuatlut/TMC2130Stepper<br/>
|
||||||
|
https://github.com/teemuatlut/TMC2130Stepper/tree/master/examples <br/>
|
||||||
|
Про StallGuard2: https://3dtoday.ru/blogs/svs0724/tms2130-applied-technology-and-connection-to-ruramps4d-in-the-configur/<br/>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue