ДО курс по робототехнике

1 марта 2014 г.

Запуск моторов в C программе на EV3

(C)
В прошлой статье мы разобрали как создать, закачать и запустить простую программу на С. Данная инструкция покажет, как можно использовать аппаратные ресурсы в Linux. Во время старта ядра Linux, оно загружает несколько модулей, которые дают доступ к "железу". После того, как эти модули были загружены, пользователь может "общаться" с "железом", используя стандартные файловые операции записи и чтения. Эта инструкция не имеет целью рассказать обо всех доступных функциях работы с аппаратными ресурсами.
Модули, доступные в EV3 блоке, могут быть отображены с помощью командыlsmod. Модули Lego, относящиеся к "железу", имеют префикс d_Имя в своем названии. Пример, представленный ниже, показывает один из способов управления моторами. Для того, чтобы скомпилировать этот код, я использовал переменные, объявленные в исходном коде прошивки EV3.

Как и в прошлой инструкции, надо создать папку для программы, файл программы motor.c и скопировать в нее следующий код:
Этот код - экспериментальный, используйте его на свой риск!

#include <fcntl.h>
#include “lms2012.h”
// Motor power 0..100
const int SPEED = 50;
// The motor operations use a single bit (or a combination of them)
// to determine which motor(s) will be used
// A = 0×1, B = 0×2, C = 0×4, D = 0×8
// AC = 0×5
const char MOTOR = 0×1;
int main()
{
   char motor_command[5];
   int file;
   //Open the device file
   if((file = open(PWM_DEVICE_NAME, O_WRONLY)) == -1)
      return -1; //Failed to open device
   // For most operations, the second byte represent the motor(s)
   motor_command[1] = MOTOR;
   // Start the motor
   motor_command[0] = opOUTPUT_START;
   write(file,motor_command,2);
   // Set the motor power
   motor_command[0] = opOUTPUT_POWER;
   motor_command[2] = SPEED;
   write(file,motor_command,3);
   // Run the motor for a couple of seconds
   sleep(2);
   // Stops the motor
   motor_command[0] = opOUTPUT_STOP;
   motor_command[1] = MOTOR;
   write(file,motor_command,2);
   // Close the device file
   close(file);
   return 0;
}


Следующие файлы должны быть скопированы в папку с программой: lms2012.h,bytecodes.h и lmstypes.h.
После создания motor.c и добавления всех необходимых файлов, код может быть скомпилирован:
arm-none-linux-gnueabi-gcc motor.c -o motor

Данная программа взаимодействует с модулем ядра d_pwm. Больше деталей о том, как можно управлять моторами, можно узнать из файла d_pwm.c в функции Device1Write.

Процедура загрузки программы на EV3 блок и ее запуска была приведена впрошлой статье.

Данная статья является переводом оригинальной статьи "Using the Motors" Lauro Ojeda с согласия автора.

Комментариев нет:

Отправить комментарий