Командование контроллером шагового двигателя через USB

Я пытаюсь провести несколько экспериментов с контроллером шагового двигателя Trinamic 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;
}

Но это никак не влияет на поведение светодиодов контроллера (и, конечно, не приводит в движение двигатель).

2 ответа

Они говорят "Драйвер виртуального USB-порта USB", поэтому вам не нужен libusb: просто откройте /dev/USBtty0 (/dev/ACM0 или как ваш дистрибутив создаст его) в вашей программе, как обычный RS-232, и работайте с ним.

Вы можете использовать libusb + libftdi (без виртуальных последовательных портов).

Другие вопросы по тегам