Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/34: Рейтинг темы: голосов - 34, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 91
1

ЧЯДНТ?! Управление шаговым двигателем с таймера

29.08.2013, 00:46. Просмотров 6352. Ответов 14
Метки нет (Все метки)

Собственно, код
http://pastebin.com/kWQNwEp9

Вроде бы, все просто - таймер тикает, дрыгатель идет. И почти все работает, за исключением того, что таймер должен сработать 7040 раз (выдать 3520 импульсов), а вместо этого выдает 3200 с чем-то импульсов (посчитано второй атмегой, int0 которой подвешен к ноге OC1A первой атмеги).
Всю голову сломал, не могу понять, куда пропадает почти 300 шагов. И цифра-то какая-то странная - ни на что не похоже.

В отладчике авр студио вроде все пучком - на каждый тик таймера position уменьшается на 1.

В общем, помогите, пожалуйста. Всю голову сломал уже.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.08.2013, 00:46
Ответы с готовыми решениями:

Управление шаговым двигателем на Attiny2313
нужен программный код на C и С++ Короче имеются две кнопки(влево и вправо).При нажатии на них...

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

Управление шаговым двигателем
Во-первых, спасибо за такой полезный и интересный ресурс. А теперь к проблеме. Имеется в наличии...

Управление шаговым двигателем
Привет. В общем нужно управлять шаговым двигателем. Задавать скорость и направление. Использую...

14
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
29.08.2013, 09:39 2
первое, что сразу смутило - задержки в прерываниях? Глюков не оберетесь. Не факт, что именно они дают такой эффект, но это просто крайне неправильно использовать их в прерываниях. Входы INT0-INT2 просто в воздухе? могут ловить помехи, вызывая свои прерывания, в которых у вас- опять же задержки, причем ощутимые, в по 10-50 мс. Уберите весь лишний код, не касающийся степ/дир, попробуйте отладить.
0
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 91
29.08.2013, 12:39 3
_delay_ms/_delay_us можно в прерывания - оно на пустом цикле сделано, насколько я понял. получается удобный способ отработки дребезга.
PCINT2 подтянут к питанию целиком, кроме одной используемой ноги
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
29.08.2013, 12:53 4
Цитата Сообщение от Bytikmor
_delay_ms/_delay_us можно в прерывания...
Можно и всю логику засунуть в прерывание, а в главной программе оставить один бесконечный цикл. Это иногда оправдано, но обычно так не делают. Обычно прерывания выставляют флаги готовности. Основной цикл увидев этот флаг делает процедуру обслуживания прерывания, сбрасывает флаг и снова уходит в бесконечный цикл. Бесконечный цикл иногда заменяют сном.
0
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 91
29.08.2013, 12:57 5
Ок. Есть кнопка, на кнопке висит обработчик прерывания. Как быстро и просто отработать дребезг?
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 2,048
29.08.2013, 13:06 6
системный таймер, не? да и вообще - кнопку на прерывание - моветон)
0
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 91
29.08.2013, 14:00 7
Т. е. завести еще один обработчик и еще один флаг (или даже два), ради того, чтобы выждать несколько миллисекунд паузы? Тоже можно. Только затраты не сопоставимы с результатом. =) Тем более, что в данном случае, мне как раз и нужно, чтобы все стояло пока кнопка не отдребезжится.

Чем плоха кнопка на прерывании?
0
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
29.08.2013, 14:43 8
Цитата Сообщение от Bytikmor
Т. е. завести еще один обработчик и еще один флаг (или даже два), ради того, чтобы выждать несколько миллисекунд паузы? Тоже можно. Только затраты не сопоставимы с результатом. =) Тем более, что в данном случае, мне как раз и нужно, чтобы все стояло пока кнопка не отдребезжится.

Чем плоха кнопка на прерывании?
Если прогать, то прогать правильно. Задержки в прерываниях - это такой моветон и срань, которые в будущем выливаются в большие проблемы. Несколько миллисекунд паузы - для микроконтроллера это как неделя. Из последствий - остальные прерывания, если они появятся, будут отсасывать, пока другое прерывание выжидает задержку в милисекунду. Никаких таймеров, УАРТов и прочего на прерываниях не получится. В итоге как раз таки задержка в прерывании несет огромные затраты для МК.
Кнопки на прерываниях моветон, потому что это оверкил. Не успеть среагировать на кнопку - это нужно постараться. К тому же если нужно три кнопки? А если пять? А прерывание создано как раз таки для того, чтобы прерываться на важные задачи, коими кнопка не является.
Но можно сказать, что в данном проекте все работает, ничего больше не намечается, и поэтому эта реализация имеет право быть. Но говнокод он и в Африке говнокод. В итоге Вы имеете пробелмы, которые имеете сейчас: таймер почему то не так считает и прочее. Рекомендую почитать информацию по поводу правильной организации программ. Например Конечные автоматы.
0
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 91
29.08.2013, 16:32 9
Цитата Сообщение от itysiy
Кнопки на прерываниях моветон, потому что это оверкил. Не успеть среагировать на кнопку - это нужно постараться. К тому же если нужно три кнопки? А если пять? А прерывание создано как раз таки для того, чтобы прерываться на важные задачи, коими кнопка не является.
Эта кнопка - очень важная, потому и на прерывании.

А при чем тут конечный автомат вообще не понял. =(
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
29.08.2013, 16:47 10
Цитата Сообщение от Bytikmor
Эта кнопка - очень важная, потому и на прерывании.
<Изображение удалено>
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,753
29.08.2013, 17:07 11
Цитата Сообщение от Bytikmor
...Эта кнопка - очень важная, потому и на прерывании...
В промышленности важные кнопки, например "Аварийный стоп" никогда не заводятся на управляющие мозги. Для этого есть быстродействующие реле безопасности. При срабатывании они блокируют силовую часть, и мозги могут отдавать любые команды, их уже никто не слышит.
0
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 91
29.08.2013, 17:36 12
Цитата Сообщение от omokost
В промышленности важные кнопки, например "Аварийный стоп" никогда не заводятся на управляющие мозги. Для этого есть быстродействующие реле безопасности. При срабатывании они блокируют силовую часть, и мозги могут отдавать любые команды, их уже никто не слышит.
Это да, но у меня такой нет.
0
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 91
29.08.2013, 17:39 13
Чем дальше, тем чудесатее.
Если ехать на 220 мм (к дрыгателю швп подсоединена), то все плохо - недогенерируется 600 импульсов.
Если ехать на 250 мм, то все тютелька в тютельку - генерируются все положенные 8000 импульсов.
Железо одно и то же, код один и тот же за исключением единственной константы

Фигня какая-то. =(
0
0 / 0 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
01.09.2013, 11:00 14
Цитата Сообщение от Bytikmor
Эта кнопка - очень важная, потому и на прерывании.
Обозначьте критерии важности. Время реакции и прочее.

А при чем тут конечный автомат вообще не понял. =(
Это было к тому, что там есть свои способы организации программ, в том числе и задержки.
0
0 / 0 / 0
Регистрация: 29.03.2012
Сообщений: 91
01.09.2013, 11:17 15
Критерий простой - кнопка нажата, что-то может шевелиться. Кнопка не нажата - ничего не должно шевелиться.

С кодом разобрался,
duty_steps = (duty_length / ryvotution_length) * steps_per_rev * 2;
должно быть
duty_steps = (duty_length * steps_per_rev * 2) / ryvotution_length;

Про конечный автомат, конечно же, почитал. Не очень понятно, почему у меня не конечный автомат: состояний 4, они описаны, есть флаг состояний, есть переходы между состояниями. Возможно, правила перехода между состояниями стоило описать в комментариях, конечно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2013, 11:17

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

Управление шаговым двигателем
Доброго времени суток! Объясню ситуацию: у меня есть шаговый двигатель от 3.5 дюймового флопика, а...

Управление шаговым двигателем
Здравствуйте. Дело в следующем. Имеется МК Atmega 128, PORTA PORTC PORTF которого управляют тремя...

Управление шаговым двигателем
Всем привет! Прошу оказать посильные консультации. Подскажите, каким образом с помощью Ардуино, я...

программное управление шаговым двигателем
Всем привет уважаемые! Задачка у меня такая нужно замутить программное управление шаговым...


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

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

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