diff --git a/MKS42C.cpp b/MKS42C.cpp index d829a64..a028ea8 100644 --- a/MKS42C.cpp +++ b/MKS42C.cpp @@ -34,6 +34,22 @@ void MKS42C::setEnable(bool state) { sendRaw(cmd, 3); } +bool MKS42C::setMaxTorque(uint16_t torque) { + if (torque > 3000) torque = 3000; + uint8_t cmd[] = {_addr, 0xA5, (uint8_t)(torque >> 8), (uint8_t)(torque & 0xFF)}; + sendRaw(cmd, 4); + + // Ждем подтверждение e0 01 e1 + unsigned long wait = millis(); + while (_serial->available() < 3 && millis() - wait < 100); + if (_serial->available() >= 3) { + uint8_t res[3]; + _serial->readBytes(res, 3); + return (res[1] == 0x01); + } + return false; +} + void MKS42C::run(uint8_t dir, uint8_t speed) { // Команда 0xF6 (стр. 16 PDF) // dir: 0 - CW, 1 - CCW diff --git a/MKS42C.h b/MKS42C.h index a656fd4..c1ea151 100644 --- a/MKS42C.h +++ b/MKS42C.h @@ -15,6 +15,13 @@ public: // --- Управление питанием --- void setEnable(bool state); // Включить/выключить удержание вала + /** + * @brief Установка максимального крутящего момента (MaxT) + * @param torque Значение от 0 до 1200 (0x4B0) + * @return true если успешно + */ + bool setMaxTorque(uint16_t torque); + // --- Движение --- /** * @brief Непрерывное вращение (Команда 0xF6) diff --git a/README.md b/README.md index a5f1856..34aaa98 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,8 @@ MKS SERVO42C User Manual V1.1.2.pdf void stop() Мгновенная программная остановка (торможение). + bool setMaxTorque(uint16_t torque) Ограничение максимального момента (тока). Значение 0–3000. Позволяет мотору "проскальзывать" при встрече с препятствием, не уходя в ошибку. + 3. Чтение данных и обратная связь float readPosition() Возвращает угол вала в текущем круге (0.00° – 359.99°).