Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » управление ШД
управление ШД
доцент2 Дата: Пт, 12.10.2012, 22:02  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

для пробы взял ШД М42SP-5 и UNL2003.
программу пока приводить не буду, она очень простая. цель запустить вал ШД сначала в одну сторону, а затем в другую на заданное количество шагов.
Проблемка следующая:
Например, надо сделать 12 шагов по 7,5 градусов, т.е. вал должен повернуться на 90 градусов. Первый шаг вал совершает в обратную сторону, а остальные 11 в нужную.
в результате вал поворачивается на 82,5 градуса. Если продолжать вращение в туже сторону после остановки, то все нормально.
А если запускаем в обратную сторону, то таже картина 1 шаг обратно, все остальные в нужном направлении.
Подскажите в чем может быть дело.
ЯНДЕКС Дата: 12.10.2012
dimitriy-bc Дата: Сб, 13.10.2012, 00:28  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Скорее всего, проблема в следующем. Когда ШД обесточен, то статор притягивает ротор, полюс к полюсу. Один из вариантов, Вы, я предполагаю, в первом шаге подаете ток на обе обмотки. Соответственно полюс ротора располагается между двух полюсов статора. Двигатель делает не один шаг назад, а половину шага. Также, обратите внимание на следующее, программа должна, перед обесточиванием, останавливаться на шаге, а не полушаге и начинаться, при первом включении, с того же шага на котором закончилась. В противном случае, Вам необходимо использовать маяки, для привязки привода к отправной точке.
Для того чтоб помочь Вам разобраться, напишите двигатели используемые Вами униполярные или биполярные. Сколько градусов на шаг. Управление полно шаговое или полу шаговое, ну и программа не помешает.

Сообщение отредактировал dimitriy-bc - Сб, 13.10.2012, 00:51
DAlexV Дата: Сб, 13.10.2012, 02:40  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Судя по мануалу это Unipolar . Для того что бы не дергался обратно как правильно сказал dimitriy-bc, сначала подаем толко на 1 оботку, а потом уже переходим на полушаг (или микрошаг).
http://electronics-diy.com/electronics/stepper_motors.php Можно для начала попробовать с помошью компа
http://www.picbasic.ru/forum/9-168-1#1796 То же в параллельной ветке

Успехов wink


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
доцент2 Дата: Сб, 13.10.2012, 10:13  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Спасибо за ответы.
Движок униполярный (четыре обмотки с общей точкой).
За один шаг вал вращается на 7,5 градусов.
Программа управляет в шаговом режиме, т.е.
1000
0100
0010
1000 и т.д.
схема аналогична представленной на рис.
программка простенькая
Прикрепления: 3047300.jpg (51.8 Kb) · 4517363.bas (5.0 Kb)

Сообщение отредактировал доцент2 - Сб, 13.10.2012, 10:17
DAlexV Дата: Сб, 13.10.2012, 16:17  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (доцент2)
Программа управляет в шаговом режиме, т.е. 1000 0100 0010 1000 и т.д

Четветый шаг должен быть 0001, но это просто очепятка. В программе все норм. Еще из за чего движок может дергаться, если при окончании вращения забыл напругу с обмотки снять. Хотя нет, загнал в Прота, и все сразу стало на свои места. Ищем косяк который сбивает последовательность.

И до кучи еще архив приложил. Удачи wink
Прикрепления: 9931693.png (15.1 Kb) · Stepper.rar (51.3 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
доцент2 Дата: Сб, 13.10.2012, 23:07  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

с последовательностью это действительно опечатка.
в начале программы сброс есть и после выполения подпрограмм то же есть.
сейчас добавил сброс в ноль и перед каждой подпрограммой, результат тот же - первый один шаг в обратную сторону.
не понятно откуда возникает сбой последовательности на выходе МК?
ладно, если в протеусе, но это и в железе происходит!

Сообщение отредактировал доцент2 - Сб, 13.10.2012, 23:08
DAlexV Дата: Сб, 13.10.2012, 23:10  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (доцент2)
ладно, если в протеусе, но это и в железе происходит!
Да нет, хуже когда наоборот. Сейчас попробую посмотреть код, может чего и пойму.


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
DAlexV Дата: Сб, 13.10.2012, 23:18  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

доцент2, Проблема лежит в переменной "Х". Если не секрет, то для чего она ???? Не особо понятно.

Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
dimitriy-bc Дата: Сб, 13.10.2012, 23:39  |                                                                                                                Сообщение # 9
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Всем доброго времени суток. Ваша ошибка при переходе на обратное вращение, мне кажется, в следующем. По окончании вращения влево, в Х.1 у Вас записан 0. Соответственно при реверсе программа переходит на участок 8), а должна перейти на участок 6).

MainProgram:
Inc w ' ========
DelayMS 500 '
If w=1 Then Hag_in=48: GoTo HAG_POL '
DelayMS 500 '
If w=2 Then Hag_in=12: GoTo HAG_POL '
DelayMS 500 ' для пробы задаем последовательность шагов
If w=3 Then Hag_in=12: GoTo HAG_OTR ' и направление вращения
DelayMS 500 '
If w=4 Then Hag_in=48: GoTo HAG_OTR '
DelayMS 500 '
If w=5 Then w=0: GoTo End_Hag ' =========

' паузы выставлены для нагладности

HAG_POL: 'вращение например влево
DelayMS 100
If Hag=Hag_in Then GoTo End_Hag
1) If X.1=0 Then BIT4=1:BIT5=0:BIT6=0:BIT7=0: X.1=1: X.2=0: Inc Hag
'++++++++++++++++++++++++++++++++++++
DelayMS 100
If Hag=Hag_in Then GoTo End_Hag
2) If X.2=0 Then BIT4=0:BIT5=1:BIT6=0:BIT7=0: X.2=1: X.3=0: Inc Hag
'++++++++++++++++++++++++++++++++++++
DelayMS 100
If Hag=Hag_in Then GoTo End_Hag
3) If X.3=0 Then BIT4=0:BIT5=0:BIT6=1:BIT7=0: X.3=1: X.4=0: Inc Hag
'++++++++++++++++++++++++++++++++++++
DelayMS 100
If Hag=Hag_in Then GoTo End_Hag
4) If X.4=0 Then BIT4=0:BIT5=0:BIT6=0:BIT7=1: X.4=1: X.1=0: Inc Hag
GoTo HAG_POL

HAG_OTR: 'вращение вправо
DelayMS 100
If Hag=Hag_in Then GoTo End_Hag
5) If X.4=0 Then BIT4=0:BIT5=0:BIT6=0:BIT7=1: X.4=1: X.3=0: Inc Hag
'++++++++++++++++++++++++++++++++++++
DelayMS 100
If Hag=Hag_in Then GoTo End_Hag
6) If X.3=0 Then BIT4=0:BIT5=0:BIT6=1:BIT7=0: X.3=1: X.2=0: Inc Hag
'++++++++++++++++++++++++++++++++++++
DelayMS 100
If Hag=Hag_in Then GoTo End_Hag
7) If X.2=0 Then BIT4=0:BIT5=1:BIT6=0:BIT7=0: X.2=1: X.1=0: Inc Hag
'++++++++++++++++++++++++++++++++++++
DelayMS 100
If Hag=Hag_in Then GoTo End_Hag
8) If X.1=0 Then BIT4=1:BIT5=0:BIT6=0:BIT7=0: X.1=1: X.4=0: Inc Hag
GoTo HAG_OTR

End_Hag:
Hag=0

Добавлено (13.10.2012, 23:39)
---------------------------------------------
Переменная Х, используется при реверсировании. Благодаря ей программа знает, с какого шага начинать реверсивное движение.

доцент2 Дата: Сб, 13.10.2012, 23:45  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

попробую это исправить. Но остается вопрос, почему при первом запуске (влево или вправо) вал ШД дергается в обратную сторону на один шаг.
DAlexV Дата: Вс, 14.10.2012, 00:38  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (dimitriy-bc)
Переменная Х, используется при реверсировании. Благодаря ей программа знает, с какого шага начинать реверсивное движение.
Счетчик номера шага. Прикольно что в двоичном счислении.
Немного переделал программу. Единый блок для вращения и по часовой, и против. Приложил, изучайте, успехов wink
Прикрепления: Stepper_2.rar (18.9 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
ЯНДЕКС Дата: 14.10.2012
доцент2 Дата: Вс, 14.10.2012, 11:10  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Переменная Х введена для определения "позиции" при движении в прямом и обратном направлении. В памяти переменные Byte и Bit все равно занимают 8 ячеек.
DalexV спасибо за упрощение кода.Непонятно вот это
Dec StepN ' -1 к номеру шага

If StepN >=254 Then ' если больше 254
StepN =3 ' то номер шага 3
End If
Почему 254, может записать StepN <=0?

Загнал прошивку в железо - опять первый шаг назад остальные вперед, тоже самое при реверсе.
dimitriy-bc Дата: Вс, 14.10.2012, 19:09  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

доцент2, попробуйте такой вариант.
Прикрепления: 9308812.rar (18.8 Kb)
доцент2 Дата: Вс, 14.10.2012, 20:37  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 287
Репутация: 10   ±
Замечания:   ±
На сайте с 13.09.2011

Статус: Offline

Не работает однако! В условиях ошибка, надо разбираться.
Вот, подправил:
STEP_C:
DelayMS 20
If Hag=Hag_in Then GoTo End_Hag
Hag = Hag + 1
DelayMS 10
If FLAG.0 = 0 Then
X=X+1
If X >= 5 Then
X=1: GoTo WORK
Else
GoTo WORK
EndIf
Else
X=X-1
If X <= 0 Then
X=4: GoTo WORK
Else
GoTo WORK
EndIf
EndIf

заработало отлично, сбоев нет!!!
может кто объяснит, в чем существенная разница.

Сообщение отредактировал доцент2 - Вс, 14.10.2012, 21:19
DAlexV Дата: Пн, 15.10.2012, 22:37  |                                                                                                                Сообщение # 15
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (доцент2)
DalexV спасибо за упрощение кода.Непонятно вот это Dec StepN ' -1 к номеру шага If StepN >=254 Then ' если больше 254 StepN =3 ' то номер шага 3 End If Почему 254, может записать StepN <=0?
Соори, горю на работе поэтому бываю урывками.
Quote (DAlexV)
Dec StepN ' -1 к номеру шага If StepN >=254 Then ' если больше 254 StepN =3
Здесь все просто. Переменная Byte может принимать значение 0-255, и если от 0 сделать вычитание Dec StepN, то получиться $FF или 255(DEC). И поэтому для подстраховки было выбрано число 254, ведь 254 шаг не может существовать. Проще говоря если после вычитания номер шага более 200, то номер шага равен максимально возможному значению.
Quote (доцент2)
В памяти переменные Byte и Bit все равно занимают 8 ячеек
Здесь несогласен. Это классика жанра как говорят. 1 Byte= 8 Bit. Или как считают программисты в одном километре 1024 метра smile
Quote (доцент2)
Но остается вопрос, почему при первом запуске (влево или вправо) вал ШД дергается в обратную сторону на один шаг.
. Тогда есть предположение о перепутанных обмотках. вместо последовательности 0-1-2-3 идет 1-2-3-0. Как следствие первый шаг назад, а далее уже нормально.
Успехов wink


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Форум Picbasic.ru » Программирование МК » Proton PicBasic » управление ШД
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: