ATmega16 + uln2803 как драйвер для ШД

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

ATmega16 + uln2803 как драйвер для ШД

Сообщение Mantis » 18 май 2011, 08:18

Здравствуйте! Я всего неделю изучаю программирование mega16 и читал курс avr123, но у меня осталось несколько вопросов. Научил ATmega16 вполне успешно рулить униполярным шаговиком в оба направления с заданным ускорением, программа на Cи в cvavr (1.2.58) получилась вполне красивой, всё вызывается через функцию c параметрами, и мейн занимает пару строк всего... Но задача моя состоит в другом.
Необходимо сделать так, чтобы превратить мегу16 в связке с uln2803(по 2 ножки на вывод каждой фазы ШД для снижения тока на ее ногу) в драйвер для этого движка, то бишь мега будет промежуточным звеном, на которое будет приходить по переднему фронту импульса задание на 1 "шаг" и на "направление". Нет ли у вас материалов с примером подобной программы? Желательно пример кода (ну или хотя бы алгоритм), потому что у меня опыта маловато и не до конца понимаю работу прерываний, хоть прочитал курс avr123 (в т.ч. и про прерывания, немного листал ДШ) и половину книги "codevisionAVR Пособие для начинающих" Лебедева.
Нужно чтобы по фронту импульса на одну из ног порта, например, PORTD, запускалась функция... Сейчас пробую сделать это через прерывание, потому что не знаю пока, как иначе выделить фронт и чтоб МК не проглотил управляющий импульс... Максимальная частота следования импульсов на "шаг" около 50 Гц (даже меньше), поэтому быстродействие тут не критично. Прошу прощения, если подобный вопрос поднимался уже и я свин не сумел нормально нагуглить по форуму... И мне нужно использовать именно МК, а не драйвер готовый для ШД, где уже предусмотрены такие входные сигналы.
Аватара пользователя
Mantis
 
Сообщения: 3
Зарегистрирован: 16 май 2011, 23:14
Откуда: Липецк
ФИО: Денис

Re: ATmega16 + uln2803 как драйвер для ШД

Сообщение dccharacter » 18 май 2011, 12:23

Фронт - это изменение уровня сигнала. Уровень сигнала может измениться, например, при нажатии на поключенную к ноге кнопку. Соответственно искать примеры обработки нажатий кнопки и борьбы с дребезгом.

Добавлено спустя 1 минуту 52 секунды:
А, да. Не надо в прерываниях вызывать функции. В прерываниях должен быть самый минимальный код.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: ATmega16 + uln2803 как драйвер для ШД

Сообщение Mantis » 18 май 2011, 15:29

dccharacter писал(а):А, да. Не надо в прерываниях вызывать функции. В прерываниях должен быть самый минимальный код.

Он должен быть минимальным, чтобы успевал обрабатываться до следующего прерывания. Я же указал, что максимальная частота импульсов на ногу не более 50 Гц, написал это не случайно, потому что задание приходит с ПЛК Schneider Electric серии Premium (не спрашивайте почему и зачем), там не скоростной, а обычный дискретный DC-выход 24 В лог. единица, частота его ограничена этими 50 Гц. Поэтому не писал о дребезге и прочих проблемах, сигнал приходит с цифрового задатчика импульсов и проходит через оптопару и RC-фильтр.

Добавлено спустя 10 минут 46 секунд:
Спасибо за совет про банального обработчика нажатия кнопки. Попытаюсь сейчас реализовать, но на всякий случай еще раз спрошу, нет ли у кого-нибудь подобного примера, чтобы ошибок не наворочал вероятных?
Аватара пользователя
Mantis
 
Сообщения: 3
Зарегистрирован: 16 май 2011, 23:14
Откуда: Липецк
ФИО: Денис

Re: ATmega16 + uln2803 как драйвер для ШД

Сообщение avr123.nm.ru » 18 май 2011, 15:37

Две кнопки на прерываниях это и есть пример к теме Прерывания в AVR - http://www.proavr.narod.ru/03.htm - с симуляцией в VMLAB.

Похоже не внимательно читали.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: ATmega16 + uln2803 как драйвер для ШД

Сообщение Mantis » 22 май 2011, 05:22

Есть ли возможность ввести прерывание по изменению состояния любой из ножек любого порта МК ATmega16? Или только по INTx'ам? Судя по ДШ нету, но спрошу на всякий случай. Видимо придется через циклы делать, а не через прерывания, потому что проверяются первые 2 ноги порта D... Так уж я плату развел и лаком покрыл уже.

Пока сделал через цикл, и всё пашет как надо!
Код: Выделить всё
while(1){
        if(!PIND.0){
                logic = 1;
                };
        if(PIND.0*logic){
                VPERED(40, 40, 1, 5);
                logic = 0;
                };
        };


Вот так он делает 5 шагов по переднему фронту на ноге 0 порта D, исключает дребезг. Всё это уже через гальваническую развязку, даже внешний RC-фильтр НЧ отключил.
Аватара пользователя
Mantis
 
Сообщения: 3
Зарегистрирован: 16 май 2011, 23:14
Откуда: Липецк
ФИО: Денис


Вернуться в Микроконтроллеры

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

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