Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Проблема в программе управления шаговым двигателем


Проблема в программе управления шаговым двигателем

Сообщений 1 страница 7 из 7

1

помогите пожалуйста. Делаю прогу управления шаговым двигателем. Там для того чтобы двигатель поворачивался, нужно поочередно подавать 4-комбинации состояний 4-х ножек. В строго последовательности. Написал программу которая при нажатии кнопки должна крутить двигатель. Но в протеусе не работает. состояние выводов не меняется при нажатии кнопки, такое ощущение что при нажатии не происходит перехода в подпрограмму. В чем может быть причина?

Код:
Config Pinb.1 = Input   ' сюда повешена кнопка
Pinb.1 = 1
A1=1
Do
If Pinb.1 = 0 And A1 = 1 Then                               'если кнопка нажата и а1=1 перейти к повороту двигателя на 1-й шаг

Gosub Step1
End If

If Pinb.1 = 0 And A1 = 2 Then
                                               'если кнопка нажата и а1=2 перейти к повороту двигателя на 2-й шаг
Gosub Step2
End If

If Pinb.1 = 0 And A1 = 3 Then                               'если кнопка нажата и а1=3 перейти к повороту двигателя на 3-й шаг

Gosub Step3
End If

If Pinb.1 = 0 And A1 = 4 Then                               'если кнопка нажата и а1=4 перейти к повороту двигателя на 4-й шаг

Gosub Step4
End If
 Waitms 200



 Ee = Str(a1)
Call D3310position(3 , 0)                                   'вывод на экран значения А1
Call D3310print(ee )


Loop


Step1:
A1 = 2
Portc = &B00000101


Return

Step2:
A1 = 3
Portc = &B00000110

Return

Step3:
A1 = 4
Portc = &B00001001

Return

Step4:
A1 = 1
Portc = &B00001010

Return
End

0

2

а порт С сконфигурирован как выход (в коде нет этого)?
чот корявый у вас алгоритм какой-то, слепили в одну кучу мухи с котлетами
отдельно сделайте общую подпрограмму, где при значении 1-4 или 0-3 будет перебираться комбинация на порте С
дальше делайте просто счетчик от 1-4 или 0-3, который меняет свой счет от состояния кнопки
всё

0

3

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

0

4

как-то так:

Код:
Const Max_step = 3
Dim S As Byte                                               ' step
S = Max_step

Do
   If Pinb.1 = 0 Then
      If S = Max_step Then
         S = 0
      Else
         Incr S
      End If
   Else
      If S = 255 Then
         S = Max_step
      Else
         Decr S
      End If
   End If

   If S = 0 Then Portc = &B00001010
   If S = 1 Then Portc = &B00000101
   If S = 2 Then Portc = &B00000110
   If S = 3 Then Portc = &B00001001
   Waitms 100
Loop
End

если грубое такое шагание (ваша маска) работает, то может ещё использовать/добавить полушаги (в 2 раза большее/плавное разрешение (об этом в инете почитайте)

0

5

спасибо, про полушаги знаю, но в моем случае в них нет необходимости.
что то не могу понять этот участок
где S=255, это к чему?

Отредактировано Dnepr_1186 (2016-03-24 18:46:10)

0

6

к тому, что шаг идет в обратную сторону, а после нуля будет 255 (S As Byte) а у вас константа =3, для этого и проверка...

0

7

Кстати говоря, алгоритм сделан с расчетом на увеличения шагов (полушагов), если не планируете использовать больше 4-х шагов, то можно вообще не морочиться и убрать всю проверку переходов. Там получается круглое машинное число, оно и так будет ходить по кругу со всеми переполнениями. :D

Отредактировано RDW (2016-03-25 10:38:05)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Проблема в программе управления шаговым двигателем