driver - 从 ESP32 驱动 TMC5160
问题描述
我正在尝试使用 Tom Magnier 的 TMC5160 库,但遇到了一些问题。我正在使用 BigTreeTech 芯片的 SPI 接口版本,并连接了以下引脚。硬件设置:
MOSI (ESP32 : 23) <=> SDI
MISO (ESP32 : 19) <=> SDO
SCK (ESP32 : 18) <=> SCK
ESP32:5 <=> CSN
ESP32:25 <=> DRV_ENN (optional, tie to GND if not used)
GND <=> GND
3.3V (ESP32 : ) <=> VCC_IO (depending on the processor voltage)
我基本上只是在尝试实现示例,看来我可以使用默认值配置驱动程序,因为它会找到芯片并显示状态。但是,它不会响应电机控制。我想知道我是否遗漏了与 ESP32 的连接。
我的初始化和测试代码。
void izTMC5160::Initialize()
{
_log->Log("izTMC5160::Initialize starting...");
pinMode(_enablePin, OUTPUT);
digitalWrite(_enablePin, LOW); // Active low
SPI.begin();
// This sets the motor & driver parameters /!\ run the configWizard for your driver and motor for fine tuning !
powerStageParams.drvStrength = 2;
powerStageParams.bbmTime = 24;
powerStageParams.bbmClks = 0;
motorParams.globalScaler = 219;
motorParams.irun = 31;
motorParams.ihold = 15;
// motorParams.freewheeling = 0;
motorParams.pwmOfsInitial = 30;
motorParams.pwmGradInitial = 0;
motor.begin(powerStageParams, motorParams, TMC5160::NORMAL_MOTOR_DIRECTION);
// ramp definition
motor.setRampMode(TMC5160::POSITIONING_MODE);
motor.setMaxSpeed(_maxSpeed);
motor.setAcceleration(_acceleration);
delay(_startupDelay); // Standstill for automatic tuning
_log->Log("izTMC5160::Initialize completed...");
}
void izTMC5160::Test()
{
_testDir = !_testDir;
motor.setTargetPosition(_testDir ? _testSteps : -_testSteps); // 1 full rotation = 200s/rev
float xactual = motor.getCurrentPosition();
float vactual = motor.getCurrentSpeed();
char buffer[256];
sprintf(buffer, "izTMC5160::Test - Current position: %f Current Speed: %f",xactual,vactual);
_log->Log(buffer);
}
void izTMC5160::Enable(bool enable)
{
if(enable)
{
digitalWrite(_enablePin,LOW);
}
else
{
digitalWrite(_enablePin,HIGH);
}
}
解决方案
该示例有效,我的猜测是您尚未启用运动控制模式。bigtree tech tmc5160 没有提供一种简单的方法来调整 spi 和 sd 模式选择器,有一个版本希望下一批也可以。请参阅此处进行修复:https ://github.com/bigtreetech/BIGTREETECH-TMC5160-V1.0/issues/8
推荐阅读
- android - ConstraintLayout - Ellipsize 开始不起作用
- python - matplotlib 不绘制最后一个数据点
- swift - didReceiveRemoteNotification 和 iOS 14 崩溃
- types - Rust 中 itertools::process_results() 的回调类型签名应该是什么?
- formik - 是的,使用一个字段进行验证,但有两个可能的选项 (OR)
- r - 尝试将变量制成表格时,如何阻止出现的观察次数?
- swift - 我怎么知道加速度计何时静止?我在 Swift 中通过蓝牙使用外部加速度计
- android - 如何在 Materialtextinput Android 中结束可绘制后添加文本
- android - Kotlin 是如何知道 applicationContext 来自 getApplicationContext() 的?
- python - 在 Python 中自动从特定网站下载 cdf 文件