Шаговые двигатели включение

Добавлено: 20.08.2017, 02:24 / Просмотров: 82162

Содержание этой части обучения

шаговые двигатели включение

Как крутить шаговый двигатель

USB контроллер и USB драйвер шагового двигателя

Управление скоростью двигателя с помощью ШИМ

Программа для Windows на двигатель

Программа для микроконтроллера на двигатель

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

1) Шаговый двигатель, возьмем - Nema23 76 мм, вместо него может быть другой, управлять будем биполяным методом, любой гибридный и биполярный шаговый двигатель будет работать с таким же управлением.

2) Блок питания, возьмем - импульсный блок питания мощностью 360W с выходным напряжением 24V / 15A, может использоваться любой другой блок питания, если будет достаточно мощности и напряжения для работы двигателя. Более мощному двигателю будет нужно больше напряжения. Предел напряжения нашего драйвера ограничивается максимальным напряжением, которое выдерживают транзисторы, это 100V, у нас блок питания на 24V. В случае большего напряжения транзисторы в схеме необходимо заменить на более мощные, также при увеличении напряжения, транзисторы могут начать греться, если такое случилось, необходимо дополнительно обдувать их куллером (у меня все в порядке и куллер не требуется). Для подключения блока питания к сети 220V также нужен шнур и нужно определить где в вашей розетке ноль, а где фаза. Контакт блока N подключается к нулю, а L к фазе, также можно подключить заземление (но не обязательно). Определение возможно при помощи индикаторной отвертки, у меня определилось, что слева ноль, а справа фаза.

Nema 17

Nema 17 купить включение

Момент инерции: 56 oz-in

Момент инерции: 4 кг/см

Для соединителя: 5 мм

Импульсн. блок питания

Импульсн. блок питания купить
1300

РУБ.

НЕТ В НАЛИЧИИ

Вход: AC 220V

Выход: DC 24V

Максимальный ток: 15 A

Индикаторная отвертка

Индикаторная отвертка купить
110

РУБ.

НЕТ В НАЛИЧИИ

Макс. напряжение: 250V

Горит: Фаза (L)

Не горит: Ноль (N)

 

Как крутить шаговый двигатель

Шаговый двигатель работает от подачи комбинаций напряжения в разных направлениях на его обмотки, у этого шагового двигателя 2 обмотки - 4 провода, первая обмотка - черный (A) и зеленый (A) провод, вторая обмотка - красный (B) и синий (B). За одну смену комбинаций делается 1 шаг - 1,8 градусов. Если комбинации быстро менять, то двигатель будет быстро и точно позиционироваться - крутиться. Смена комбинаций возможна в двух направлениях, соответственно двигатель будет крутиться вперед или назад.

Чтобы крутить шаговый двигатель, надо:

1) Собрать устройство - USB контроллер шагового двигателя на микроконтроллере AVR и драйвер шагового двигателя, 2 в 1. Перед тем как собирать это сложное устройство, рекомендую сначало отдельно собрать и проверить работу только USB контроллера, его я уже собрал вот тут - контроллер USB. Если USB связь работает нормально, то можно приступать к изготовлению драйвера.

2) Написать программу для компьютера, которая будет посылать USB команды устройству.

3) Написать программу для микроконтроллера AVR, которая будет принимать USB команды и крутить двигатель.

USB контроллер шаговых двигателей и USB драйвер шагового двигателя

Взятый нами двигатель является гибридным и поддерживает несколько вариантов управления. Управлять двигателем будем биполярным методом и соответственно собираем мы драйвер биполярного шагового двигателя с USB контроллером. Сначало покажу готовый результат, а потом подробно рассмотрим его. Вот фото собранного драйвера шагового двигателя с USB управлением, который я собрал:

Драйвер шагового двигателя с USB управлением своими руками

Драйвер шагового двигателя с USB управлением своими руками

На картинке сверху - биполярный (гибридный) шаговый двигатель NEMA 23 с потреблением - 3А тока на обмотку. Под ним - импульсный блок питания 360 Вт, 24 В, 15 А. Мощности блока хватает на 15 / 3 = 5 одновременно запитанных обмоток, у одного двигателя 2 обмотки, т.е хватит на 2 одновременно работающих двигателя (4 обмотки). Я не вижу необходимости включать одновременно больше одного двигателя, в случае если необходимо двигаться по кривой траектории, то нужно чередовать короткие включения то одного, то другого двигателя. Так что имеющейся мощности с запасом хватает. Двигатель и блок питания подключены к устройству, которое также подключено через USB к компьютеру. Все соединено по схеме.

Схема драйвера биполярного шагового двигателя и USB контроллера (схема длинная и нуждается в прокрутке для просмотра):

Драйвер шагового двигателя USB на микроконтроллере AVR своими руками

Драйвер шагового двигателя USB на микроконтроллере AVR своими руками - схема своими руками

Электронные компоненты, которые надо купить для сборки устройства по схеме:

ATmega16A

ATmega16A купить

Что это: Микроконтроллер

Управление: 40 линий

Память программы: 16 Kb

Драйвер IR2101

Драйвер IR2101 купить

Что это: Драйвер ключей

Ключи: 2 транзистора

Корпус: DIP-8

Транзистор IRF540N

Транзистор IRF540N купить

Что это: Ключ

Максимальный ток: 33 A

Макс. напряжение: 100 V

Диод 1n4148

Диод 1n4148 купить

Тип: Обычный

Максимальный ток: 0.15 A

Макс. напряжение: 100 V

 

Конденсатор 20 pF

Конденсатор 20 pF купить

Емкость: 20 pF

Тип: Керамический

Макс. напряжение: 50 V

Конденсатор 3.3 nF

Конденсатор 3.3 nF купить

Емкость: 3.3 nF

Тип: Керамический

Макс. напряжение: 50 V

Конденсатор 2A104J

Конденсатор 2A104J купить

Тип: Пленочный

Емкость: 0.1 uF (мкФ)

Макс. напряжение: 100V

Клеммник

Клеммник купить

Контактов: 2

Зажим: прикрутка

 

Резистор 0.1 Ом

Резистор 0.1 Ом купить

Сопротивление: 0.1 Ом

Мощность: 5 Вт

Тип: Цементный

 

Кабель USB

Кабель USB купить
50

РУБ.

НЕТ В НАЛИЧИИ
Нужно 1 шт.

Интерфейс: USB 2.0

Длина: 100 см

Макетная плата

Макетная плата купить

Размер: 63 x 2 горизонтальных линий и 4 вертикальные линии

Проводки

Проводки купить

Тип: Навесные

Количество: 40

 

Дополнительно нужно (нет в наличии):

1) Модуль питания DC-DC SMAU01L-12 (вместо него пойдет любой конвертер DC-DC с 5V до 10V-15V) - 1 шт., возможно можно без него, от 5V питать (не проверено)

Главным компонентом схемы является программируемый микроконтроллер AVR - ATmega16A, если вы не знаете как с ними работать (записывать программу), сначало ознакомьтесь с основами такой работы, которые подробно описаны в первой статье
управление машиной. Для устройства можно использовать и другой микроконтроллер AVR, я выбрал ATmega16A, т.к. в нем с запасом имеется много памяти и контактов для подключения нескольких двигателей и большого количества рабочих инструментов.

Слева от ATmega16A находятся компоненты для организации связи по протоколу USB - к выводам XTAL подключен внешний кварцевый резонатор с USB-совместимой частотой 12 МГц. Для сглаживания сигнала у него есть 2 конденсатора по 20 пФ, все это соединяется с минусом питания. К контактам, через которые идет обмен сообщениями с USB, подключены 2 резистора по 68 Ом, как того требует протокол USB. Резистор на 1.5 кОм, подключенный к D- линии задает низкоскоростной режим работы USB устройства. Диоды Зенера 3V6 понижают напряжение на линиях, через которые идет обмен данными USB с 5 до 3.6V.

Управление двигателем подключается к контактам PB0, PB1, PB2, PB3, на остальные свободные P-контакты можно в будующем подключить еще двигатели и рабочие инструменты, но пока они пустуют. Микроконтроллер ATmega16 отдает команды и обрабатывает USB сигналы после того как в него записана программа (ниже она будет написана). После него идет конструкция из микросхем IR2102 и транзисторов IRF540N (2 так называемых H-моста) - она приводит шаговый двигатель в движение.

Драйвер IR2101 нужен для преодаления большой емкости затвора транзистора IRF540N, что позволяет открывать и закрыть транзистор с большой скоростью (например принимать сигнал ШИМ, которым может регулироваться скорость двигателя при необходимости - об этом сигнале дальше напишу), что нам и нужно. К сожалению для питания этого драйвера необходимо 10-15V, у нас есть только 5V от USB. Поэтому пришлось поставить компонент DC-DC SMAU01L-12, который преобразует 5V в 12V, вместо него можно использовать любой другой способ получения такого напряжения, например, при помощи трансформатора или любым другим путем. К VCC подключается +12V, к COM -12V. Один драйвер работает с 2мя транзисторами - верхним (H) и нижним (L). Контакты HIN и LIN - входной сигнал с микроконтроллера для верхнего и нижнего транзистора, по этому сигналу транзисторы открываются и закрываются. HO и LO - это выходные сигналы, транзисторы подключаются гейтами (G) к этим контактам. Они подключаются не просто так - справа на линиях 2 резистора 10/100 Ом и диод, они нужны для нормальной работы транзисторов - чтобы они замедлялись при открытии и не замедлялись при закрытии, эти транзисторы слишком быстро открываются и это может вызвать проблемы. Диод и конденсаторы 3300 пФ - нужны для работы драйвера IR2101 согласно документации на эту микросхему.

Каждая обмотка (фаза) двигателя (у двигателя 2 обмотки A и B - 4 контакта) подключается к H-мосту из транзисторов IRF540N. H-мост - это специальная схема соединения транзисторов, которая позволяет подавать через них напряжение высокого уровня (24V) в разных направлениях. Один мост изготавливается из 4-х транзисторов. В итоге здесь вы видите 2 H-моста, которые позволяют гонять разнонаправленное напряжение высокого уровня по 2м обмоткам двигателя и тем самым крутить его.

Обратите внимание, что в мосту - HIN верхнего драйвера соединяется с LIN нижнего драйвера, а LIN верхнего с HIN нижнего. Это сделано для одновременной подачи сигналов. Если вы включили HIN сверху, то обязаны включить LIN с низу, иначе произойдет короткое замыкание. Такое подключение позволяет автоматом включать пару. Впрочем короткое замыкание все же возможно, если вы откроете и HIN и LIN на одном мосте, поэтому не допускайте этого. На контактах PB0 - PB3 допустимы только значения 0000, 1010, 0110, 0101, 1001. Их перебор крутит двигатель. Подача других значений скорей всего приведет к короткому замыканию моста.

Мощные резисторы с низким номиналом 0.1 Ом и высокой мощностью (3-5 Вт) нужны для защиты от высокого тока - это шунты. Если что их можно снять и заменить простым соединением с минусом питания, если например не будет хватать мощности. Для слабых резисторов мощность берется от тока USB: 0.05 А 5 V = 0.25 Вт (ток USB задается программно, по умолчанию в нашей программе стоит 0.05). Черная полоска на диодах соответствует вертикальной линии на схеме.

Шаговый двигатель и блок питания подключаются к H-мостам, как показано на схеме. Минусы питания 24V, 12V и 5V соединяются. Между плюсом и минусом 24V линии ставится сглаживающий пленочный конденсатор.

Отдельное крупное фото драйвера шагового двигателя:

Драйвер шагового двигателя своими руками

Драйвер шагового двигателя своими руками

Сразу подключать питание высокого уровня (24V) к схеме и шаговый двигатель не рекомендую. Сначало лучше проверьте правильность работы устройства. Для этого можно использовать 5 светодиодов и отсек для батареек в качестве источника питания (3V). 1 светодиод подключается к контакту PA0 длинной стороной (+) и короткой стороной (-) к минусу питания. Этот желтый диод показан на первом фото сверху, на схеме его нет. С его помощью можно проверить работу USB контроллера, зажигать его и гасить по команде из программы. 2 других светодиода подключите на место первой обмотки шагового двигателя в разнонаправленном положении - один длинной стороной к первому контакту, другой длинной стороной ко второму контакту. Оставшиеся 2 светодиода таким же образом подключите на место второй обмотки. Вместо импульсного блока питания 24V подключите батарейный отсек и батарейки на 1.5V (2 батарейки - это 3V). Проверка устройства - при посылке команды кручения двигателя загораются различные светодиоды. Все светодиоды должны загораться в свое время при переборе комбинаций. Медленный перебор комбинаций позволяет точно убедиться в том, что все работает правильно.

 

Светодиод

Светодиод купить

Цвет: Красный

Напряжение: 3 V

Батарейки

Батарейки купить
10

РУБ.

НЕТ В НАЛИЧИИ
Нужно 2 шт.

Напряжение: 1.5 V

Размер: AA

 

Управление скоростью двигателя с помощью ШИМ сигнала

Управлять скоростью двигателя можно снижая подачу тока. Для этого вместо постоянного сигнала (на порты PB0, PB1, PB2, PB3) подается сигнал ШИМ. Суть ШИМ сигнала состоит в том, что это не постоянный сигнал, а быстрое включение и выключение. При этом интервал выключения можно изменять и направлять больше или меньше тока двигателю. Чем больше интервал выключения, тем медленней двигатель будет крутиться. В микроконтроллере AVR существует 2 способа получения ШИМ сигнала - программный ШИМ и аппаратный ШИМ.

Программный ШИМ делается на отдельном контроллере просто записью в него программы, этот контроллер подключается к уже имеющемуся контроллеру и сигнал идет не напрямую от ATmega16 к IR2101, а через этот ШИМ контроллер. Такое можно сделать на более мелком контроллере, например, ATtiny2313, программа для ATtiny2313, которая превращает его в программный ШИМ контроллер, вот она, эта программа на языке AVR Assembler...

Эта программа для микроконтроллера AVRПрограмма Комментарии

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

ldi r160b11111111 

out DDRB, r16 

ldi r160b00000000 

out DDRD, r16 

 

main: 

 

in r16PIN

out PORTB, r16 

rcall delay1 

 

ldi r160b00000000 

out PORTB, r16 

rcall delay0 

 

rjmp main 

 

 

delay1:  

ldi r16, 200 

perehod1: 

dec r16 

brne perehod1 

ret  

 

delay0:  

ldi r16, 120 

perehod2: 

dec r16 

brne perehod2 

ret

Записываем 1-цы в регистр r16

Настроили порт B на вывод

Записываем 0-ли в регистр r16

Настроили порт D на ввод

Начало основной программы

Записываем в r16 то что на порте D (читаем)

Записываем в порт B прочтенные данные

Задерживаем (для включения ШИМ на порт D надо подать 1)

Записываем 0-ли в r16

Записываем в порт B эти 0-ли

Задерживаем данные (это всегда 0)

Переход на начало основной программы

Начало функции delay1, которая задерживает 1

Держим 1-цу 200 операций

Конец функции delay1

Начало функции delay0, которая задерживает 0

Держим 0-ль 120 операций

Конец функции delay0


Ток регулируется изменением чисел 200 и 120. 200 - время включения, 120 - время выключения. Сумма 200+120=320 дает частоту ШИМ 25 кГц (при условии, что контроллер работает на частоте 8 МГц от внутреннего генератора, такая там стоит по умолчанию, получается 8000000/320=25000). Сумма должна оставаться такой, а числа можно менять, чем больше первое число, тем ток больше.

Кроме того существует аппаратный ШИМ, который автоматически включается на линиях в микроконтроллере AVR через таймер счетчик. Однако тут есть недостаток - нужно пользоваться прерыванием для считывания сигнала таймера счетчика и передачи его на несколько портов. В виду постоянной ШИМизации и при большом количестве таких портов, возникает проблема перегруженности прерываний - если прерывание не уложится в период ШИМ, то в его конце запустится еще одно такое прерывание и контроллер зависнит, а ведь есть еще и другие прерывания, которые могут возникнуть в любое время! Аппаратный ШИМ есть в текущей версии программы для микроконтроллера.

Программа для Windows на двигатель

Уже готовую программу для Windows на USB контроллер нужно немного изменить. В итоге должны перебираться комбинации для подачи напряжения в разных направлениях, нам нужно менять значения на портах PB0, PB1, PB2, PB3, следующие комбинации нужны для запуска двигателя 1010, 0110, 0101, 1001. Перебор их в одну сторону - кручение в эту сторону, в другую - кручение обратно. 0000 - отключает питание, необходимо в конце перебора, иначе двигатель нагреется. Сейчас над этой программой ведется работа, так что возьмите из USB контроллера, связь там работает.

Программа для робота под Windows

Программа для робота под Windows

Программа для микроконтроллера на двигатель

Программа для микроконтроллера еще недоделана и находится в разработке, но то что было сделано вот оно, язык WinAVR C... Это программа для микроконтроллера AVR, которая создана в программе WinAVRПрограмма Комментарии

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

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

volatile unsigned char posn=1; 

volatile unsigned char step=0; 

volatile unsigned char kuda=0; 

volatile unsigned char hold=8; 

volatile unsigned char holn=1; 

volatile unsigned char pwm1=0b00000000; 

volatile unsigned char pwm0=0b00000000; 

volatile unsigned char p1; 

volatile unsigned char p2; 

 

#include <avr/io.h> 

#include <avr/wdt.h> 

#include <avr/interrupt.h> 

#include <util/delay.h> 

#include <avr/pgmspace.h> 

 

#include "usbdrv/usbdrv.h" 

#include "requests.h" 

 

PROGMEM char usbHidReportDescriptor[22] = { 

0x06, 0x00, 0xff, 0x09, 0x01, 0xa1, 0x01, 0x15,  

0x00, 0x26, 0xff, 0x00, 0x75, 0x08, 0x95, 0x01,  

0x09, 0x00, 0xb2, 0x02, 0x01, 0xc0}; 

 

usbMsgLen_t usbFunctionSetup(uchar data[8]) 

usbRequest_t rq = (void )data; 

if ((rq->bmRequestType & USBRQ_TYPE_MASK) == USBRQ_TYPE_VENDOR) { 

 

 

//пакет с ПК на МК 

if (rq->bRequest == CUSTOM_RQ_SET_STATUS) { 

p1 = rq->wValue.bytes[0]; 

p2 = rq->wIndex.bytes[0]; 

 

//========= ПРОГРАММА РЕАКЦИИ НА USB ПАКЕТ 

 

//лампочка 

if (p1==0) { 

// тушим свет лампочка гори! 

if (p2==0) PORTB&=(1<<PB0); else if (p2==1) PORTB|=(1<<PB0); 

 

//ШИМ 

if (p1==1) { 

 

 

//отключаем 

if (p2==0) { 

 

TIMSK=(0<<TOIE2)|(0<<OCIE0)|(0<<TOIE0); 

TCCR0=(0<<CS02)|(0<<CS01)|(0<<CS00); 

TCCR2=(0<<CS22)|(0<<CS21)|(0<<CS20); 

 

 

//включаем 

else if (p2==1) { 

 

TIMSK=(1<<TOIE2)|(1<<OCIE0)|(1<<TOIE0);  

TCCR0=(1<<WGM00)|(0<<COM01)|(0<<COM00)|(1<<WGM01)|(0<<CS02)|(0<<CS01)|(1<<CS00); 

TCCR2=(1<<WGM20)|(0<<COM21)|(0<<COM20)|(1<<WGM21)|(0<<CS22)|(1<<CS21)|(0<<CS20); 

OCR2=100; 

 

 

//вернуть на 47 

else if (p2==2) { 

TCCR0=(1<<WGM00)|(0<<COM01)|(0<<COM00)|(1<<WGM01)|(0<<CS02)|(0<<CS01)|(1<<CS00); 

 

//поставить 6 

else if (p2==3) { 

TCCR0=(1<<WGM00)|(0<<COM01)|(0<<COM00)|(1<<WGM01)|(0<<CS02)|(1<<CS01)|(0<<CS00); 

 

//поставить /1024 

else if (p2==4) { 

TCCR0=(1<<WGM00)|(0<<COM01)|(0<<COM00)|(1<<WGM01)|(1<<CS02)|(0<<CS01)|(1<<CS00); 

 

//подача энергии 

if (p1==2) { 

OCR0=p2; 

 

//отключить питание 

if (p1==3) { 

PORTB&=((1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)); 

 

//настройки кручения - шаги 

if (p1==4) { 

step=p2; 

 

//настройки задержки - сколько между шагами 

if (p1==5) { 

hold=p2; 

holn=p2; 

 

//настройки направления 

if (p1==6) { 

kuda=p2; 

//========== ПРОГРАММА РЕАКЦИИ КОНЕЦ 

 

//пакет с МК на ПК 

else if (rq->bRequest == CUSTOM_RQ_GET_STATUS){ 

 

static uchar dataBuffer[1]; 

dataBuffer[0] = 1; 

usbMsgPtr = dataBuffer; 

return 1; 

 

return 0; 

 

 

 

 

 

int main(void)  

//включаем USB 

uchar i; 

wdt_enable(WDTO_1S); 

usbInit(); 

usbDeviceDisconnect(); 

i = 0; 

while(--i){ 

wdt_reset(); 

_delay_ms(1); 

usbDeviceConnect(); 

DDRB = 0b11111111; 

sei(); 

 

while (1) { 

wdt_reset(); 

usbPoll(); 

 

 

 

 

 

ISR (TIMER0_OVF_vect) 

PORTB=pwm1; 

 

ISR (TIMER0_COMP_vect) 

PORTB&=(1<<PB1); 

PORTB&=(1<<PB2); 

PORTB&=(1<<PB3); 

PORTB&=(1<<PB4); 

 

ISR (TIMER2_OVF_vect) 

if (step>0) { 

holn--; 

if (holn==0) { 

holn=hold; 

if (kuda==0) posn++; else posn--; 

if (posn==5) posn=1; 

if (posn==0) posn=4; 

if (posn==1) pwm1=0b01010101; 

if (posn==2) pwm1=0b01100110; 

if (posn==3) pwm1=0b10101010; 

if (posn==4) pwm1=0b10011001; 

step--; 

else { 

pwm1=0b00000000; 

}

Текущая позиция ШД - 0 стоит, туда 1234, обратно 4321

Сколько еще осталось открутить шагов

Направление кручения - 0 туда, 1 обратно

Задержка между шагами в периодах таймера T2

Текущее значение счетчика задержки

Переменная показывает на каких линиях включать ШИМ

Переменная показывает на каких линиях отключать ШИМ

Первый параметр с ПК USB

Второй параметр с ПК USB

Подключаем дополнительные библиотеки WinAVR, которые необходимы

Подключаем файлы

Дескриптор USB

Функция обработки USB пакета с ПК

В USB пакете с ПК приходит 2 параметра числа - p1 и p2, в зависимости от их значений решаем что делать

Обработка пришедших номеров p1 и p2

На приход нуля в первом параметре в пакете с ПК ставим включение и выключение лампочки, которая установлена на линии PB0 микроконтроллера AVR, второй параметр определяет - включить или выключить

Единица будет настраивать параметры ШИМ

Отключение таймеров счетчиков по приходу нуля

Запрещаем прерывания от таймеров счетчиков T0 и T2

Останавливаем таймер счетчик T0

Останавливаем таймер счетчик T2

Включение таймеров счетчиков по приходу единицы

Разрешаем прерывания - по совпадению, по переполнению

Настраиваем T0 - 256 тактовый, без деления частоты

Настраиваем T2 - 256 тактовый, деление частоты на 8

Ставим на любое число совпадение T2, оно не используется

По двойке возвращаем частоту ШИМ 47 кГц

По тройке установить частоту ШИМ 6 кГц

По четверке сделать частоту несколько Гц

Задать уровень подачи энергии на двигатель, заполнение интервала ШИМ - от 0 (1%) до 256 (100% энергии)

Выключает питание, если что-то пошло не так

Устанавливает сколько еще шагов открутить надо

Устанавливает параметры задержки между шагами - сколько периодов таймера T2 держать задержку, перед тем как сделать следующий шаг

Здесь устанавливается переменная, которая определяет направление кручения

Это не используется, пока не нужно. Отправка пакета с 1 обратно от ПК от МК.

Основной цикл программы

Watchdog таймер включаем для повышения надежности

Инициализация USB

Делаем стартовый дисконект на 250 мс

Устанавливаем на вывод порт B

Разрешаем прерывания

Бесконечно опрашиваем USB порт в ожидании пакета с ПК. Также watchdog таймер сбрасываем, который перезагружает МК в случае зависания.

Прерывание по переполнению ШИМ таймера T0 - ставим высокий уровень сигнала на линиях, где это нужно, они в pwm1 и постоянно меняются

Прерывание по совпадению таймера T0 - обнуляем все экономичным для расхода тактов способом

Прерывание по переполнению шагового таймера T2. Если есть шаги для открутки и пришло время - делать их в установленном направлении или обесточить двигатель.


Биты конфигурации для ATmega16A:
CKSEL3..0=1111   SUT0..1=10   BODEN=0   BODLEVL=1   BOOTRST=1   BOOTSZ0..1=00   EESAVE=1   CKOPT=0   SPIEN=0   JTAGEN=1   OCDEN=1   LB1..2=00   BLB=0000

Тех. поддержка ответит на ваши вопросы по этой статье


Источник: http://openrobo.ru/control/driver


Закрыть ... [X]

Параллельное включение шаговых двигателей Легкие прически на короткие волосы пошаговое фото


Шаговые двигатели включение Драйвер шагового двигателя своими руками
Шаговые двигатели включение Управление шаговым двигателем Электрик
Шаговые двигатели включение Схемы управления шаговыми двигателями
Шаговые двигатели включение Шаговые двигатели - fo
Шаговые двигатели включение Stepper motors Digit-EL
Шаговые двигатели включение Sredstva
Шаговые двигатели включение Аниме рисунки карандашом
Шаговые двигатели включение ВЯЗАНИЕ НОСКОВ - СХЕМЫ ВЯЗАНИЯ - Вязание крючком и спицами
Шаговые двигатели включение ВЯЗАНИЕ ПИНЕТОК - СХЕМЫ ВЯЗАНИЯ - Вязание крючком и спицами
Веселые Петельки ЧУДО -КЛУБОК. РУ Житие старца Паисия Святогорца Православие и мир Изготовление поделки Петух из природных Как сделать халву в домашних условиях - 4 рецепта Куплю/Продам ТРАНСИВЕРЫ Yaesu