我正在尝试对 Gnu/Linux 中的 Trinamic StepRocker步进电机控制器进行一些实验。我之前通过 USB 将设备连接到 Windows 机器,并使用 Trinamic 的专有软件来测试控制器是否按预期运行,并且看起来确实如此。StepRocker 的初学者手册提到了应该通过串行接口发送的某些命令,以使电机向左、向右旋转或使其停止。但是当我通过 USB 将此控制器连接到 Gnu/Linux 计算机,并想编写自己的 C++ (libusb) 程序来使电机移动时,我不太确定我的起点应该是什么。控制台应用程序(我计划编写)应该是非阻塞的。
这是发出旋转命令时正在发送的数据报和收到的响应的图像:
我尝试编写一个简单的程序,将图片中显示的旋转值数据报提供给电机控制器:
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <errno.h>
#include <termios.h>
#include <unistd.h>
int fd1;
int wr;
int main()
{
fd1=open("/dev/ttyACM0", O_RDWR | O_NOCTTY | O_NDELAY);
if (fd1 == -1 )
{
perror("open_port: Unable to open /dev/ttyACM0");
}
else
{
fcntl(fd1, F_SETFL,0);
printf("Port 1 has been sucessfully opened and %d is the file description\n",fd1);
char moveMsg[9]={0x01,0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0xbc, 0xc0};
wr = write(fd1, moveMsg, 9);
}
close(fd1);
return 0;
}
但这不会以任何方式改变控制器的 LED 行为(当然也不会移动电机)。