Страница 3 из 5

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

Добавлено: 07 фев 2015, 10:23
Valeriy
AntonChip писал(а):Для меги 8, проверяйте
Доброе утро Антон!
Проверил, работает неправильно. Нет прерывания на Step (постоянно идут импульсы на выходных портах). На РВ1 не реагирует. РВ5 включен постоянно.
P.S.
Вчера попробовал переделать код сам на мегу8. За основу таймеров взял Вашу старую прошивку на меге8. Получилось один к одному с сегодняшной Вашей прошивкой. Работает абсолютно также - постоянно "шагает".

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

Добавлено: 07 фев 2015, 14:22
AntonChip
У меги8 внешнее прерывание INT0 на выводе PD2, он должен быть подтянут на плюс питания

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

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

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

Добавлено: 07 фев 2015, 16:17
Valeriy
Антон! Разобрался я все таки с причиной сбоев. Собрал тактовый генератор с регулируемой частотой. Подключил его к входу схемы. И вот что получилось. Если я выбираю частоту тактов больше, чем время цикла, то сбоев нет. Если частота тактов меньше времени цикла, то тут появляются сбои. И чем выше частота тактов, тем быстрее появляется сбой. Вывод: в реальной схеме с кнопкой за счет дребезга контакта появляется та самая высокая частота, от которой схема начинает сбоить. Значит надо по входу в коде делать защиту от дребезга контакта, и недопущения частоты входных тактовых импульсов выше установленной задержки (цикла). Вот сейчас «молотит» схема в оптимальном режиме от тактового генератора уже половину часа и ни одного сбоя.

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

Добавлено: 07 фев 2015, 21:54
AntonChip
Чуток внес изменения, вход теперь не активен пока мотор не пройдет все шаги

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

Добавлено: 08 фев 2015, 07:26
Valeriy
AntonChip писал(а):Чуток внес изменения, вход теперь не активен пока мотор не пройдет все шаги
Сбои прекратились. Большое Вам спасибо!

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

Добавлено: 09 май 2015, 23:18
ProgChIp
Доброго времени суток, Антон. Недавно наткнулся на вашу статью - http://radioparty.ru/prog-avr/program-c ... -stepmotor. Переменный резистор, как написано в статье, для регулировки скорости вращения двигателя. Нет ли в схеме ошибки, так как питание +5В через этот резистор замкнуто на массу? И при нажатии кнопок SB1/SB2 так же +5В идёт на массу. При включении БП уходит в защиту.

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

Добавлено: 09 май 2015, 23:42
AntonChip
Сопротивление резисторов большое, коротить на массу никак не должно

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

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

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

Добавлено: 16 окт 2016, 18:19
Dmitrij4
Спасибо огромное автору за данную прошивку, наконец благодаря ей, оживил свой автоматический утюг (ламинатор). особенно радует переключение хода двигателя назд-вперед. Что очень удобно при прокатке плат с фоторезистом.

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

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

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

Добавлено: 25 дек 2016, 06:02
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); // Запрещаем прерывания от таймера
}
}
}
но почемуто во время паботы одного режима не возможно сразу остановить и перейти в другой :(

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

Добавлено: 25 дек 2016, 11:16
AntonChip
В таком случае кнопки необходимо подключить к внешним прерываниям

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

Добавлено: 17 окт 2017, 20:54
kgb_spy
Не могли бы выложить проект http://radioparty.ru/programming/avr/c/ ... -stepmotor
что-то не пойму... копирую код с темы в проект, компилирую - получаю хекс, шью в мк, всё как должно быть, кроме светика на ноге номер 17, он не горит, прошивка есть старая (сохранён хекс со старых времён, а вот исходников нету), с ней всё регулируется и все светики горят.

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

Добавлено: 19 окт 2017, 21:20
AntonChip
Проект можно взять здесь http://radioparty.ru/programming/avr/c/ ... step-motor , код для биполярного и униполярного двигателей одинаков

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

Добавлено: 20 окт 2017, 23:06
kgb_spy
точно! что-то я не посмотрел...спасибо!

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

Добавлено: 24 янв 2018, 18:10
demogorgon
Добрый день!Подскажите пожалуйста, возможно л и в вашем коде выставить скорость вращения программно и один раз,?

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

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

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

Добавлено: 26 янв 2018, 20:05
demogorgon
AntonChip писал(а): 26 янв 2018, 14:42
demogorgon писал(а): 24 янв 2018, 18:10 Добрый день!Подскажите пожалуйста, возможно л и в вашем коде выставить скорость вращения программно и один раз,?
Приветствую. Конечно можно. Достаточно в главном цикле переменной ovftimes присвоить значение от 0 до 65535.

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

Добавлено: 26 янв 2018, 20:57
AntonChip
Архив не открывается, пишет неизвестный формат или ошибка