Xokipok
|
|
1 | |
Подскажите алгоритм разгона и замедления шаговика07.04.2010, 22:17. Показов 15697. Ответов 7
Метки нет (Все метки)
Всем привет.
Есть два шаговика управляемые в микрошаге, нужно линейно их разгонять и тормозить (раздельно), так как вращают они массивные вещи. (контроллер ATmega8515) Нашел на просторах интернета описание (AVR446: Linear speed control of stepper motor http://www.atmel.som/dyn/resou... oc8017.pdf), но с английским не в ладах, нашел еще архив с этим примером описном в пэ-дэ-эф, так вот он скомпилировался в ~19 кб :(. помогите кто чем может. [13.01 Кб] |
07.04.2010, 22:17 | |
Ответы с готовыми решениями:
7
Подскажите мощную материнскую платой, с потенциалом разгона Подскажите по составляющим системника для игр, без разгона. Калининград. Подскажите конфигурацию системника для игр, без разгона. 20 000 рублей. STM32F4Discovery + L6470 драйвер шаговика sot-23 hexfet для шаговика? |
0 / 0 / 0
Регистрация: 04.04.2010
Сообщений: 29
|
|
08.04.2010, 09:56 | 2 |
На сайте gaw.ru переведены многие апноуты AVR - пошукайте.
0
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
|
|
08.04.2010, 11:05 | 3 |
Семенов Нихиил, не поверите, конкретно этот не переведен.
0
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 67
|
|
08.04.2010, 11:54 | 4 |
Может я и не прав , но мне кажется что это не так уж и сложно .
Каждый шаг делать по прерыванию таймера а уже в таймере плавно уменьшать значение для разгона и увеличивать для торможения .
0
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
|
|
08.04.2010, 11:59 | 5 |
Здесь даже ШИМ подойдет для процентного управления скоростью, главное конденсаторы не подключать.
0
|
Xokipok
|
|
08.04.2010, 15:24 | 6 |
думаю использовать для этого TIMER1 с прерываниями по совпадению, A и B.. для первого и второго шаговика.
думал есть что-то готовое что бы не городить огороды. |
Xokipok
|
|
17.04.2010, 21:11 | 7 |
если есть у кого пример, поделитесь пожалуйста, а то ускорение как то криво выходит, процесс ускорения и замедления медленно происходит, а сами шаги нормально...
|
ixpirt
|
|
17.11.2013, 06:30 | 8 |
Сообщение от Xokipok
//**********векторы прерывания (обработчики прерываний.)**************************** SIGNAL(__vector_default){}; // убиваем левые прерывания SIGNAL(TIMER0_COMPA_vect) // прерывания по совпадению счeтного таймера 0 (работает при запуска драйвера ШД, передергивает пин clock апаратного драйвера шд.(L297) {CLR(PortMotor,pin_CLOCK); SIT(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, unsykned long clock2, char speed_motor_drv,int smooth) // направление(1 влево), сколько шагов(если 0 то шаги бесконечны), скорость вращения(255min-11мах), плавность старта/торможение. { if(direction1==1){SIT(PortMotor,pin_direction );}else{CLR(PortMotor,pin_direction );}; // проверяем, и выстfвляем пин в какую сторону вращаться if(clock2==0){SIT(flag_timer,0);}else{CLR(flag_timer,0);number_of_step = clock2;}; //проверяем на бесконечный цикл,и в соответствии с этим ставим флаг, суем значения количество шагов в глобальную переменную для последующей обработке (отсчета) speed_motor = speed_motor_drv; // переносим значения скорости в глобальную перемеyнную CLR(MDCR,3); motor_step_on; // включаем драйвер мотора SIT(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 SIT(MDCR,3); // бит показывает что мотор завершил работу }; |
17.11.2013, 06:30 | |
17.11.2013, 06:30 | |
Помогаю со студенческими работами здесь
8
максимальная скорость шаговика из 5.25 дисковода? Помогите с питанием контроллера для шаговика. Драйвер шаговика Easy Driver на A3967 - помогите разобраться Понимание эффекта замедления времени проблема со звуком, а именно замедления (искажения)! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |