У овом водичу ћемо видети како да повежемо најчешће типове мотора на СБЦ. Такође ћемо вам показати како да се носите са њима на неким примерима. Најчешћи типови мотора су:
- ДЦ мотори су јефтини и лаки за контролу, потребан је само један излаз снаге и то се може активирати ПВМ сигналом.
- Серво мотори су слични ДЦ моторима, али укључују малу електронику и унутрашњи потенциометар за формирање затворене контролне петље, што омогућава контролу угла ротације. Управљање је такође ПВМ, али у овом случају је управљачки сигнал мале снаге и степен снаге је интегрисан у сам сервомотор.
- Корачни мотори имају неколико намотаја и захтевају контролу секвенце, али заузврат пружају велику прецизност пошто напредују корак по корак сваки пут када се поларитет њихових намотаја обрне.
1. ДЦ мотори
Да бисмо контролисали ДЦ мотор, спојићемо га на СБЦ као што је приказано на следећем дијаграму:


Мораћемо да знамо неке параметре нашег мотора, посебно однос између примењених волта и брзине мотора или Кв.

Класа Дц_Мотор представља ДЦ мотор, који контролише ПВМ на 50Хз. Као што се може видети, неки параметри морају бити обезбеђени, као што су напон напајања и Кв константа, као и пин који ће се користити. Заузврат добијамо две функције: сет_волтаге и сет_спеед.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | класа Дц_Мотор: ФРЕК_Хз = 50 деф __инит__( само, пин, вм, кв ): само.vm = vm само.kv = kv само.пин = пин само.доут = сбц.Доут() само.доут.сет_пвм( само.Бор, само.ФРЕК_Хз, 0 ) само.сет_волтаге( 0 ) деф сет_волтаге( само, в ): пулсе_перцент_он = КСНУМКС *v/само.vm само.доут.сет_пвм( само.Бор, само.ФРЕК_Хз, КСНУМКС-пулс_перцент_он ) деф сет_спеед( само, рпм): само.сет_волтаге( рпм/само.кв) |
Пример употребе би био следећи:
>>> време увоза
>>> импорт сбц_мтр
>>> мотор = сбц_мтр.Дц_Мотор( "ДОУТ3", вм=12, кв=0.5 )
>>> принт( "Контрола напона" )
Контрола напона
>>> мотор.сет_волтаге( 6 )
>>> тиме.слееп( 1 )
>>> мотор.сет_волтаге( 0 )
>>> принт( "Контрола брзине" )
Контрола брзине
>>> мотор.сет_спеед( 100 )
>>> тиме.слееп( 1 )
>>> мотор.сет_спеед( 0 )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | класа Серво мотор: ФРЕК_Хз = 50 ДУТИ_МИН_мс = 0.5 ДУТИ_МАКС_мс = 2.5 деф __инит__( само, пин): само.пин = пин само.доут = сбц.Доут() само.доут.сет_пвм( само.Бор, само.ФРЕК_Хз, 0 ) деф сет_англе( само, англе_дег ): дути_мс = само.ДУТИ_МИН_мс + (само.ДУТИ_МАКС_мс-само.ДУТИ_МИН_мс)*англе_дег/ КСНУМКС пулсе_перцент_он = само.ФРЕК_Хз*дути_мс/ КСНУМКС само.доут.сет_пвм( само.Бор, само.ФРЕК_Хз, КСНУМКС-пулс_перцент_он ) |
И један пример употребе:
>>> време увоза
>>> импорт сбц_мтр
>>> мотор = сбц_мтр.Серво_Мотор( "ДОУТ3" )
>>> принт( "Подесите угао на 90 степени" )
Подесите угао на 90 степени
>>> мотор.сет_англе( 90 )
>>> тиме.слееп( 1 )
>>> принт( "Подесите угао на 0 степени" )
Подесите угао на 0 степени
>>> мотор.сет_англе( 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 | класа Степпер_Мотор: деф __инит__( само, игле): само.бор = бор само.доут = сбц.Доут() само.били су = 0 само.кораци = 0 само.дир = 1 само.тајмер = машина.Тајмер( -1 ) деф корак( само, правац ): if( само.били су == 0 ): само.доут.писати ( само.игле [0], 1 ) само.доут.писати ( само.игле [1], 1 ) само.доут.писати ( само.игле [2], 0 ) само.доут.писати ( само.игле [3], 0 ) elif( само.били су == 1 ): само.доут.писати ( само.игле [0], 0 ) само.доут.писати ( само.игле [1], 1 ) само.доут.писати ( само.игле [2], 1 ) само.доут.писати ( само.игле [3], 0 ) elif( само.били су == 2 ): само.доут.писати ( само.игле [0], 0 ) само.доут.писати ( само.игле [1], 0 ) само.доут.писати ( само.игле [2], 1 ) само.доут.писати ( само.игле [3], 1 ) elif( само.били су == 3 ): само.доут.писати ( само.игле [0], 1 ) само.доут.писати ( само.игле [1], 0 ) само.доут.писати ( само.игле [2], 0 ) само.доут.писати ( само.игле [3], 1 ) само.кораци += правац само.били су = (само.били су + правац) & 0x03 деф сет_спеед( само, кораци_с, смер ): if( степ_с правац ): само.тајмер.инит (тачка=инт(1000/кораци_с), режим=машина.Тајмер.ПЕРИОДИЧНО, повратни позив=ламбда тмр: само.корак (смер)) друго: само.тајмер.деинит() |
На крају, пример употребе:
>>> време увоза
>>> импорт сбц_мтр
>>> мотор = сбц_мтр.Степпер_Мотор( ["ДОУТ1", "ДОУТ2", "ДОУТ3", "ДОУТ4"] )
>>> принт( "Корак по корак" )
Корак по корак
>>> за и у опсегу (100):
... мотор.степ( 1 )
... тиме.слееп_мс( 10 )
>>> принт( "Непрекидно" )
Непрекидан
>>> мотор.сет_спеед( 100, -1 )
>>> тиме.слееп( 1 )
>>> мотор.сет_спеед( 0, 0 )





