Easyelectronics.ru

Электроника для всех
Текущее время: 11 апр 2021, 00:51

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Подскажите алгоритм разгона и замедления шаговика
СообщениеДобавлено: 08 апр 2010, 22:04 
Только пришел

Зарегистрирован: 27 янв 2010, 03:21
Сообщения: 13
Откуда: Одесса
Всем привет.

Есть два шаговика управляемые в микрошаге, нужно линейно их разгонять и тормозить (раздельно), так как вращают они массивные вещи. (контроллер ATmega8515) Нашел на просторах интернета описание (AVR446: Linear speed control of stepper motor http://www.atmel.com/dyn/resources/prod_documents/doc8017.pdf), но с английским не в ладах, нашел еще архив с этим примером описном в пэ-дэ-эф, так вот он скомпилировался в ~19 кб :(.

помогите кто чем может.


Вложения:
avr446-avrgcc.zip [13.01 Кб]
Скачиваний: 459

_________________
Если руки золотые, то не важно откуда они растут.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм разгона и замедления шаговика
СообщениеДобавлено: 09 апр 2010, 09:43 
Заглядывает иногда

Зарегистрирован: 08 апр 2010, 12:32
Сообщения: 33
Откуда: Москва и г. Видное
На сайте gaw.ru переведены многие апноуты AVR - пошукайте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм разгона и замедления шаговика
СообщениеДобавлено: 09 апр 2010, 10:52 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:17
Сообщения: 2235
Откуда: Krasnoyarsk
Семенов Михаил, не поверите, конкретно этот не переведен.

_________________
У кошки четыре ноги: вход (in), выход (out), земля (gnd) и питание (vcc). А хвост для беспроводной передачи данных.
http://www.orcinus.ru (null)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм разгона и замедления шаговика
СообщениеДобавлено: 09 апр 2010, 11:41 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 27 янв 2010, 00:06
Сообщения: 74
Откуда: Moldova Рыбница
Может я и не прав , но мне кажется что это не так уж и сложно .
Каждый шаг делать по прерыванию таймера а уже в таймере плавно уменьшать значение для разгона и увеличивать для торможения .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм разгона и замедления шаговика
СообщениеДобавлено: 09 апр 2010, 11:46 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:17
Сообщения: 2235
Откуда: Krasnoyarsk
Здесь даже ШИМ подойдет для процентного управления скоростью, главное конденсаторы не подключать.

_________________
У кошки четыре ноги: вход (in), выход (out), земля (gnd) и питание (vcc). А хвост для беспроводной передачи данных.
http://www.orcinus.ru (null)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм разгона и замедления шаговика
СообщениеДобавлено: 09 апр 2010, 15:11 
Только пришел

Зарегистрирован: 27 янв 2010, 03:21
Сообщения: 13
Откуда: Одесса
думаю использовать для этого TIMER1 с прерываниями по совпадению, A и B.. для первого и второго шаговика.
думал есть что-то готовое что бы не городить огороды.

_________________
Если руки золотые, то не важно откуда они растут.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм разгона и замедления шаговика
СообщениеДобавлено: 18 апр 2010, 20:58 
Только пришел

Зарегистрирован: 27 янв 2010, 03:21
Сообщения: 13
Откуда: Одесса
если есть у кого пример, поделитесь пожалуйста, а то ускорение как то криво выходит, процесс ускорения и замедления медленно происходит, а сами шаги нормально...

_________________
Если руки золотые, то не важно откуда они растут.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Подскажите алгоритм разгона и замедления шаговика
СообщениеДобавлено: 18 ноя 2013, 06:17 
Здравствуйте!
Аватара пользователя

Зарегистрирован: 18 ноя 2013, 04:16
Сообщения: 2
Откуда: Москва
[quote="Xakepok"]если есть у кого пример, поделитесь пожалуйста, а то ускорение как то криво выходит, процесс ускорения и замедления медленно происходит, а сами шаги нормально...[/quote]
Пример для AVR, писал для шагавика который стоит на слайдэре для видеокамеры, плавный старт и плавное торможения, код сжирает 2 таймера, один тикает для упровления шаговика (драйвер L297) , второй таймер как раз задает время плавного старта

//**********векторы прерывания (обработчики прерываний.)****************************

SIGNAL(__vector_default){}; // убиваем левые прерывания
SIGNAL(TIMER0_COMPA_vect) // прерывания по совпадению счeтного таймера 0 (работает при запуска драйвера ШД, передергивает пин clock апаратного драйвера шд.(L297)
{CLR(PortMotor,pin_CLOCK);
SET(PortMotor,pin_CLOCK);
if(!(flag_timer&0b00000001))
{
if(number_of_step==0)
{CLR(flag_timer,1);}else{number_of_step--;};
if(program_step_flag){ // включается если работает режим - программное упровления
if(number_of_step<=(step_to_cm-45)){number_of_step=1000;distance_drv--;};};
};};

SIGNAL(TIMER1_COMPA_vect) // прерывания по совпадению счeтного таймера 1 (плавность хода)
{
if(flag_timer&0b00000010){if(OCR0A>=speed_motor){OCR0A--;}}
else{if(OCR0A==255){Stop_motor();}
else{OCR0A++;};};
};



//*********драйвер шагового двигателя***********************************************
void StepMotor(char direction1, unsigned long clock2, char speed_motor_drv,int smooth) // направление(1 влево), сколько шагов(если 0 то шаги бесконечны), скорость вращения(255min-11мах), плавность старта/торможение.
{
if(direction1==1){SET(PortMotor,pin_direction );}else{CLR(PortMotor,pin_direction );}; // проверяем, и выстfвляем пин в какую сторону вращаться
if(clock2==0){SET(flag_timer,0);}else{CLR(flag_timer,0);number_of_step = clock2;}; //проверяем на бесконечный цикл,и в соответствии с этим ставим флаг, суем значения количество шагов в глобальную переменную для последующей обработке (отсчета)
speed_motor = speed_motor_drv; // переносим значения скорости в глобальную перемеyнную
CLR(MDCR,3);
motor_step_on; // включаем драйвер мотора
SET(flag_timer,1);

if(smooth==0){OCR0A=speed_motor;}else{OCR0A=254;};
OCR1A = smooth; // прерывания устанавливается как плавно будет стартовать мотор
TCCR1A = 0b00000000;
TCCR1B = 0b00001011; // сброс при совпадении OCR1A, запуск таймера, fc/64
TIMSK1 = (1<<OCIE1A);

TCCR0A = 0b00000010; // сброс при совподении OCR0A
TCCR0B = 0b00000100; // запуск таймера, fc/256
TIMSK0 = (1<<OCIE0A);
sei();
};

void Stop_motor()
{
TCCR0B = 0; // останавливаем таймер 0
TCCR1B = 0; // останавливаем таймер 1
SET(MDCR,3); // бит показывает что мотор завершил работу
};

_________________
фаза есть ума не надо


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB