Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
oolegg
16 / 15 / 1
Регистрация: 10.07.2014
Сообщений: 416
1

Управление шаговым двигателем на Attiny2313

01.05.2015, 22:33. Просмотров 2993. Ответов 5
Метки нет (Все метки)

нужен программный код на C и С++
Короче имеются две кнопки(влево и вправо).При нажатии на них соответственно двигатель поворачивается влево и вправо.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2015, 22:33
Ответы с готовыми решениями:

ЧЯДНТ?! Управление шаговым двигателем с таймера
Собственно, код http://pastebin.com/kWQNwEp9 Вроде бы, все просто - таймер тикает, дрыгатель...

Управление двигателем на atmega8
Здравствуйте, есть у меня проблема, которую не удалось решить самостоятельно. Итак, имеем схему,...

Управление светодиодами на ATtiny2313
Ребята, помогите. Нужно написать программу под ATtiny 2313, где при нажатии кнопки 1 горит Led...

ATtiny2313. Управление светодиодом
Пожалуйста помогите доделать программу. нужно, что бы " Разработать устройство управления одним...

5
oolegg
16 / 15 / 1
Регистрация: 10.07.2014
Сообщений: 416
03.05.2015, 21:16  [ТС] 2
есть код зажигания светодиода при нажатии возвратной кнопки.
C
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
#include <avr/io.h>//Подключаем библиотеку ввода/вывода
#include <util/delay.h>
#define nop() {asm("nop");}//подключаем функция для формирваония задержки
int x, j, m=100, i; //переменные
//Функция задержки
void delay(int t)
{
for (x=0; x<t ;x++)
nop (); 
}
//Функция длинной задержки
void long_delay(int p)
{
for (j=0; j<p; j++){delay(300);}
}
//Функция поворота ротора вправо
void right (void)
{
PORTB = 0b00001000;//обмотка A
long_delay(m);
 
PORTB = 0b00000100;//обмотка B
long_delay(m);
 
PORTB = 0b00000010;//обмотка C
long_delay(m);
 
PORTB = 0b00000001;//обмотка D
long_delay(m);
}
//Функция поворота ротора влево
void left(void)
{
PORTB = 0b00000001;
long_delay(m);
 
PORTB = 0b00000010;
long_delay(m);
 
PORTB = 0b00000100;
long_delay(m);
 
PORTB = 0b00001000;
long_delay(m);
}
//Главная функция
int main(void)
{
DDRB = 0xFF;//Конфигурирование порта на выход
PORTB = 0x00;//Отключаем подтягивающие резисторы порта
DDRD = 0x00; // Порт D вход
PORTD = 0xFF; // Подключаем подтягивающие резисторы
while(1)
{
                    while ((PIND&(1 << PD0)) == 1){} // Ждем пока на выводе PDO лог. 0
                    _delay_ms(200); // Задержка 200мс
                    if ((PINB&(1 << PB4)) == 0) // Если на выводе PB0 лог. 0
                            {
                            PORTB |= (1 << PB4); // Лог. 1 на выводе PB0
                            //for(i=0; i<13; i++){right();}PORTB = 0b00000000;long_delay(800);for(i=0; i<13; i++){left();}
                            PORTB |= (1 << PB0);    
                            }
                    else
                            {
                            PORTB &= ~(1 << PB4); // Лог. 0 на выводе PB0
                            }
                    while ((PIND&(1 << PD0)) == 0){} // Ждем пока на выводе PDO лог. 0
                    _delay_ms(200); // Задержка 200мс
}
//while(1){for(i=0; i<13; i++){right();}PORTB = 0b00000000;long_delay(800);for(i=0; i<13; i++){left();}}                    
}

Нужно вместо зажигания светодиода впиндуреть команду начала работы двигателя
C
1
while(1){for(i=0; i<13; i++){right();}PORTB = 0b00000000;long_delay(800);for(i=0; i<13; i++){left();}}
заоотно проверить грамотность написания кода.
0
Ethereal
5298 / 2457 / 327
Регистрация: 17.02.2013
Сообщений: 3,504
04.05.2015, 02:49 3
Ты в курсе, что шаговые двигатели бывают двухфазные, трехфазные, четырехфазные ... и в зависимости от этого программа будет разной ? Просто потому, что разное число фаз надо переключать-то. А ты хочешь, чтоб тебе написали под шаговый двигатель вообще ? Про число фаз в первом сообщении топика ты не сказал.

Добавлено через 6 минут
Цитата Сообщение от oolegg Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
//Функция поворота ротора вправо
void right (void)
{
PORTB = 0b00001000;//обмотка A
long_delay(m);
PORTB = 0b00000100;//обмотка B
long_delay(m);
PORTB = 0b00000010;//обмотка C
long_delay(m);
PORTB = 0b00000001;//обмотка D
long_delay(m);
}
Четыре фазы, говоришь ? А заметными рывками движок не пойдет ? Я четырехфайзные движки так ворочал
А АБ Б БВ В ВГ Г ГА А ...
Т.е. создавал промежуточное состояние, когда сразу две обмотки включены. Так движок шел плавненько, плавненько.
1
oolegg
16 / 15 / 1
Регистрация: 10.07.2014
Сообщений: 416
04.05.2015, 07:33  [ТС] 4
Цитата Сообщение от Ethereal Посмотреть сообщение
Ты в курсе, что шаговые двигатели бывают двухфазные, трехфазные, четырехфазные ... и в зависимости от этого программа будет разной ? Просто потому, что разное число фаз надо переключать-то. А ты хочешь, чтоб тебе написали под шаговый двигатель вообще ? Про число фаз в первом сообщении топика ты не сказал.
двигатель четырехобмоточный.Как я сам понял его надо воротить как униполярный.
Цитата Сообщение от Ethereal Посмотреть сообщение
Четыре фазы, говоришь ? А заметными рывками движок не пойдет ? Я четырехфайзные движки так ворочал
А АБ Б БВ В ВГ Г ГА А ...
Т.е. создавал промежуточное состояние, когда сразу две обмотки включены. Так движок шел плавненько, плавненько.
Я думал так A Б В Г или AB БГ
0
Ethereal
5298 / 2457 / 327
Регистрация: 17.02.2013
Сообщений: 3,504
04.05.2015, 11:13 5
Цитата Сообщение от oolegg Посмотреть сообщение
AB БГ
А при такой коммутации он неизвестно в какую сторону поворачиваться будет. Может по часовой повернется, а может против.

Добавлено через 43 секунды
Цитата Сообщение от oolegg Посмотреть сообщение
Я думал так A Б В Г
Ну дак будет работать. Но не с минимальным шагом.

Добавлено через 2 минуты
З.Ы. Все равно истина будет видна только на практике.
1
oolegg
16 / 15 / 1
Регистрация: 10.07.2014
Сообщений: 416
04.05.2015, 14:03  [ТС] 6
Цитата Сообщение от Ethereal Посмотреть сообщение
З.Ы. Все равно истина будет видна только на практике.
Сначала в теории.На практике реализовать нетрудно.Все есть для этого.
Цитата Сообщение от Ethereal Посмотреть сообщение
А АБ Б БВ В ВГ Г ГА А
давай так
0
04.05.2015, 14:03
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.05.2015, 14:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Управление реле с пульта на ATtiny2313
Всем привет. Ребят подскажите, где можно взять или хотя бы примерный код для управления реле с...

Управление шаговым двигателем на PIC16F873
Подскажите возможно применить данный алгоритм для управления биполярным шаговым двигателем....

PIC16F73 (MPLAB). Управление двигателем
Нужно написать программу для pic16f73 на MPLAB IDE .asm Задача звучит, как: &quot;Есть вентельный...

Управление Двигателем через КМ1816ВЕ51
Помогите с программой для управления скоростью двигателя. Не очень разбираюсь в микроконтроллерах....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.