Ссылки на источники информации
Duet3D - Tuning stepper motor drivers
Trinamic - TMC2209 Datasheet
Trinamic - TMC2209-LA
Trinamic - Parameterization of spreadCycle
Trinamic - TMC2209_Calculations.xlsx
Электродвигатель – это датчик! Часть I: технологии stallGuard и coolStep
Электродвигатель - это датчик! Часть II: технологии spreadCycle, stealthChop, dcStep и microPlyer
Тихие шаги мотора. Патентованная технология Trinamic stealthChop
Технология Trinamic microPlyer
YouTube - TMC2209 Product Training Module
YouTube - Trinamic spreadCycle & stealthChop technology for silent stepper motors explained
Trinamic - TMC2209 Datasheet
Trinamic - TMC2209-LA
Trinamic - Parameterization of spreadCycle
Trinamic - TMC2209_Calculations.xlsx
Электродвигатель – это датчик! Часть I: технологии stallGuard и coolStep
Электродвигатель - это датчик! Часть II: технологии spreadCycle, stealthChop, dcStep и microPlyer
Тихие шаги мотора. Патентованная технология Trinamic stealthChop
Технология Trinamic microPlyer
YouTube - TMC2209 Product Training Module
YouTube - Trinamic spreadCycle & stealthChop technology for silent stepper motors explained
Работа с регистрами драйверов Trinamic в прошивке RepRapFirmware
В RepRapFirmware для считывания и записи значений регистров используется команда M569.2: Read or write stepper driver register
Для чтения и записи в файл всего диапазона регистров можно воспользоваться сценарием:
В итоге файл /sys/tmcregisters.txt будет содержать значения всех выбранных регистров.
Возможность записи в файл появилась начиная с версии прошивки RepRapFirmware 3.4.0
Код: Выделить всё
M569.2 Pn Rnn Vnnn
- Pn - номер драйвера
- Rnn - номер регистра 0-127 (в десятичной системе счисления)
- Vnnnn - значение для записи (не указывайте для вывода текущего состояния регистра)
Для чтения и записи в файл всего диапазона регистров можно воспользоваться сценарием:
Код: Выделить всё
;============================== Параметры ==============================
var driver_number=0 ; Указать номер драйвера
var register_start=0 ; Указать номер первого регистра для чтения (от 0 до 127)
var register_end=127 ; Указать номер последнего регистра для чтения (от 0 до 127)
;=======================================================================
G4 S3 ; Пауза 3 секунды
; Проверка правильного указания диапазона регистров
if (var.register_end<=127) & (var.register_start>=0) & (var.register_end>=var.register_start)
var counter=var.register_start ; Установка начального номера счётчика
M929 P"tmcregisters.txt" ; Запустить запись лога в файл
while var.counter<=var.register_end ; Цикл перебора номеров
M569.2 P{var.driver_number} R{var.counter} ; Считывание значения регистра
set var.counter=var.counter+1 ; Увеличение счётчика
G4 P200 ; Пауза 200 мсек
M929 S0 ; Остановить запись лога
else
echo "Диапазон регистров указан не верно" ; Вывод сообщения в консоль
G4 S3 ; Пауза 3 секунды
Возможность записи в файл появилась начиная с версии прошивки RepRapFirmware 3.4.0
Работа с регистрами драйверов Trinamic в прошивке Marlin
Всё, что смог найти:
M122 - TMC Debugging
M919 - TMC Chopper Timing
Напишите, если Вы знаете как можно в прошивке Malrin работать с регистрами драйверов TMC.
M122 - TMC Debugging
M919 - TMC Chopper Timing
Напишите, если Вы знаете как можно в прошивке Malrin работать с регистрами драйверов TMC.
Работа с регистрами драйверов Trinamic в прошивке Klipper
Всё, что смог найти:
TMC drivers
TMC stepper driver configuration
SET_TMC_FIELD
Напишите, если Вы знаете как можно в прошивке Klipper работать с регистрами драйверов TMC.
TMC drivers
TMC stepper driver configuration
SET_TMC_FIELD
Напишите, если Вы знаете как можно в прошивке Klipper работать с регистрами драйверов TMC.
0x6C: CHOPCONF – Конфигурация чоппера
Например, для вывода значения регистра с адресом 0X6C CHOPCONF – Chopper Configuration
переводим 0X6C из шестнадцатиричной системы в десятичную и получаем 108.
Полученное значение 0x10008103 необходимо перевести из шестнадцатиричной системы счисления в двоичную
0x10008103 -> %00010000000000001000000100000011
Так как регистры 32-х битные, добавил нулей слева.
Для удобства распределил значения битов по параметрам.
CHOPCONF Addr 0x6C = 0x10008103 = 0 0 0 1 0000 000000 0 01 0000 0010 000 0011
переводим 0X6C из шестнадцатиричной системы в десятичную и получаем 108.
Код: Выделить всё
M569.2 P0 R108 ; Регистр 0X6C CHOPCONF драйвера 0
Register 0x6c value 0x10008103
0x10008103 -> %00010000000000001000000100000011
Так как регистры 32-х битные, добавил нулей слева.
Для удобства распределил значения битов по параметрам.
CHOPCONF Addr 0x6C = 0x10008103 = 0 0 0 1 0000 000000 0 01 0000 0010 000 0011
- bit 0-3: toff = %0011 = 3
Длительность фазы медленного затухания.
Параметр используется только в режиме SpreadCycle и подбирается опытным путём.
%0000: 0 - драйвер выключен
%0001: 1 - используйте только при TBL ≥ 2
%0010 … %1111: 2 … 15, по умолчанию 3. - bit 4-6: hstrt = %000 = 1
Параметр гистерезиса. Добавляет %000 … %111 <-> 1, 2, …, 8 к параметру HEND. - bit 7-10: hend = %0010 = -1
Параметр гистерезиса
%0000 … %1111 <-> -3, -2, -1, 0, 1, …, 12
HEND+HSTRT ≤ 16
HEND <= HSTRT
При подборе оптимального режима начните с низких значений, например, HSTRT=0, HEND=0 и увеличивайте HSTRT до тех пор, пока двигатель не будет работать плавно на низкой скорости. При средних скоростях (от 100 до 400 полных шагов в секунду) слишком низкое значение гистерезиса приведет к усилению гудения и вибрации двигателя. Слишком большое значение гистерезиса приведет к уменьшению частоты и увеличению шума прерывателя, но не даст никаких преимуществ для формы волны сигнала. - bit 11-14: не используются
- bit 15-16: tbl = %01
Время задержки работы компаратора. Это время должно покрывать переключения и звон резистора Rsense.
%00->16, %01->24, %10->32, %11->40 tclk
Для большинства случаев подходят значения %01 или %10.
Для более высоких емкостных нагрузок может потребоваться %11.
Более низкое значение позволяют StealthChop задавать меньший ток катушки. - bit 17: vsense = 0
Напряжение чувствительного резистора
0: Нормальное, наиболее надежное (VFS = 0.32 В)
1: Пониженное (VFS = 0.18 В) - bit 18-23: не используются
- bit 24-27: mres = %0000
Дробление шага (микрошаг).
%0000->256, %0001->128, %0010-> 64, %0011->32, %0100-> 16, %0101->8, %0110->4, %0111->2, %1000->полный шаг
Обычно дробление шага задаётся не изменением битов регистра, а специальной командой. - bit 28: intpol = %1
Нативная интерполяция до 256 шагов при любом дроблении шага.
1: Включена
0: Выключена - bit 29: dedge = %0
Управление входом STEP по фронту и спаду импульсов.
%1: Включено
%0: Выключено - bit 30: diss2g = %0
Защита от короткого замыкания на землю.
%0: Защита включена
%1: Защита выключена - bit 31: diss2vs = %0
Short protection low side is on
Защита от короткого ...
%0: Защита включена
%1: Защита выключена
0x70: PWMCONF – Конфигурация StealthChop
Для вывода значения регистра PWMCONF – Voltage PWM Mode StealthChop c адресом 0X70 введите 112
70 в шестнадцатиричной = 112 в десятичной
PWMCONF Addr 0x70 = 0xC40D0E24 = 1100 0100 00 00 1 1 01 00001110 00100100
70 в шестнадцатиричной = 112 в десятичной
Код: Выделить всё
M569.2 P0 R112 ; Регистр 0X70 PWMCONF драйвера 0
Register 0x70 value 0xC40D0E24
- bit 0-7: PWM_OFS = %00100100 = 36
Смещение амплитуды ШИМ (0-255, по умолчанию 36) относительно полного тока двигателя (CS_ACTUAL=31) в состоянии покоя.
При включенной автонастройке (pwm_ autoscale = 1) данное значение используется как начальное (PWM_SCALE_AUTO=PWM_OFS) и далее автоматически подбирается оптимальное значение.
- bit 8-15: PWM_GRAD = %00001110 = 14
PWM_GRAD (от 0 до 255, по умолчанию 14) * 256 / TSTEP добавляется к PWM_AMPL для компенсации зависящей от скорости обратной ЭДС шагового двигателя.
При включенной автонастройке (pwm_ autoscale = 1 и pwm_autograd = 1) данное значение используется как начальное для PWM_GRAD_AUTO и далее автоматически подбирается оптимальное значение.
- bit 16-17: pwm_freq = %01
Частота ШИМ для режима StealthChop.
%00 <-> fPWM=2/1024 fCLK, %01 <-> fPWM=2/683 fCLK, %10 <-> fPWM=2/512 fCLK, %11 <-> fPWM=2/410 fCLK
fPWM=2/683 fCLK = 2 / 683 x 12 МГц = 35.1 кГц
Для большинства случаев рекомендуется частота от 20 до 50 кГц.
- bit 18: pwm_autoscale = 1
%0 - Ручная настройка амплитуды ШИМ = PWM_OFS * ((CS_ACTUAL+1) / 32) + PWM_GRAD * 256 / TSTEP
%1 - Автоматическая настройка масштабирования тока.
- bit 19: pwm_autograd = 1
%0 - Фиксированное значение PWM_GRAD_AUTO = PWM_GRAD
%1 - Автоматическая настройка компенсации обратной ЭДС.
- bit 20-21: freewheel = %00
Режим при нулевом токе.
%00 Normal operation, %01 Freewheeling, %10 Coil shorted using LS drivers, %11 Coil shorted using HS drivers
- bit 22-23: не используются
- bit 24-27: PWM_REG = %0100 = 4
Коэффициент максимального изменения амплитуды ШИМ за половину волны при pwm_autoscale = 1.
Коэффициент должен быть как можно меньше, чтобы получить стабильное и мягкое регулирование, но он должен быть достаточным чтобы драйвер мог быстро реагировать на изменения необходимого тока.
1: 0.5 increments (самое медленное регулирования)
2: 1 increment (%0010, по умолчанию при OTP2.1=1)
3: 1.5 increments
4: 2 increments
…
8: 4 increments (%1000, по умолчанию при OTP2.1=0)
...
15: 7.5 increments (самое быстрое регулирование)
- bit 28-31: PWM_LIM = %1100 = 12
Ограничение для PWM_SCALE_AUTO при переключении со SpreadCycle на StealthChop.
Уменьшите значение для снижения скачка тока при переключении.
Не ограничивает PWM_GRAD или PWM_GRAD_AUTO.
От 0 до 15, по умолчанию 12.
Автоматическая настройка StealthChop2
Драйвер TMC2209 поддерживает функцию StealthChop2, в которую встроена процедура автоматической настройки наиболее важных рабочих параметров под шаговый двигатель. Таким образом, StealthChop2 обеспечивает высокую динамику работы шагового двигателя и поддерживает снижение потребления до очень малых токов. Для достижения наилучших результатов необходимо выполнить два шага:
- Шаг AT#1 - Параметр PWM_OFS_AUTO - Запустите двигатель в состояние удержания с номинальным рабочим током.
- Ток удержания должен быть равен номинальному.
- Длительность до 130 мс.
- Шаг AT#2 - Параметр PWM_GRAD_AUTO - Переместите ось со средней скоростью, например выполните калибровку оси.
- Скорость вращения ротора шагового двигателя должна обеспечивать создание значительной обратной ЭДС и достижение полного рабочего тока:
1.5*PWM_OFS_AUTO*(IRUN+1)/32 < PWM_SCALE_SUM < 4*PWM_OFS_AUTO*(IRUN+1)/32 PWM_SCALE_SUM < 255
Типичный диапазон составляет 60-300 об/мин. - Для изменения параметра на +/-1 требуется 8 полных шагов. Для типичного двигателя с оптимальным значением PWM_GRAD_AUTO<=64 требуется до 400 полных шагов при запуске с начальным значением данного параметра 14.
- Скорость вращения ротора шагового двигателя должна обеспечивать создание значительной обратной ЭДС и достижение полного рабочего тока:

Настройка stealthChop и spreadCycle

CoolStep
CoolStep обеспечивает значительную экономию энергии, особенно для двигателей, которые испытывают переменные нагрузки. Поскольку шаговый двигатель должен работать с резервом крутящего момента от 30% до 50%, CoolStep обеспечивает значительную экономию энергии, поскольку автоматически включает резерв крутящего момента, когда это необходимо. Снижение энергопотребления обеспечивает охлаждение системы, увеличивает срок службы двигателя и позволяет снизить затраты на блок питания и охлаждающие компоненты.
CoolStep контролируется несколькими параметрами, но SEMIN и SEMAX имеют решающее значение для понимания принципа работы:
0X42: COOLCONF
Текущая скорость приращения указывается в SEUP, а текущая скорость уменьшения указывается в SEDN. Их можно настраивать отдельно, поскольку они запускаются разными событиями, на которые могут потребоваться разные реакции. Кодировки этих параметров позволяют увеличивать токи катушек намного быстрее, чем уменьшать, потому что пересечение нижнего порога является более важным событием, которое может потребовать более быстрой реакции. Если реакция слишком медленная, двигатель может пропустить шаги. Напротив, медленная реакция на пересечение верхнего порога не несет ничего более серьезного риска, чем упущенная возможность сэкономить энергию.
CoolStep работает в пределах, контролируемых текущим параметром масштаба IRUN и битом seimin.
Внимание
Когда CoolStep увеличивает ток двигателя, может произойти ложное обнаружение пропуска шага. Для достижения наилучших результатов отключите CoolStep во время использования SensorlessHoming. Если необходимо использовать StallGuard в сочетании с CoolStep, попробуйте при необходимости увеличить нижний порог CoolStep SEMIN.
Для быстрой реакции на увеличение нагрузки двигателя используйте больший шаг приращения тока SEUP.
Если нагрузка двигателя изменяется медленно, можно использовать меньший шаг приращения тока, чтобы избежать колебаний.
Примечание
Наиболее распространенное и наиболее полезное использование - адаптация CoolStep для работы с типичной целевой рабочей скоростью системы и установка соответствующих пороговых значений скорости. Поскольку разгон и торможение обычно должны быть быстрыми, для них потребуется полный ток двигателя, в то время как они вносят лишь небольшой вклад в общее энергопотребление из-за своей короткой продолжительности.
Поскольку CoolStep не может измерять нагрузку двигателя в состоянии покоя и при очень низких оборотах, для включения CoolStep предусмотрен более низкий порог скорости. Для него должно быть установлено значение по умолчанию для конкретной системы. Ниже этого порога используется нормальная установка тока IRUN или IHOLD.
CoolStep контролируется несколькими параметрами, но SEMIN и SEMAX имеют решающее значение для понимания принципа работы:
0X42: COOLCONF
- бит 0-3: SEMIN
Если SG_RESULT опускается ниже порога, CoolStep увеличивает ток для обеих обмоток.
%0000 - CoolStep выключен
%0001 ... %1111 <-> 1 ... 15
Порог равен SEMIN*32. После определения SGTHRS используйте 1/16*SGTHRS+1 в качестве начального значения для SEMIN. - бит 4: не используются
- бит 5-6: SEUP
Задаёт шаг приращения. Ток увеличивается для каждого измеренного значения StallGuard ниже нижнего порога.
%00 … %11 <-> 1, 2, 4, 8 - бит 7: не используются
- бит 8-11: SEMAX
Если SG равно или выше порога достаточное количество раз, CoolStep уменьшает ток в обеих обмотках.
Верхний порог равен (SEMIN + SEMAX + 1)*32.
%0000 … %1111: 0 … 15
Рекомендуется использовать значения от 0 до 2 - бит 12: не используются
- бит 13-14: SEDN
Устанавливает количество показаний StallGuard выше верхнего порога, необходимого для каждого уменьшения тока двигателя.
Количество измерений StallGuard на декремент: 32, 8, 2, 1
%00: для каждых 32 значений StallGuard4 уменьшается на единицу
%01: для каждых 8 значений StallGuard4 уменьшается на единицу
%10: на каждые 2 значения StallGuard4 уменьшаются на единицу
%11: для каждого значения StallGuard4 уменьшить на единицу - бит 15: SEIMIN
Устанавливает нижний предел тока двигателя для режима CoolStep путем масштабирования IRUN.
Работайте значительно выше минимального тока двигателя, заданного в параметрах StealthChop.
0: 1/2 IRUN (Внимание: задавайте IRUN > 10)
1: 1/4 IRUN (Внимание: задавайте IRUN > 20)
- Регистр 0x14: TCOOLTHRS
Нижний порог скорости для включения CoolStep.
Ниже этой скорости CoolStep отключается (не используется в режиме STEP/DIR).
Адаптируйтесь к нижнему пределу диапазона скоростей, при котором StallGuard дает стабильный результат. - Регистр 0x13: TPWMTHRS
Верхний порог скорости для CoolStep.
При превышении этой скорости драйвер переключается на режим SpreadCycle, что также отключает CoolStep и StallGuard. - Регистр 0X6F - бит 16-20: CS_ACTUAL
Отображает текущее масштабирование тока двигателя, контролируемое CoolStep.
Значение увеличивается до значения IRUN и уменьшается до той части IRUN, которая указана в SEIMIN.
0 ... 31 - 1/32, 2/32, … 32/32
Текущая скорость приращения указывается в SEUP, а текущая скорость уменьшения указывается в SEDN. Их можно настраивать отдельно, поскольку они запускаются разными событиями, на которые могут потребоваться разные реакции. Кодировки этих параметров позволяют увеличивать токи катушек намного быстрее, чем уменьшать, потому что пересечение нижнего порога является более важным событием, которое может потребовать более быстрой реакции. Если реакция слишком медленная, двигатель может пропустить шаги. Напротив, медленная реакция на пересечение верхнего порога не несет ничего более серьезного риска, чем упущенная возможность сэкономить энергию.
CoolStep работает в пределах, контролируемых текущим параметром масштаба IRUN и битом seimin.
Внимание
Когда CoolStep увеличивает ток двигателя, может произойти ложное обнаружение пропуска шага. Для достижения наилучших результатов отключите CoolStep во время использования SensorlessHoming. Если необходимо использовать StallGuard в сочетании с CoolStep, попробуйте при необходимости увеличить нижний порог CoolStep SEMIN.
Для быстрой реакции на увеличение нагрузки двигателя используйте больший шаг приращения тока SEUP.
Если нагрузка двигателя изменяется медленно, можно использовать меньший шаг приращения тока, чтобы избежать колебаний.
Примечание
Наиболее распространенное и наиболее полезное использование - адаптация CoolStep для работы с типичной целевой рабочей скоростью системы и установка соответствующих пороговых значений скорости. Поскольку разгон и торможение обычно должны быть быстрыми, для них потребуется полный ток двигателя, в то время как они вносят лишь небольшой вклад в общее энергопотребление из-за своей короткой продолжительности.
Поскольку CoolStep не может измерять нагрузку двигателя в состоянии покоя и при очень низких оборотах, для включения CoolStep предусмотрен более низкий порог скорости. Для него должно быть установлено значение по умолчанию для конкретной системы. Ниже этого порога используется нормальная установка тока IRUN или IHOLD.
