Я пытаюсь сделать некоторые эксперименты на тринамике StepRocker Контроллер шагового двигателя в GNU / Linux. Я подключил устройство через 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;
}
Но это никак не влияет на поведение светодиодов контроллера (и, конечно, не приводит в движение двигатель).
Они говорят «Драйвер виртуального USB-порта USB», поэтому вам не нужен libusb: просто откройте / dev / USBtty0 (/ dev / ACM0 или как ваш дистрибутив создаст его) в вашей программе, как обычный RS-232, и работайте с ним.
Вы можете использовать libusb + libftdi (без виртуальных последовательных портов).