В этом уроке мы увидим, как подключить наиболее распространенные типы двигателей к SBC. Мы также покажем вам, как с ними обращаться, на нескольких примерах. Наиболее распространены следующие типы двигателей:
- Двигатели постоянного тока дешевы и просты в управлении, требуется только один выход мощности, который можно активировать с помощью ШИМ-сигнала.
- Серводвигатели похожи на двигатели постоянного тока, но они включают в себя небольшую электронику и внутренний потенциометр для формирования замкнутого контура управления, что позволяет контролировать угол поворота. Управление также с помощью ШИМ, но в этом случае управляющий сигнал маломощный, а силовой каскад встроен в сам серводвигатель.
- Шаговые двигатели имеют несколько обмоток и требуют последовательности для управления, но взамен они обеспечивают большую точность, поскольку они продвигаются шаг за шагом каждый раз, когда полярность их обмоток меняется на противоположную.
1. Двигатели постоянного тока
Чтобы управлять двигателем постоянного тока, мы подключим его к SBC, как показано на следующей схеме:
Нам нужно будет знать некоторые параметры нашего двигателя, в частности соотношение между приложенным напряжением и скоростью двигателя или Kv.
Класс Dc_Motor представляет двигатель постоянного тока, управляемый ШИМ с частотой 50 Гц. Как видно, необходимо указать некоторые параметры, такие как напряжение питания и константа Kv, а также используемый вывод. Взамен мы получаем две функции: set_voltage и set_speed.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | класс Двигатель постоянного тока: FREQ_Гц = 50 защиту __init__( себя, пин, вм, кв ): себя.vm = vm себя.kv = kv себя.сосна = сосна себя.нет = SBC.Даут() себя.нет.set_pwm( себя.штырь, себя.ЧАСТОТА_Гц, 0 ) себя.set_напряжение( 0 ) защиту set_voltage( себя, v ): pulse_percent_on = 100 *v/себя.vm себя.нет.set_pwm( себя.штырь, себя.ЧАСТОТА_Гц, 100-пульс_процент_он ) защиту set_speed( себя, об/мин): себя.set_voltage(об/мин/себя.кв ) |
Примером использования может быть следующее:
>>> время импорта
>>> импортировать sbc_mtr
>>> двигатель = sbc_mtr.Dc_Motor ("DOUT3", vm=12, kv=0.5)
>>> print("Контроль напряжения")
Контроль напряжения
>>> motor.set_voltage( 6 )
>>> time.sleep( 1 )
>>> motor.set_voltage( 0 )
>>> print("Управление скоростью")
Контроль скорости
>>> motor.set_speed( 100 )
>>> time.sleep( 1 )
>>> motor.set_speed( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | класс Серводвигатель: FREQ_Гц = 50 DUTY_MIN_мс = 0.5 DUTY_MAX_мс = 2.5 защиту __init__( себя, штырь ): себя.сосна = сосна себя.нет = SBC.Даут() себя.нет.set_pwm( себя.штырь, себя.ЧАСТОТА_Гц, 0 ) защиту set_angle( себя, угол_град ): duty_ms = себя.DUTY_MIN_мс + (себя.DUTY_MAX_мс-себя.DUTY_MIN_мс)*угол_град/ 180 пульс_процент_он = себя.FREQ_Гц*долг_мс/ 10 себя.нет.set_pwm( себя.штырь, себя.ЧАСТОТА_Гц, 100-пульс_процент_он ) |
И один пример использования:
>>> время импорта
>>> импортировать sbc_mtr
>>> мотор = sbc_mtr.Servo_Motor ("DOUT3")
>>> print("Установить угол 90 градусов")
Установите угол на 90 градусов
>>> мотор.set_angle( 90 )
>>> time.sleep( 1 )
>>> print("Установить угол 0 градусов")
Установите угол на 0 градусов
>>> мотор.set_angle( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | класс Шаговый двигатель: защиту __init__( себя, булавки): себя.штифты = штифты себя.нет = SBC.Даут() себя.состояние = 0 себя.шага = 0 себя.директория = 1 себя.таймер = машина.Таймер( -1 ) защиту шаг( себя, направление ): if( себя.состояние == 0 ): себя.нет.записывать( себя.булавки [0], 1 ) себя.нет.записывать( себя.булавки [1], 1 ) себя.нет.записывать( себя.булавки [2], 0 ) себя.нет.записывать( себя.булавки [3], 0 ) Элиф( себя.состояние == 1 ): себя.нет.записывать( себя.булавки [0], 0 ) себя.нет.записывать( себя.булавки [1], 1 ) себя.нет.записывать( себя.булавки [2], 1 ) себя.нет.записывать( себя.булавки [3], 0 ) Элиф( себя.состояние == 2 ): себя.нет.записывать( себя.булавки [0], 0 ) себя.нет.записывать( себя.булавки [1], 0 ) себя.нет.записывать( себя.булавки [2], 1 ) себя.нет.записывать( себя.булавки [3], 1 ) Элиф( себя.состояние == 3 ): себя.нет.записывать( себя.булавки [0], 1 ) себя.нет.записывать( себя.булавки [1], 0 ) себя.нет.записывать( себя.булавки [2], 0 ) себя.нет.записывать( себя.булавки [3], 1 ) себя.шага += направление себя.состояние = (себя.состояние + направление) & 0x03 защиту set_speed( себя, шаги_с, направление ): if( шаги_с и направление ): себя.таймер.инициализация(период=Int(1000 /шаги_с), режим=машина.Таймер.ПЕРИОДИЧЕСКИЙ, обратный звонок=лямбда тмр: себя.шаг (направление)) еще: себя.таймер.деинит() |
Наконец, пример использования:
>>> время импорта
>>> импортировать sbc_mtr
>>> двигатель = sbc_mtr.Stepper_Motor(["DOUT1", "DOUT2", "DOUT3", "DOUT4"] )
>>> print("Шаг за шагом")
Шаг за шагом
>>> для i в диапазоне (100):
... мотор.шаг( 1 )
... время.sleep_ms( 10 )
>>> печатать("Непрерывно")
Непрерывный
>>> motor.set_speed( 100, -1 )
>>> time.sleep( 1 )
>>> motor.set_speed( 0, 0 )