Связан с модулем: [HW] Модуль двигателей
Библиотека двигателей позволяет управлять модулем двигателей и двигателями, которые туда подключаются. Существуют функции управления двигателями постоянного тока, шаговыми двигателями и серводвигателями.
Настройка управляющих выводов одного контроллера двигателя постоянного тока выходом. Параметры:
Управляющий приказ контроллера двигателя постоянного тока. Параметры:
Управляющий приказ одного контроллера двигателя постоянного тока. Двигатель вращается в заданном направлении и с указанной скоростью. Параметры:
Настройка управляющих выводов контроллера униполярного шагового двигателя выходом. Параметры:
Управляющий приказ полушага контроллера униполярного шагового двигателя. Параметры:
Настройка управляющих выводов контроллера биполярного шагового двигателя выходом.
Управляющий приказ полушага контроллера биполярного шагового двигателя. Функция блокирующаяся, т.е. она выполняется до тех пор, пока не будет сделано желаемое количество шагов. Параметры:
Настройка управляющих выводов одного серводвигателя выходом и настройка таймера 1 в режим ШИМ. Параметры:
Управляющий сигнал серводвигателя. Если происходит управление позиционируемым серводвигателем, то меняется положение ротора, если же бесконечно вращающимся, то меняется скорость вращения. Параметры:
Следующий пример демонстрирует все функции библиотеки. По порядку настраиваются контроллеры и вращаются двигатели.
#include <homelab/module/motors.h> int main(void) { // Настройка контроллеров 0 и 1 двигателей постоянного тока dcmotor_init(0); dcmotor_init(1); // Настройка контроллера биполярного шагового двигателя bipolar_init(); // Настройка управляющих сигналов серводвигателей 0 и 1 servomotor_init(0); servomotor_init(1); // Один двигатель постоянного тока вращается в одну сторону, // другой в противоположную сторону dcmotor_drive(0, -1); dcmotor_drive(1, +1); // Шаговый двигатель вращается 100 градусов в одну сторону // И затем в два раза быстрее в другую сторону bipolar_halfstep(1, 100, 50); bipolar_halfstep(-1, 100, 25); // Вращение серводвигателей в противоположном направлении servomotor_position(0, -100); servomotor_position(1, +100); }
Пример демонстрирует регулировку скорости двигателя постоянного тока.
#include <homelab/module/motors.h> int main(void) { unsigned char speed = 0; // Инициализация двигателя dcmotor_drive_pwm_init(0, TIMER2_NO_PRESCALE); while(1) { speed = 100; // Установка двигателю заданной скорости dcmotor_drive_pwm(0, 1, speed); } }