STEP/DIR контроллер 3-х шаговых двигателей на микроконтролле

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

как показала практика на всех моих 6 attiny44 присутствуют дохлые пины :( пришлось лопатить загашники в поисках mega16 :) надыбал и начал всё по новой :) вот сижу паяю на макетной плате проводочками :) как будет готово буду пробовать а пока работаем :) собрал схему контролера, залил прогу, проверил не работает :( исправил вроде работает только не всегда корректно работает чтение с пина.... тестим дальше.....

Код: Выделить всё

Do
'урпавление X
If X = 1 Then
Pwm1a = Max_pwm
If X2 = 1 Then
Gosub Os_x1
Else
Gosub Os_x0
End If
X = 0
Pwm1a = Min_pwm
End If
'урпавление Y
If Y = 1 Then
Pwm1b = Max_pwm
If Y2 = 1 Then
Gosub Os_y1
Else
Gosub Os_y0
End If
Y = 0
Pwm1b = Min_pwm
End If
'урпавление Z
If Z = 1 Then
Pwm2 = Max_pwm
If Z2 = 1 Then
Gosub Os_z1
Else
Gosub Os_z0
End If
Z = 0
Pwm2 = Min_pwm
End If
Loop

'действия при прерываниях
Step_x:
X2 = Pind.0
X = 1
Return

Step_y:
Y = 1
Y2 = Pind.1 ' Getrc(pind , 1) пробовал так... работает чётко но долго
Return

Step_z:
Z2 = Pind.6
Z = 1
Return
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

Вот что получилось смотри вложение, пока только контроллер, драйвера в процессе :)
возникла сложность в процессе прошивки МК а именно FUSE частоты работы... не хочет выставляться 1000h то есть работа от внешнего кварца 8-12 М герц, пишет ошибка и переключается в режим внешней генерации на МК, пришлось :solder: отдельно схему для запуска МК
извеняюсь за качество снимка но снимал сотиком на скору руку :wink:
PS
убил весь вечер на пробы с МК, прбовал все варианты по настройке Fuse так и не смог затустить проц на 12М герц :( ладно буду пробовать на 8М герц
Вложения
Lord's-0258_1.jpg
Фото контроллера
(221.23 КБ) 1228 скачиваний
Idea_FIX
Встал на лапы
Сообщения: 111
Зарегистрирован: Пт сен 30, 2011 05:55:31
Откуда: Питер

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение Idea_FIX »

to lordswars: Это уже интересно. Драйверы, думаю, подойдут такие, как в проекте Freeman'a. Мне кажется, что у него же стоит спросить и про генерацию от внешнего кварца, т.к. его схема работает на ятЬ. Во всяком случае, у меня проблем не было абсолютно никаких (если не считать одного оказавшегося бракованным полевика) - работает уже месяца три без каких-либо нареканий. Ты прошивку через Ponyprog заливаешь? Я ей заливал.
Через тернии - к звездам
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

to Idea_FIX я работаю в BASCON програматор ASPUSB а заливаю сразу с базовой проги как только написал :) есть конечно прикол, если ты не очистил МК перед заливкой то работать будет какпопало но это мелочи :)
Начал вчера собирать драйверы... и всал в непонятках.... транзистор Т1 выбирал от 315 до 815 (угробил 6 шт :) сейчас стоит КТ815Г), транзистор Q6 irfz44 (пока все живые), R6 от 150ом до 22К, питание 12вольт 10А, в программе выставлен максимально возможный шим --- вообщем ситуация такая, с ноги МК 4.5V, Т1 на выходе от 0.1 до 11V(в зависимости от R6) , резистор кипятильник и в результате на Q6 от 0.5V до 8.75V,большего не смог добиться либо горит транзистор Т1 либо резистор если брать более 22К правда нагрузку не подключал мерил в режиме ХХ (холостого хода), IRFZ44 на ноге GATE от +5V(закрыт) до 0V(открыт) или я чего то не понимаю но во всяком случае так именно у меня есть :( даже пробовал собирать схему в оригинале но в результате так и не добился 12V на выходе....
По поводу генерации я посчитал, правда нужно еще проверять на практике что и 8Мгерц должно хватить так что пока не заморачиавюсь :) хотя не поленился и впаял в контроллер генератор сигнала и перемычку на XALT1 :)) а вдруг приспичет.
К следующим выходным планирую починить всё таки осцилограф и посмотреть что же у меня на кварце а то я так думаю что проблемма именно в кварце а не в программировании МК
Idea_FIX
Встал на лапы
Сообщения: 111
Зарегистрирован: Пт сен 30, 2011 05:55:31
Откуда: Питер

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение Idea_FIX »

IRFZ44 n-канальный транзистор (подсмотрел в даташите), здесь он не годится. Его можно использовать как Q2-Q5, на Q6 нужен p-канальный, например IRF9z34n (у меня стоит IRF9530n).
Через тернии - к звездам
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

:facepalm: мда... чёт я даже не подумал над этим .... спасибо за подсказку :) видимо нужно всё таки паять не после работы а в выходные.... :)
и того ... вечер пиво и паяльник :) транзистор Т1 заменил на IRFZ44, R6-750Om и всё заработало :) в режиме ШИМ-255 на выходе 12вольт, ШИМ-100 на выходе 6.65вольт.
прикрутил один контроллер к шаговику подключил к компу... поставил Матч3 поигрался с настройками... ну не хочет нормально крутить :( сходил еще за пивом, поставил КСАМ полез а настройки.... через 3 минуты закрутился нормально без глюков..... во все стороны :)
осталось спаять 2 драйвера и разобраться почему ШИМ на оси Z даёть всего 0.50вольта вместо 4.5, толи программа то ли порт....
эксперерменты с ШИМ ставил на оси X и как я над ним не изголялся работает.....
PS обнаружил что цешка не видит пульсации ШИМ и мощность моторов упала .... буду думать....
Последний раз редактировалось lordswars Сб мар 31, 2012 20:24:13, всего редактировалось 1 раз.
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

вот код программы последняя редакция, ШИМ отрубается до половины через 1сек. после окончания последней команды

Код: Выделить всё

$regfile = "m16def.dat"
$crystal = 8000000


' êîíôèãóðàöèÿ ïîðòîâ
Config Porta = Output
Config Portc = Output
Config Portb = Input
Config Portd = Input
' êîíôèãóðàöèÿ ïðåðûâàíèé
On Int0 Step_x
On Int1 Step_y
On Int2 Step_z
Config Int0 = Falling
Config Int1 = Falling
Config Int2 = Falling
Enable Interrupts
Enable Int0
Enable Int1
Enable Int2
' конфигурация ШИМ
Config Timer0 = Pwm , Prescale = 1 , Pwm = On , Compare Pwm = Clear Up
Config Timer2 = Pwm , Prescale = 1 , Pwm = On , Compare Pwm = Clear Up
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
' ïåðåìåííûå
Dim Dport As Byte
Dim D As Integer
Dim 2int As Bit
Dim X As Byte
Dim Y As Byte
Dim Z As Byte
Dim X1 As Byte
Dim Y1 As Byte
Dim Z1 As Byte
Dim Max_pwm As Byte
Dim Min_pwm As Byte
Dim X2 As Byte
Dim Y2 As Byte
Dim Z2 As Byte
'óñòàíàâëèâàåì øèì
Max_pwm = 255                                               'ìåíÿÿ çíà÷åíèå ïîäáèðàåì íóæíûé òîê âî âðåìÿ äâèæåíèÿ
Min_pwm = 100                                               ' ìåíÿÿ çíà÷åíèå ïîäáèðàåì òîê óäåðæàíèÿ
Pwm1a = Max_pwm
Pwm1b = Max_pwm
Pwm2 = Max_pwm
'porta äâà ìîòîðà - portc îäèí ìîòîð 0-3
'ñäâèãàåì âñå äâèãàòåëÿ äëÿ íîðìàëüíîãî ðàñïîëîæåíèÿ ìàãíèòîâ
Waitms 30
Porta = &B00010001
Waitms 30
Porta = &B00110011
Waitms 30
Porta = &B00100010
Waitms 30
Porta = &B01100110
Waitms 30
Porta = &B01000100
Waitms 30
Porta = &B11001100
Waitms 30
Porta = &B10001000
Waitms 30
Porta = &B10011001
Waitms 30
Porta = &B00010001
Waitms 30
Portc = &B00000001
Waitms 30
Portc = &B00000011
Waitms 30
Portc = &B00000010
Waitms 30
Portc = &B00000110
Waitms 30
Portc = &B00000100
Waitms 30
Portc = &B00001100
Waitms 30
Portc = &B00001000
Waitms 30
Portc = &B00001001
Waitms 30
Portc = &B00000001
Waitms 30
'ñòàâèì øèì íà ìàëûé òîê óäåðæàíèÿ
Pwm1a = Min_pwm
Pwm1b = Min_pwm
Pwm2 = Min_pwm
'îñíîâíàÿ ïðîãà
'Dp0-dir_x, Dp1-dir_y, Dp6-dir_z  Dp2-step_x Dp3-step_y Pb2-step_z
X1 = 1
Y1 = 1
Z1 = 1
D = 1
Do
If D = 1 Then
Pwm1a = Max_pwm
Pwm1b = Max_pwm
Pwm2 = Max_pwm
Else
End If

Incr D
'óðïàâëåíèå X
If X = 1 Then
If X2 = 1 Then
Gosub Os_x1
Else
Gosub Os_x0
End If
X = 0
End If
'óðïàâëåíèå Y
If Y = 1 Then
If Y2 = 1 Then
Gosub Os_y1
Else
Gosub Os_y0
End If
Y = 0
End If
'óðïàâëåíèå Z
If Z = 1 Then
If Z2 = 1 Then
Gosub Os_z1
Else
Gosub Os_z0
End If
Z = 0
End If

If D = 10000 Then
Pwm1a = Min_pwm
Pwm1b = Min_pwm
Pwm2 = Min_pwm
D = 254
Else

End If
Loop

'äåéñòâèÿ ïðè ïðåðûâàíèÿõ
Step_x:
X2 = Pind.0
X = 1
D = 1
Return

Step_y:
Y = 1
D = 1
Y2 = Pind.1                                                 '       Getrc(pind , 1)
Return

Step_z:
Z2 = Pind.6
Z = 1
D = 1
Return

'äâèæåíèå îñåé
Os_z0:
Incr Z1
If Z1 = 9 Then
Z1 = 1
End If
Select Case Z1
Case 1 : Do
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 0
         Loop Until Z = 1
Case 2 : Do
          Portc.0 = 1
          Portc.1 = 1
          Portc.2 = 0
          Portc.3 = 0
         Loop Until Z = 1
Case 3 : Do
          Portc.0 = 0
          Portc.1 = 1
          Portc.2 = 0
          Portc.3 = 0
         Loop Until Z = 1
Case 4 : Do
          Portc.0 = 0
          Portc.1 = 1
          Portc.2 = 1
          Portc.3 = 0
         Loop Until Z = 1
Case 5 : Do
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
         Loop Until Z = 1
Case 6 : Do
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 1
         Loop Until Z = 1
Case 7 : Do
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 1
         Loop Until Z = 1
Case 8 : Do
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 1
         Loop Until Z = 1
End Select
Return

Os_z1:
Decr Z1
If Z1 = 0 Then
Z1 = 8
End If
Select Case Z1
Case 1 : Do
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 0
         Loop Until Z = 1
Case 2 : Do
          Portc.0 = 1
          Portc.1 = 1
          Portc.2 = 0
          Portc.3 = 0
         Loop Until Z = 1
Case 3 : Do
          Portc.0 = 0
          Portc.1 = 1
          Portc.2 = 0
          Portc.3 = 0
         Loop Until Z = 1
Case 4 : Do
          Portc.0 = 0
          Portc.1 = 1
          Portc.2 = 1
          Portc.3 = 0
         Loop Until Z = 1
Case 5 : Do
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 0
         Loop Until Z = 1
Case 6 : Do
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 1
          Portc.3 = 1
         Loop Until Z = 1
Case 7 : Do
          Portc.0 = 0
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 1
         Loop Until Z = 1
Case 8 : Do
          Portc.0 = 1
          Portc.1 = 0
          Portc.2 = 0
          Portc.3 = 1
         Loop Until Z = 1
End Select
Return

Os_x0:
Incr X1
If X1 = 9 Then
X1 = 1
End If
Select Case X1
Case 1 : Do
          Porta.0 = 1
          Porta.1 = 0
          Porta.2 = 0
          Porta.3 = 0
         Loop Until X = 1
Case 2 : Do
          Porta.0 = 1
          Porta.1 = 1
          Porta.2 = 0
          Porta.3 = 0
         Loop Until X = 1
Case 3 : Do
          Porta.0 = 0
          Porta.1 = 1
          Porta.2 = 0
          Porta.3 = 0
         Loop Until X = 1
Case 4 : Do
          Porta.0 = 0
          Porta.1 = 1
          Porta.2 = 1
          Porta.3 = 0
         Loop Until X = 1
Case 5 : Do
          Porta.0 = 0
          Porta.1 = 0
          Porta.2 = 1
          Porta.3 = 0
         Loop Until X = 1
Case 6 : Do
          Porta.0 = 0
          Porta.1 = 0
          Porta.2 = 1
          Porta.3 = 1
         Loop Until X = 1
Case 7 : Do
          Porta.0 = 0
          Porta.1 = 0
          Porta.2 = 0
          Porta.3 = 1
         Loop Until X = 1
Case 8 : Do
          Porta.0 = 1
          Porta.1 = 0
          Porta.2 = 0
          Porta.3 = 1
         Loop Until X = 1
End Select
Return

Os_x1:
Decr X1
If X1 = 0 Then
X1 = 8
End If
Select Case X1
Case 1 : Do
          Porta.0 = 1
          Porta.1 = 0
          Porta.2 = 0
          Porta.3 = 0
         Loop Until X = 1
Case 2 : Do
          Porta.0 = 1
          Porta.1 = 1
          Porta.2 = 0
          Porta.3 = 0
         Loop Until X = 1
Case 3 : Do
          Porta.0 = 0
          Porta.1 = 1
          Porta.2 = 0
          Porta.3 = 0
         Loop Until X = 1
Case 4 : Do
          Porta.0 = 0
          Porta.1 = 1
          Porta.2 = 1
          Porta.3 = 0
         Loop Until X = 1
Case 5 : Do
          Porta.0 = 0
          Porta.1 = 0
          Porta.2 = 1
          Porta.3 = 0
         Loop Until X = 1
Case 6 : Do
          Porta.0 = 0
          Porta.1 = 0
          Porta.2 = 1
          Porta.3 = 1
         Loop Until X = 1
Case 7 : Do
          Porta.0 = 0
          Porta.1 = 0
          Porta.2 = 0
          Porta.3 = 1
         Loop Until X = 1
Case 8 : Do
          Porta.0 = 1
          Porta.1 = 0
          Porta.2 = 0
          Porta.3 = 1
         Loop Until X = 1
End Select
Return

Os_y0:
Incr Y1
If Y1 = 9 Then
Y1 = 1
End If
Select Case Y1
Case 1 : Do
          Porta.4 = 1
          Porta.5 = 0
          Porta.6 = 0
          Porta.7 = 0
         Loop Until Y = 1
Case 2 : Do
          Porta.4 = 1
          Porta.5 = 1
          Porta.6 = 0
          Porta.7 = 0
         Loop Until Y = 1
Case 3 : Do
          Porta.4 = 0
          Porta.5 = 1
          Porta.6 = 0
          Porta.7 = 0
         Loop Until Y = 1
Case 4 : Do
          Porta.4 = 0
          Porta.5 = 1
          Porta.6 = 1
          Porta.7 = 0
         Loop Until Y = 1
Case 5 : Do
          Porta.4 = 0
          Porta.5 = 0
          Porta.6 = 1
          Porta.7 = 0
         Loop Until Y = 1
Case 6 : Do
          Porta.4 = 0
          Porta.5 = 0
          Porta.6 = 1
          Porta.7 = 1
         Loop Until Y = 1
Case 7 : Do
          Porta.4 = 0
          Porta.5 = 0
          Porta.6 = 0
          Porta.7 = 1
         Loop Until Y = 1
Case 8 : Do
          Porta.4 = 1
          Porta.5 = 0
          Porta.6 = 0
          Porta.7 = 1
         Loop Until Y = 1
End Select
Return

Os_y1:
Decr Y1
If Y1 = 0 Then
Y1 = 8
End If
Select Case Y1
Case 1 : Do
          Porta.4 = 1
          Porta.5 = 0
          Porta.6 = 0
          Porta.7 = 0
         Loop Until Y = 1
Case 2 : Do
          Porta.4 = 1
          Porta.5 = 1
          Porta.6 = 0
          Porta.7 = 0
         Loop Until Y = 1
Case 3 : Do
          Porta.4 = 0
          Porta.5 = 1
          Porta.6 = 0
          Porta.7 = 0
         Loop Until Y = 1
Case 4 : Do
          Porta.4 = 0
          Porta.5 = 1
          Porta.6 = 1
          Porta.7 = 0
         Loop Until Y = 1
Case 5 : Do
          Porta.4 = 0
          Porta.5 = 0
          Porta.6 = 1
          Porta.7 = 0
         Loop Until Y = 1
Case 6 : Do
          Porta.4 = 0
          Porta.5 = 0
          Porta.6 = 1
          Porta.7 = 1
         Loop Until Y = 1
Case 7 : Do
          Porta.4 = 0
          Porta.5 = 0
          Porta.6 = 0
          Porta.7 = 1
         Loop Until Y = 1
Case 8 : Do
          Porta.4 = 1
          Porta.5 = 0
          Porta.6 = 0
          Porta.7 = 1
         Loop Until Y = 1
End Select
Return

тестируйте на здоровье :)

PS было исправление в проге смотри ШИМ должно быть :
Config Timer0 = Pwm , Prescale = 1 , Pwm = On , Compare Pwm = Clear Up
Config Timer2 = Pwm , Prescale = 1 , Pwm = On , Compare Pwm = Clear Up
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1

правда таймер0 так и не генерит сигнал, но зато все 3 драйвера исправно работают!!!!
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

какие форматы файла доступны для подключения в этом разделе? не могу подключить файл ни 7z exe bas hex только jpg :(
Вложения
fuse.JPG
скрин fuse
(46.62 КБ) 1112 скачиваний
BoRtO
Друг Кота
Сообщения: 3424
Зарегистрирован: Вт ноя 30, 2010 11:46:16
Откуда: Україна

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение BoRtO »

зип, рар :)
Пора что то поменять в своей жизни - поменял windows.
КПІ РТФ!
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

BoRtO писал(а):зип, рар :)

примного благодарен за оперативность :)

если нужна схема пишите сделаю... небольшие отличия от базовой схемы имеются.... например я выкинул вообще все резисторы кроме R6 560-750Ом в драйверах, заменил T1 на IRFZ44 и всё работает нормально :) порт А оси X, Y, а порт С младший разряд отдан под ось Z, пин D0-dir_x, пин D1-dir_y, пин D6-dir_z, пин D2-step_x, пин D3-step_y, пин В2-step_z ну вот как то так :)
пошёл прикручивать к имеющимся 2м осям :) и доделывать 3ю ось :)
Вложения
проект.zip
bas, hex, скрин Fuse
(39.99 КБ) 690 скачиваний
Idea_FIX
Встал на лапы
Сообщения: 111
Зарегистрирован: Пт сен 30, 2011 05:55:31
Откуда: Питер

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение Idea_FIX »

to lordswar: Со всеми бывает (о транзисторе). Форум для того и есть, чтобы помогать друг другу)).

По поводу ШИМ. Если еще актуально, стоит сначала посмотреть, что на выходах самой микрухи. Если там все Ок, то стоит все-таки заменить T1 именно на биполярник, он там не просто так стоит. Он открывается быстрее и более низким уровнем. Он и добавлен-то в схему только по этим причинам. Впринципе, должно и без него работать, но для большей уверенности... К тому же, он помогает быстрее закрыться Q6, сажая его общий на землю. Биполярник подходит, действительно, любой практически. Я использую уже проверенные КТ972 (А, Б и т.д. различаются только Umax). Резисторы там больше для защиты (кроме некоторых), особенно острой необходимости в них, в общем-то, нет. Но, так или иначе, думаю, схема под USB должна иметь некоторые отличия... Может, при получении положительных резулльтатов, статейку забацаешь?
Через тернии - к звездам
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

to Idea_FIX ШИМ у меня работает нормально :) IRFZ44 по дайшит работают от 0 до +5 вольт подтягивающий резистор малоомный что бы открывать IRF9530N при условии того что IRFZ44 закрыт... вообщем всё работает ... проблемма была программной не активировал таймер для ШИМ :) исправил :)
есть ещё недочёт в проге все ШИМ включаются и выключаются одновременно а не на каждый двигатель в отдельности... есть выкрутасы схемы из за отсутствия резисторов :) а именно при работе рядом! дрели шаговики работают :shock: причём нормально,правда скорость маленькая :)))
КСАМ глючит жутко... чем дольше работаешь тем ниже нужно ставить скорость перемещения иначе всё глючить... нужно настраивать МАТЧ2-3
сам станок пока 2 оси
Lord's-0260.jpg
фото имеющихся 2х осей
(192.2 КБ) 956 скачиваний

а это проба и подгонка размеров шага вобщем то что получилось
Lord's-0261.jpg
цифры 7,8,9 с шаблона КСАМ нарисованные станком
(136.57 КБ) 1049 скачиваний

ЗЫ штатных 8Мгерц вполне хватает для работы контроллера...так что внешний кварц не обязятелен :)
контроллер готов и работает, драйвера готовы проверены - работают, дело за малым доделать 3ю ось :)
в программе нужно изменить управление ШИМ, вечером займусь и изменю.... иначе при работе одного движка греются все :( общая температура двигателей не привышала 40 градусов что особенно радует :) ибо все предыдущие контроллеры с драйверами грели движки до 80 градусов и более при том же питании 12вольт
Idea_FIX
Встал на лапы
Сообщения: 111
Зарегистрирован: Пт сен 30, 2011 05:55:31
Откуда: Питер

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение Idea_FIX »

ШИМ точно должен быть раздельным, причем не просто включаться и выключаться, а иметь два уровня - рабочего режима и режима удержания - "держать" ведь надо. KCam и у меня глючил на Cel1800, работал нормально только в реал-тайме, но невозможность прервать программу до окончания (а если вручную запусть - только reset) меня не устраивает. Мега на 8МГц сможет и на 10-12 мегагерц работать. Сейчас, может, кварц и не нужен. А как поведет себя она при одновременной работе всех движков? Хотя... там видно будет. Что касается температуры. 40 градусов - за какое время? Мои ШД греются куда сильнее, градусов до 60-ти после примерно 40мин непрерывной работы. Во время удержания остывают. Как мне сказали, это вполне нормальная температура и движки выдержат и еще больше.

PS: Прогресс заметен. Если удасться реализовать возможности наподобие Freeman'овского контроллера, то точно стоит статью напоисать. Дальше останется только навороты прикручивать))).
Через тернии - к звездам
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

Статейку говорите….
Программирование –BASCOM
Программатор-ASPUSB
Запчасти
Atmega16 -1шт
Пранелька40 – 1шт
Разъём DB25F – 1шт (у меня кабель DB25F-DB25M)
IRFZ44 – 15шт
IRF9530 – 3шт
Резистр 560-750Ом – 3шт
Резистор 4.7Ком – 1шт
Монтажная плата – 1шт
Ну вот и всё если брать по минимуму и не опасаться спалить комп :) а вот красоту можете наводить как кому угодно, добавляя разъёмчики или разнося контроллер и драйвера :)
В программе используется микрошаг и аппаратный ШИМ, собственно программа достаточно проста для понимания, но если что спрашивайте:)
Распиновка портов:
порт А ось X(0-3), ось Y(4-7)
порт С младший разряд отдан под ось Z (0-3)
пин D0-dir_x
пин D1-dir_y
пин D6-dir_z
пин D2-step_x
пин D3-step_y
пин В2-step_z
Программа на компе – пока КСАМ но планирую перейти на МАТЧ 2-3
ЗЫ система не защищена от внешних помех (работа дрели вызывает движение шаговых двигателей)
Работа ШИМ пока не совсем корректна, при работе одной оси напряжение поднимается на всех осях сразу
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

Idea_FIX писал(а):ШИМ точно должен быть раздельным, причем не просто включаться и выключаться, а иметь два уровня - рабочего режима и режима удержания - "держать" ведь надо. KCam и у меня глючил на Cel1800, работал нормально только в реал-тайме, но невозможность прервать программу до окончания (а если вручную запусть - только reset) меня не устраивает. Мега на 8МГц сможет и на 10-12 мегагерц работать. Сейчас, может, кварц и не нужен. А как поведет себя она при одновременной работе всех движков? Хотя... там видно будет. Что касается температуры. 40 градусов - за какое время? Мои ШД греются куда сильнее, градусов до 60-ти после примерно 40мин непрерывной работы. Во время удержания остывают. Как мне сказали, это вполне нормальная температура и движки выдержат и еще больше.

PS: Прогресс заметен. Если удасться реализовать возможности наподобие Freeman'овского контроллера, то точно стоит статью напоисать. Дальше останется только навороты прикручивать))).

Да, ШИМ работает так 12вольт при работе, 6.6вольт при удержании, время работы 1 час температура 40градусов, правда гонял в ручную, что бы отстроить кол-во шагов на мм :) а потом пустил по большому кругу в цикле что бы проверить сбивается или нет .... результат на 10 проходов 1мм неточности
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

Для изменения режима ШИМ нужно исправить и добавить:
вместо

Код: Выделить всё

Dim D As Integer

нужно

Код: Выделить всё

Dim D0 As Integer
Dim D1 As Integer
Dim D2 As Integer
вместо

Код: Выделить всё

If D = 1 Then
Pwm1a = Max_pwm
Pwm1b = Max_pwm
Pwm2 = Max_pwm
Else
End If

написать

Код: Выделить всё

If D0 = 1 Then
Pwm1a = Max_pwm
Else
End If
If D1 = 1 Then
Pwm1b = Max_pwm
Else
End If
If D2 = 1 Then
Pwm2 = Max_pwm
Else
End If

вместо

Код: Выделить всё

If D = 10000 Then
Pwm1a = Min_pwm
Pwm1b = Min_pwm
Pwm2 = Min_pwm
D = 254
Else
End If

Написать

Код: Выделить всё

If D0 = 10000 Then
Pwm1a = Min_pwm
D = 254
Else
End If
If D1 = 10000 Then
Pwm1b = Min_pwm
D = 254
Else
End If
If D2 = 10000 Then
Pwm2 = Min_pwm
D = 254
Else
End If

изменяя D0(D1,D2) = 10000 можно поменять задержку ШИМ после прекращения подачи команд, увеличиваем число и увеличиваем время через которое ШИМ отключится

И поправить прерывания

Код: Выделить всё

Step_x:
X2 = Pind.0
X = 1
D0 = 1
Return

Step_y:
Y = 1
D1 = 1
Y2 = Pind.1 ' Getrc(pind , 1)
Return

Step_z:
Z2 = Pind.6
Z = 1
D2 = 1
Return

и будет раздельный ШИМ на каждую ось
Аватара пользователя
Neverdie
Встал на лапы
Сообщения: 98
Зарегистрирован: Пн апр 02, 2012 17:04:36

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение Neverdie »

я покамись изучаю данную схему точнее жду деталей
но схема уже радует так ка много кто посоветовал но вот покамись начну собирать
вопрос
не кто непробывал добавить ручное управление ? для осей подать сигнал для передвижения осей независимо от компа ? если развивать даніе станок то может его улучшить?


а и опять вопрос уже где-то видел резистор 6 на драйвере на сколько он ?
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

Neverdie писал(а):я покамись изучаю данную схему точнее жду деталей
но схема уже радует так ка много кто посоветовал но вот покамись начну собирать
вопрос
не кто непробывал добавить ручное управление ? для осей подать сигнал для передвижения осей независимо от компа ? если развивать даніе станок то может его улучшить?


а и опять вопрос уже где-то видел резистор 6 на драйвере на сколько он ?


для чего нужны кнопки? ты просто представь если вин на шаговике М6 то для получения 1мм передвижения тебе нужно сделать 5000 шагов если тросик то 50, просто у меня на станке и тросик и винт..... теперь представь ситуацию тебе нужно сдвинуть кнопкой винт на 10см - 100мм Х 5000 и того 500000 нажатий на кнопку :shock: !!!!!!!!!!!!!!! задолбаешься жать :))) в программе прерывания настроены на изменения от 1 к 0 то бишь перепад от 4.3V к 0.23V.
Примногоуважаемый, Вы не совсем точно описали что хотите:) будте ласка опишите желаемый контроллер точнее то что Вы хотите от него :)) чем Вас не устраивает передвижение с компа кнопками? или Вам нужна автономка? совмещение ведёт к написанию программы немного иной чем есть сейчас а именно при включении опрос определённой ноги проца и в зависимости от того что на данной ноге выбирается работа от компа или от ручного привода.... тобишь практически две проги в одном МК. в принципе это не так сложно можно и написать вот только встаёт проблемка как точно отсчитывать нужное кол-во шагов для того или иного станка.... для каждого компелить свою прогу? а при изменении шаговика сново компелить и писать в МК? не есть вариант прикрутить клавиатуру и 2х16 ЖКИ матрицу .... но это всё навороты которые будут кушать память и ресурсы МК если поискать я видел в нете автономный контроллер на ATMega16 с SD,клавиатурой и ЖКИ может стоит подумать а нужен ли комп вобще?
PS не обижайтесь на меня, просто я очень много проектов контроллера сделал до этого, приблезительно 10шт. и все меня не устроили начинал как все с ТМ7 и транзюками, и в конечном результате решил делать свой так как мне надо :)
для этого я вначале я точно определился что хочу делать и как а уж потом приступил:)
1. step-dir контроллер с возможностью изменения программы
2. драйвера на 3 оси простые (с возможностью замены шаговика на любой - в текущий момент униполярные шаговики)
3. доступная среда для написания программы к контроллеру
4. простой программатор(возможно покупной что и получилось в конце концов :) )
5. любая программа PC поддерживающая step-dir
6. задачи для станка - сверление, рисование, выжигание,фрезеровка дерева, резка пенопласта.
7. материалы используемые в станке - текстолит, дерево, пенопласт, оргстекло, пластмасса.
а началось всё с принтера матричного СМ3700 который был разобран и переделан на 2 оси передвижения... потом начались поиски контроллера и пайка... и только после того как я запустил оба двигателя на своём контроллере планирую доделать 3ю ось
ну вот как то так :)
Аватара пользователя
Neverdie
Встал на лапы
Сообщения: 98
Зарегистрирован: Пн апр 02, 2012 17:04:36

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение Neverdie »

да но яж не писал чтоб работало от клика тоже не дурак 100500 нажиманий делать а если просто держать
я необижаюсь а нормально понимаю все просто если система отлажена на ура чего бы не побаловаца еще веть прогресс не стоит на месте :write:
сори если вас зацепил сильно
просто предложил мало ли -)))


и всетаки подскажите резистор так как я в теме ненашел кроме как начать менять с 10 ком

Изображение


трындец зачитался -))))) передержал фоторезистор (((((
lordswars
Открыл глаза
Сообщения: 47
Зарегистрирован: Пн мар 19, 2012 09:22:04

Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр

Сообщение lordswars »

простая и рабочая схема ШИМ в драйвере.... да избыточна но главное работает....
ЗЫ если вместо КТ ставить IRFZ44 то смотреть схему! от 560 до 760ом
только IRFZ44 разверни на 180 градусов :) и получишь то что те нуна :)
S
D
G

G
D
S

ври так согласно твоей схеме :)
Вложения
ШИМ.JPG
ШИМ на драйвере, работает, не глючит
(43.33 КБ) 1550 скачиваний
Последний раз редактировалось lordswars Пн апр 02, 2012 20:01:07, всего редактировалось 2 раза.
Ответить

Вернуться в «Статьи»