Подключение шагового двигателя к микроконтроллерам AVR

Модератор: boogyman

Аватара пользователя
Valeriy
Любитель
Сообщения: 25
Зарегистрирован: 14 янв 2015, 15:26
Откуда: Магнитогорск

Re: Подключение шагового двигателя к микроконтроллерам AVR

#41

Сообщение Valeriy »

AntonChip писал(а):Для меги 8, проверяйте
Доброе утро Антон!
Проверил, работает неправильно. Нет прерывания на Step (постоянно идут импульсы на выходных портах). На РВ1 не реагирует. РВ5 включен постоянно.
P.S.
Вчера попробовал переделать код сам на мегу8. За основу таймеров взял Вашу старую прошивку на меге8. Получилось один к одному с сегодняшной Вашей прошивкой. Работает абсолютно также - постоянно "шагает".
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

Re: Подключение шагового двигателя к микроконтроллерам AVR

#42

Сообщение AntonChip »

У меги8 внешнее прерывание INT0 на выводе PD2, он должен быть подтянут на плюс питания
Аватара пользователя
Valeriy
Любитель
Сообщения: 25
Зарегистрирован: 14 янв 2015, 15:26
Откуда: Магнитогорск

Re: Подключение шагового двигателя к микроконтроллерам AVR

#43

Сообщение Valeriy »

AntonChip писал(а):У меги8 внешнее прерывание INT0 на выводе PD2, он должен быть подтянут на плюс питания
Подтянул, cхема заработала. Но картина сбоев повторяется как на ATtini13A. На 15 раз произошел сбой. Схема собрана на макете. На выходах светодиоды. Помехи исключены . По питанию конденсаторов полно. Было подозрение, что виноват дребезг контактов кнопки. Поставил конденсатор- не помогло. Но почему нарушается цикл 10 ? В момент сбоя, количество импульсов не равно 10, как по заданию. Значит происходит внутренний сбой. Если ошибка повторяется на другом МК, значит дело не в чипе, а в коде. Я так рассуждаю. Может и не прав.
И еще, когда медленно подаешь входные импульсы, примерно раз в секунду, сбои проявляются реже. Если нажимаешь на кнопку так часто, что цикл не успевает пройти, сбои происходят быстрее. Возможно, что сбои связаны как то с входом. Может попробовать сделать помехозащищенность по входу.
Последний раз редактировалось Valeriy 07 фев 2015, 16:26, всего редактировалось 1 раз.
Аватара пользователя
Valeriy
Любитель
Сообщения: 25
Зарегистрирован: 14 янв 2015, 15:26
Откуда: Магнитогорск

Re: Подключение шагового двигателя к микроконтроллерам AVR

#44

Сообщение Valeriy »

Антон! Разобрался я все таки с причиной сбоев. Собрал тактовый генератор с регулируемой частотой. Подключил его к входу схемы. И вот что получилось. Если я выбираю частоту тактов больше, чем время цикла, то сбоев нет. Если частота тактов меньше времени цикла, то тут появляются сбои. И чем выше частота тактов, тем быстрее появляется сбой. Вывод: в реальной схеме с кнопкой за счет дребезга контакта появляется та самая высокая частота, от которой схема начинает сбоить. Значит надо по входу в коде делать защиту от дребезга контакта, и недопущения частоты входных тактовых импульсов выше установленной задержки (цикла). Вот сейчас «молотит» схема в оптимальном режиме от тактового генератора уже половину часа и ни одного сбоя.
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

Re: Подключение шагового двигателя к микроконтроллерам AVR

#45

Сообщение AntonChip »

Чуток внес изменения, вход теперь не активен пока мотор не пройдет все шаги
Вложения
unipolar_step_motor_atmega8.rar
AVRStudio, Proteus
(39.39 КБ) 2921 скачивание
Аватара пользователя
Valeriy
Любитель
Сообщения: 25
Зарегистрирован: 14 янв 2015, 15:26
Откуда: Магнитогорск

Re: Подключение шагового двигателя к микроконтроллерам AVR

#46

Сообщение Valeriy »

AntonChip писал(а):Чуток внес изменения, вход теперь не активен пока мотор не пройдет все шаги
Сбои прекратились. Большое Вам спасибо!
Аватара пользователя
ProgChIp
Новичок
Сообщения: 1
Зарегистрирован: 09 май 2015, 22:53

Re: Подключение шагового двигателя к микроконтроллерам AVR

#47

Сообщение ProgChIp »

Доброго времени суток, Антон. Недавно наткнулся на вашу статью - http://radioparty.ru/prog-avr/program-c ... -stepmotor. Переменный резистор, как написано в статье, для регулировки скорости вращения двигателя. Нет ли в схеме ошибки, так как питание +5В через этот резистор замкнуто на массу? И при нажатии кнопок SB1/SB2 так же +5В идёт на массу. При включении БП уходит в защиту.
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

Re: Подключение шагового двигателя к микроконтроллерам AVR

#48

Сообщение AntonChip »

Сопротивление резисторов большое, коротить на массу никак не должно
Аватара пользователя
IvanM
Новичок
Сообщения: 1
Зарегистрирован: 22 янв 2016, 09:22

Re: Подключение шагового двигателя к микроконтроллерам AVR

#49

Сообщение IvanM »

Здравствуйте Антон. Я почитал форум и убедился что вы компетентный человек в программировании AVR. Вот уже как год я занимаюсь шаговым двигателем как любитель. Научился прошивать AVR, собрал программатор AVR910. С помощью вашей статьи про подключение шагового двигателя к микроконтроллерам AVR научился управлять скоростью ШД. Где то в интернете я прочитал статью про пропорциональное управление шаговым двигателем, но ни где не могу найти программы что бы можно было управлять шагами двигателя с помощью переменного резистора. Не могли вы мне поспособствовать хотя бы примером программы. Заранее спасибо.
Аватара пользователя
Dmitrij4
Новичок
Сообщения: 1
Зарегистрирован: 16 окт 2016, 17:12

Re: Подключение шагового двигателя к микроконтроллерам AVR

#50

Сообщение Dmitrij4 »

Спасибо огромное автору за данную прошивку, наконец благодаря ей, оживил свой автоматический утюг (ламинатор). особенно радует переключение хода двигателя назд-вперед. Что очень удобно при прокатке плат с фоторезистом.
Аватара пользователя
Azerhud
Новичок
Сообщения: 3
Зарегистрирован: 24 дек 2016, 09:46

Re: Подключение шагового двигателя к микроконтроллерам AVR

#51

Сообщение Azerhud »

Здравствуйте. Мне очень понравилась статья. Уважаемый автор, возможно ли сделать управление шаговым двигателем по такому алгоритму:?
1. Двигатель в состоянии стоп.
2. Нажали кнопку №1 двигатель начал движение по часовой стрелке ровно на 150 оборота.
3. При достижении 150 оборотов двигатель в состоянии стоп.
4. Нажали кнопку №2 двигатель начал движение против часовой стрелке ровно на 150 оборота.
5.При достижении 150 оборотов двигатель в состоянии стоп.
А так же есть ли возможность сделать цифровое отображение количества оборотов? Я сам не умею писать программы, и по этому хотел узнать у Вас каким образом можно осуществить эту задумку?
Аватара пользователя
Azerhud
Новичок
Сообщения: 3
Зарегистрирован: 24 дек 2016, 09:46

Re: Подключение шагового двигателя к микроконтроллерам AVR

#52

Сообщение Azerhud »

Сделал так:

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

// Подключение биполярного шагового двигателя к AVR
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h> 


void cw_dir(){ //направление по часовой

      PORTB=0b00000011; //+a +b 
      _delay_ms(1000); 
      PORTB=0b00000110; //+b -a
      _delay_ms(1000);
      PORTB=0b00001100; //-a -b
      _delay_ms(1000);
      PORTB=0b00001001; //-b +a
      _delay_ms(1000);     
    }

void ccw_dir(){ //направление против часовой

      PORTB=0b00001001; //+a +b 
      _delay_ms(1000); 
      PORTB=0b00001100; //+b -a
      _delay_ms(1000);
      PORTB=0b00000110; //-a -b
      _delay_ms(1000);
      PORTB=0b00000011; //-b +a
      _delay_ms(1000);     
    

}
volatile unsigned char step_index;
volatile unsigned int ovftimes;
volatile unsigned char status;
volatile unsigned int var=0;
volatile unsigned int var2=0;
// Прерывание по переполнению Т0
ISR(TIMER0_OVF_vect)
{
static unsigned int count = 1;
count++;
if(count >= ovftimes) // Применяем задержку
{
cli(); // Запрещаем прерывания

if(status){ // если status == 1 крутим против часовой
while(var<=10)
	{
		ccw_dir();
		var++;
		
	}; var2=0;
}
else       // иначе крутим по часовой
{ // если status == 1 крутим против часовой
while(var2<=10)
	{
		cw_dir();
		var2++;
	}; var=0;
}

if (step_index >= 4)
step_index=0;

count = 0; // Сброс счетчика
TCNT0 = 0; // Старт счетчика с нуля
sei(); // Глобально разрешаем прерывания
}
}

int main(void)
{
DDRB = 0b00001111; // PB0, PB1, PB2, PB3 - выходы
PORTB = 0x00; // Лог. нули на выходе
PORTD = 0xFF;
DDRD = 0x00;

ADCSRA = (1 << ADEN) // разрешение АЦП
      | (1 << ADPS2) // предделитель на 64 (частота АЦП 125kHz)
	  | (1 << ADPS1);
ADMUX = 0x00; // ADC0 - вход, внешний ИОН 5 Вольт

TCCR0 |= (1 << CS01); // Предделитель на 8
TCNT0 = 0; // Старт счетчика с нуля

step_index = 0;
ovftimes = 10; // первоначальная задержка

sei(); // Глобально разрешаем прерывания

while(1) 
{
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while (ADCSRA & (1 << ADSC)); // Ждем пока завершится преобразование
ovftimes = ADCW; // Значение временной задержки

if((PIND &(1 << PD2)) == 0)
{
TIMSK |= (1 << TOIE0); // Разрешаем прерывания от таймера
status = 1;
}
else 
{
TIMSK &= ~(1 << TOIE0); // Запрещаем прерывания от таймера
}

if((PIND &(1 << PD3)) == 0)
{
TIMSK |= (1 << TOIE0); // Разрешаем прерывания от таймера
status = 0;
}
else 
{
TIMSK &= ~(1 << TOIE0); // Запрещаем прерывания от таймера
}
}
}
но почемуто во время паботы одного режима не возможно сразу остановить и перейти в другой :(
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

Re: Подключение шагового двигателя к микроконтроллерам AVR

#53

Сообщение AntonChip »

В таком случае кнопки необходимо подключить к внешним прерываниям
Аватара пользователя
kgb_spy
Новичок
Сообщения: 2
Зарегистрирован: 17 окт 2017, 20:35

Re: Подключение шагового двигателя к микроконтроллерам AVR

#54

Сообщение kgb_spy »

Не могли бы выложить проект http://radioparty.ru/programming/avr/c/ ... -stepmotor
что-то не пойму... копирую код с темы в проект, компилирую - получаю хекс, шью в мк, всё как должно быть, кроме светика на ноге номер 17, он не горит, прошивка есть старая (сохранён хекс со старых времён, а вот исходников нету), с ней всё регулируется и все светики горят.
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

Re: Подключение шагового двигателя к микроконтроллерам AVR

#55

Сообщение AntonChip »

Проект можно взять здесь http://radioparty.ru/programming/avr/c/ ... step-motor , код для биполярного и униполярного двигателей одинаков
Аватара пользователя
kgb_spy
Новичок
Сообщения: 2
Зарегистрирован: 17 окт 2017, 20:35

Re: Подключение шагового двигателя к микроконтроллерам AVR

#56

Сообщение kgb_spy »

точно! что-то я не посмотрел...спасибо!
Аватара пользователя
demogorgon
Новичок
Сообщения: 4
Зарегистрирован: 24 янв 2018, 17:53

Re: Подключение шагового двигателя к микроконтроллерам AVR

#57

Сообщение demogorgon »

Добрый день!Подскажите пожалуйста, возможно л и в вашем коде выставить скорость вращения программно и один раз,?
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

Re: Подключение шагового двигателя к микроконтроллерам AVR

#58

Сообщение AntonChip »

demogorgon писал(а): 24 янв 2018, 18:10 Добрый день!Подскажите пожалуйста, возможно л и в вашем коде выставить скорость вращения программно и один раз,?
Приветствую. Конечно можно. Достаточно в главном цикле переменной ovftimes присвоить значение от 0 до 65535.
Аватара пользователя
demogorgon
Новичок
Сообщения: 4
Зарегистрирован: 24 янв 2018, 17:53

Re: Подключение шагового двигателя к микроконтроллерам AVR

#59

Сообщение demogorgon »

AntonChip писал(а): 26 янв 2018, 14:42
demogorgon писал(а): 24 янв 2018, 18:10 Добрый день!Подскажите пожалуйста, возможно л и в вашем коде выставить скорость вращения программно и один раз,?
Приветствую. Конечно можно. Достаточно в главном цикле переменной ovftimes присвоить значение от 0 до 65535.
Вложения
kr_vyaz1.rar
(31.45 КБ) 407 скачиваний
Аватара пользователя
AntonChip
Администратор
Сообщения: 265
Зарегистрирован: 24 дек 2011, 22:11
Откуда: Киров
Контактная информация:

Re: Подключение шагового двигателя к микроконтроллерам AVR

#60

Сообщение AntonChip »

Архив не открывается, пишет неизвестный формат или ошибка
Ответить