Двигатели

Связан с модулем: [HW] Модуль двигателей

Библиотека двигателей позволяет управлять модулем двигателей и двигателями, которые туда подключаются. Существуют функции управления двигателями постоянного тока, шаговыми двигателями и серводвигателями.

Типы данных

  • prescale
    Способ выбора тактового делителя. Рекомендуется использовать два первых тактовых делителя:
    • TIMER2_NO_PRESCALE - Делитель не используется.
    • TIMER2_PRESCALE_8 - Коэффициент деления 8.
    • TIMER2_PRESCALE_64 - Коэффициент деления 64.
    • TIMER2_PRESCALE_256 - Коэффициент деления 256.
    • TIMER2_PRESCALE_1024 - Коэффициент деления 1024.

Функции

  • void dcmotor_init(unsigned char index)

Настройка управляющих выводов одного контроллера двигателя постоянного тока выходом. Параметры:

  • index - Номер контроллера. Значение от 0 до 3.
  • void dcmotor_drive(unsigned char index, signed char direction)

Управляющий приказ контроллера двигателя постоянного тока. Параметры:

  • index - Номер контроллера. Значение от 0 до 3.
  • direction - Полярность двигателя. Значение -1, 0 или +1. В случае 0 мотор остановлен, в других случаях вращается в соответствующую сторону.
  • void dcmotor_drive_pwm_init(unsigned char index, timer2_prescale prescaler)
    Настройка управляющих выводов одного контроллера двигателя постоянного тока выходом с регулировкой скорости. Вдобавок можно указать желаемый тактовый делитель, в зависимости нужной частоты ШИМ. Параметры:
    • index - Номер контроллера. Значение от 0 до 3.
    • prescaler - Выбор тактового делителя. Желательно использовать тактовый делитель, т.к. прерывания, происходящие очень быстро, могут нарушить работу программы. Например, при использовании UH датчика необходимо тактовым делителем определить TIMER2_PRESCALE_8.
  • void dcmotor_drive_pwm(unsigned char index, signed char direction, unsigned char speed)

Управляющий приказ одного контроллера двигателя постоянного тока. Двигатель вращается в заданном направлении и с указанной скоростью. Параметры:

  • index - Номер контроллера. Значение от 0 до 3.
  • direction - Полярность двигателя. Значение -1 или +1.
  • speed - Скорость двигателя. Значение от 0 до 255. В случае с 0 двигатель остановлен, а в случае с 255 – это максимально возможная скорость.
  • void unipolar_init(unsigned char index)

Настройка управляющих выводов контроллера униполярного шагового двигателя выходом. Параметры:

  • index - Номер контроллера. Значение от 0 до 1.
  • void unipolar_halfstep(unsigned char index, signed char direction, unsigned short num_steps, unsigned char speed)

Управляющий приказ полушага контроллера униполярного шагового двигателя. Параметры:

  • index - Номер контроллера. Значение от 0 до 1.
  • direction - Направление вращения. Значение от -1 или +1.
  • num_steps - Число полушагов.
  • speed - Время выполнения одного шага в миллисекундах.
  • void bipolar_init(void)

Настройка управляющих выводов контроллера биполярного шагового двигателя выходом.

  • void bipolar_halfstep(signed char direction, unsigned short num_steps, unsigned char speed)

Управляющий приказ полушага контроллера биполярного шагового двигателя. Функция блокирующаяся, т.е. она выполняется до тех пор, пока не будет сделано желаемое количество шагов. Параметры:

  • direction - Направление вращения. Значение от -1 или +1.
  • num_steps - Число полушагов.
  • speed - Выполнение одного шага в миллисекундах.
  • void servomotor_init(unsigned char index)

Настройка управляющих выводов одного серводвигателя выходом и настройка таймера 1 в режим ШИМ. Параметры:

  • index - Номер серводвигателя. Значение 0 или 1.
  • void servomotor_position(unsigned char index, signed short position)

Управляющий сигнал серводвигателя. Если происходит управление позиционируемым серводвигателем, то меняется положение ротора, если же бесконечно вращающимся, то меняется скорость вращения. Параметры:

  • index - Номер серводвигателя. Значение 0 или 1.
  • position - Положение ротора или скорость вращения (в зависимости от двигателя). Значение от -100 до +100. В случае 0 – это среднее положение или остановка.

 

Пример

Следующий пример демонстрирует все функции библиотеки. По порядку настраиваются контроллеры и вращаются двигатели.

#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);			      
  	}
}
ru/software/homelab/library/module/motor.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0