Например TDA7294

Форум РадиоКот • Просмотр темы - STEP/DIR контроллер 3-х шаговых двигателей на микроконтролле
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Ср апр 17, 2024 02:06:03

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


ПРЯМО СЕЙЧАС:



Начать новую тему Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 38 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: STEP/DIR контроллер 3-х шаговых двигателей на микроконтролле
СообщениеДобавлено: Вт май 10, 2011 16:08:32 
Открыл глаза

Зарегистрирован: Чт янв 10, 2008 15:30:33
Сообщений: 74
Рейтинг сообщения: 0
станок интересный,

http://radiokot.ru/circuit/digital/automat/25/

но откуда найти деталировку механики и печатную плату, по моему проект не докончен, и что можно в роли бор

машини использовать


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Вт май 10, 2011 16:49:01 
Друг Кота
Аватар пользователя

Карма: 39
Рейтинг сообщений: 707
Зарегистрирован: Ср фев 01, 2006 22:29:02
Сообщений: 3050
Откуда: г.Ростов-на-Дону
Рейтинг сообщения: 0
Проект требует реальной доводки до ума, даже если попытаться фрезеровать на нем фанерку скажем 4-5 мм конструкция начнет по швам сыпаться. Ось Z выглядит таким образом что ее делали на очень скорую руку.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Вт май 10, 2011 21:13:07 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Пт мар 19, 2010 16:52:19
Сообщений: 224
Откуда: Челябинск
Рейтинг сообщения: 0
Этот STEP/DIR контроллер работает под Kcam4? :)

_________________
Изображение


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Ср май 11, 2011 13:52:25 
Встал на лапы

Зарегистрирован: Чт янв 17, 2008 23:40:37
Сообщений: 113
Рейтинг сообщения: 0
Ну конструкция далеко по швам не сыплется, она крепче чем кажется на первый взгляд. Фрезеровал алюминий, делал узор на дубовой доске глубиной до 8 мм V-образной 30 градусной фрезой. Прекрасно фрезирует акрил, контуры плат. Единственное нехватает вертикальной жесткости по оси У... т.е. если кривой винт, стол подпрыгивает при повороте винта. Планирую заменить эти мебельные направляющие...
И еще одно... грабли... В качестве стола не берите фанетру. Я пару недель назад поменял на 20 мм. МДФ от столешницы.
Печатку могу выложить, но она на ОООЧЕНь скорую руку... но работает...

Под Kcam4 не проверял, но должно работать...


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Ср май 11, 2011 17:16:06 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Пт мар 19, 2010 16:52:19
Сообщений: 224
Откуда: Челябинск
Рейтинг сообщения: 0
Freeman писал(а):
Печатку могу выложить, но она на ОООЧЕНь скорую руку... но работает...


Можно глянуть печатку? :)

_________________
Изображение


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Ср май 11, 2011 17:42:11 
Встал на лапы

Зарегистрирован: Чт янв 17, 2008 23:40:37
Сообщений: 113
Рейтинг сообщения: 0
kiahack писал(а):
Можно глянуть печатку?

Да, пожалуйста.

Во вложении платы в формате орла...


Вложения:
Stepper Driver.rar [16.28 KiB]
Скачиваний: 2592
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Ср май 11, 2011 17:49:20 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Пт мар 19, 2010 16:52:19
Сообщений: 224
Откуда: Челябинск
Рейтинг сообщения: 0
Freeman писал(а):
Да, пожалуйста.

Во вложении платы в формате орла...


Спасибо! :)

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Чт май 12, 2011 15:05:40 
Родился

Зарегистрирован: Пн авг 30, 2010 17:51:22
Сообщений: 11
Откуда: Нижнекамск
Рейтинг сообщения: 0
Freeman писал(а):
kiahack писал(а):
Можно глянуть печатку?

Да, пожалуйста.

Во вложении платы в формате орла...


А исходники с целью анализа, тренировки в программировании и похищения идей можно посмотреть?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Чт май 12, 2011 17:30:31 
Встал на лапы

Зарегистрирован: Чт янв 17, 2008 23:40:37
Сообщений: 113
Рейтинг сообщения: 0
низя, уж извините...
там и идей-то никаких новых нету, и писать нечего... все предельно просто...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Чт май 12, 2011 20:05:19 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Пт мар 19, 2010 16:52:19
Сообщений: 224
Откуда: Челябинск
Рейтинг сообщения: 0
Куда это питание идёт?
Изображение


Вложения:
Комментарий к файлу: 123
123.jpg [42.09 KiB]
Скачиваний: 12247

_________________
Изображение
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Чт май 12, 2011 22:15:31 
Встал на лапы

Зарегистрирован: Чт янв 17, 2008 23:40:37
Сообщений: 113
Рейтинг сообщения: 0
kiahack писал(а):
Куда это питание идёт?

+12 на колодку J1

И вообще, я ж писал, разъем XD - резервный, на него, кажется, в этой версии прошивки ничего не идет. Потом планирую добавить управление реле всякими... но пока времени нету.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Пт май 13, 2011 20:37:30 
Прорезались зубы
Аватар пользователя

Зарегистрирован: Пт мар 19, 2010 16:52:19
Сообщений: 224
Откуда: Челябинск
Рейтинг сообщения: 0
Freeman писал(а):
+12 на колодку J1

И вообще, я ж писал, разъем XD - резервный, на него, кажется, в этой версии прошивки ничего не идет. Потом планирую добавить управление реле всякими... но пока времени нету.



Спасибо! )

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Пн май 16, 2011 13:38:35 
Первый раз сказал Мяу!

Зарегистрирован: Вт дек 19, 2006 16:44:13
Сообщений: 33
Рейтинг сообщения: 0
не подскажете какая мега подойдет? в магазине мег16 кучка небольшая
mega16-16AU
mega16-16PU
mega16A-AU
mega16A-PU
mega16L-8PU
спасибо
пысы: развитие контроллера будет и как скоро?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Пн май 16, 2011 15:38:47 
Встал на лапы

Зарегистрирован: Чт янв 17, 2008 23:40:37
Сообщений: 113
Рейтинг сообщения: 0
ViP писал(а):
не подскажете какая мега подойдет? в магазине мег16 кучка небольшая

Впринципи любая...
mega16L-8PU будет работать с небольшим оверклокингом.

У меня вроди atmega16-16PU стоит, хотя хз, завтра буду дома, гляну...

ViP писал(а):
пысы: развитие контроллера будет и как скоро?

На счет развития - планирую, но как скоро, не знаю... пока дел много...
А чего там вообще развивать? ну кроме реле управления шпинделем... Мож пожелания какие будут?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Вт май 17, 2011 00:49:04 
Открыл глаза

Зарегистрирован: Пн ноя 30, 2009 23:49:43
Сообщений: 72
Откуда: Донецк
Рейтинг сообщения: 0
Freeman мне понравился ваш проект довольно простое и практичное решение. Давно уже обдумываю постройку чпу но все в поисках надежной и недорогой конструкции электроники , ваш проект то что надо дешево и практично... Но я не не понял как реализованы концевые выключатели нулевого положения осей х,у,z?
Я думаю что кроме реле управления шпинделем, не помешало бы управление для пылесоса или какой нибудь небольшой вытяжки...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Вт май 17, 2011 05:36:37 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Пн май 31, 2010 16:50:37
Сообщений: 176
Откуда: Тольятти
Рейтинг сообщения: 0
Вот подобный агрегат:
Вложение:
CNC.doc [350.5 KiB]
Скачиваний: 8176

Freeman - извини, что влез в тему твоей статьи.
Просто как вариант для развития.

_________________
Это ВАМ не Это...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Вт май 17, 2011 09:22:14 
Открыл глаза

Зарегистрирован: Чт янв 10, 2008 15:30:33
Сообщений: 74
Рейтинг сообщения: 0
vitrix писал(а):
Вот подобный агрегат:
Вложение:
CNC.doc

Freeman - извини, что влез в тему твоей статьи.
Просто как вариант для развития.


класс! Вот это уже то, что надо, а можно по подробнее ? печатная плата, пошивка.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Вт май 17, 2011 09:42:38 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Пн май 31, 2010 16:50:37
Сообщений: 176
Откуда: Тольятти
Рейтинг сообщения: 0
vahoo писал(а):
а можно по подробнее ? печатная плата, пошивка.

Вечером, если Freeman будет не против.
Уже и не помню - откуда скачал.
Есть прошивки на мегу16,32,8535.

_________________
Это ВАМ не Это...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Вт май 17, 2011 09:48:47 
Встал на лапы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 0
Зарегистрирован: Ср дек 29, 2010 17:30:34
Сообщений: 130
Рейтинг сообщения: 0
Когда-то для друга, который хотел начать программировать авр_ки, делал подобное.
Упор делал не на оптимальность работы прошивки, а на максимальность понимания процессов,
происходящих в контроллере на примере понятного ему (другу) задания.
Но тем не менее, оно хоть и учебное, но работало.
Сделано в ИАР_е под МЕГУ8
3 step-dir с режимом "сна"
Поскольку у этого контроллера только 2 внешних прерывания, третьим выбран вход компаратора.
Код:
#include <inavr.h>
#include <iom8.h>

/* Set BIT in ADDRESS */
#define setbit(ADDRESS,BIT) ((ADDRESS) |= (1<<(BIT)))

/* Clear BIT in ADDRESS */
#define clearbit(ADDRESS,BIT)  ((ADDRESS) &= ~(1<<(BIT)))

/* Test BIT in ADDRESS */
#define testbit(ADDRESS,BIT)  ((ADDRESS) & (1<<(BIT)))


volatile unsigned char worktime1,worktime2,worktime3;
volatile unsigned char oldstatus_motor1,oldstatus_motor2,oldstatus_motor3;

void port_init(void)
{
 PORTB = 0x00;//all pin=0
 DDRB  = 0xFF;//all for output
 
 PORTC = 0x00;//all pin=0
 DDRC  = 0x7F;//C0-C6 for output
 
 PORTD = 0x00;//all output pinD=0, input pin D5 without pullup_s
 DDRD  = 0x20;//D5-output, all other-input
}

//TIMER0 initialize (On system clock=8MHZ, overflow interrupt every 32768us.)
void timer0_init(void)
{
 TCCR0 = 0x00; //stop
 TCCR0 = 0x05; //start timer prescale:1024
}

//Comparator initialize
void comparator_init(void)
{
 ACSR = ACSR & 0xF7; //ensure interrupt is off before changing
 ACSR = 0x4B; //Use Analog Comparator+Compare interrupt
              //fixed bandgap reference voltage replaces the positive input to the Analog Comparator.
              //Interrupt trigger level - Rising output edge
              //interrupt from 1 to 0 on pin D7
}

void sleep_motor1(void) //мотор 1 ложим в спящее состояние
{
clearbit(PORTD,5); // установили в 1 PORTB,5 договоримся, что лог 1 уменьшает питание этого двигателя до состояния удержания
}
void sleep_motor2(void)
{
clearbit(PORTB,7);
}
void sleep_motor3(void)
{
clearbit(PORTB,6);
}

void wakeup_motor1(void)//мотор 1 выводим из спящего состояния
{
setbit(PORTD,5);  //установили в 0 PORTB,5 договоримся, что лог 0 питание этого двигателя на всю катушку
worktime1=0;        //раз двигатель проснулся, то переменная, содержащая количество тактов таймера когда двигатель1 неактивен, =0
}                   //грубо говоря, считаем с нуля.

void wakeup_motor2(void)
{
setbit(PORTB,7);
worktime2=0;
}

void wakeup_motor3(void)
{
setbit(PORTB,6);
worktime3=0;
}


#pragma vector =  TIMER0_OVF_vect
__interrupt void  timer0_ovf_handler(void)
{
  //32786 us time left
worktime1++; //таймер клацнул. увеличиваем переменные неактивности двигателей
worktime2++;
worktime3++;
if (worktime1>=30){sleep_motor1();worktime1=0;}//30 клацаний это около 1 секунды
if (worktime2>=30){sleep_motor2();worktime2=0;}//если двигатель неактивен более секунды,
if (worktime3>=30){sleep_motor3();worktime3=0;}//то ему пора баеньки
}//а чтобы не часто его укладывать(32786 us), счетчики обнулим. повторно уложим через 1 секунду.

//тутычки процедура вычисления статуса, если нужно вращать влево
unsigned char workleft(unsigned char data)
{
unsigned char resultat=1;// промежуточная переменная
switch (data)// смотрим, что нам принесло число, переданное в эту процедуру
      {
      case 1: {resultat=2;break;} //в зависимости от предыдущих состояний
      case 2: {resultat=3;break;} //присваиваем промежуточной переменной различные состояния
      case 3: {resultat=4;break;}
      case 4: {resultat=5;break;}
      case 5: {resultat=6;break;}
      case 6: {resultat=7;break;}
      case 7: {resultat=8;break;}
      case 8: {resultat=1;break;}
      default: break;  // так нужно...
      }
return resultat;// говорим то, что вернет нам эта процедура
}


//а здеся процедура вычисления статуса, если нужно вращать вправо
unsigned char workright(unsigned char data)
{
unsigned char resultat=1;//    все, как и выше, только вправо
switch (data)
      {
      case 1: {resultat=8;break;}
      case 2: {resultat=1;break;}
      case 3: {resultat=2;break;}
      case 4: {resultat=3;break;}
      case 5: {resultat=4;break;}
      case 6: {resultat=5;break;}
      case 7: {resultat=6;break;}
      case 8: {resultat=7;break;}
      default: break; 
      }
return resultat;
}

// и вот, наконец само воздействие на состояния выходных линий
void left_motor1(void)
{
unsigned char newstatus; // все, как и раньше. обьявляем промежуточную переменную
newstatus=workleft(oldstatus_motor1); //выясняем, какой статус будет, если раньше у мотора был статус-oldstatus_motor1
clearbit(PORTB,0);                    //а вращать нужно влево.
clearbit(PORTB,1);                 
clearbit(PORTB,2);                    //наитупейшим образом обнуляем выходные линии
clearbit(PORTB,3);                   
if (newstatus==1) {setbit(PORTB,0);}
if (newstatus==2) {setbit(PORTB,0);setbit(PORTB,1);}
if (newstatus==3) {setbit(PORTB,1);}
if (newstatus==4) {setbit(PORTB,1);setbit(PORTB,2);}
if (newstatus==5) {setbit(PORTB,2);}
if (newstatus==6) {setbit(PORTB,2);setbit(PORTB,3);}
if (newstatus==7) {setbit(PORTB,3);}
if (newstatus==8) {setbit(PORTB,3);setbit(PORTB,0);}
oldstatus_motor1=newstatus; // и напоследок, ведь статус выходных линий уже поменяли, запоминаем новый статус, как старый.
}                           // это пригодится при повторном вычислении этого статуса


void right_motor1(void)
{
unsigned char newstatus;
newstatus=workright(oldstatus_motor1);// все, как и раньше. Только вправо.
clearbit(PORTB,0);
clearbit(PORTB,1);
clearbit(PORTB,2);
clearbit(PORTB,3);
if (newstatus==1) {setbit(PORTB,0);}
if (newstatus==2) {setbit(PORTB,0);setbit(PORTB,1);}
if (newstatus==3) {setbit(PORTB,1);}
if (newstatus==4) {setbit(PORTB,1);setbit(PORTB,2);}
if (newstatus==5) {setbit(PORTB,2);}
if (newstatus==6) {setbit(PORTB,2);setbit(PORTB,3);}
if (newstatus==7) {setbit(PORTB,3);}
if (newstatus==8) {setbit(PORTB,3);setbit(PORTB,0);}
oldstatus_motor1=newstatus;
}

void left_motor3(void)
{
unsigned char newstatus;
newstatus=workleft(oldstatus_motor3);
clearbit(PORTC,2);
clearbit(PORTC,3);
clearbit(PORTC,4);
clearbit(PORTC,5);
if (newstatus==1) {setbit(PORTC,2);}
if (newstatus==2) {setbit(PORTC,2);setbit(PORTC,3);}
if (newstatus==3) {setbit(PORTC,3);}
if (newstatus==4) {setbit(PORTC,3);setbit(PORTC,4);}
if (newstatus==5) {setbit(PORTC,4);}
if (newstatus==6) {setbit(PORTC,4);setbit(PORTC,5);}
if (newstatus==7) {setbit(PORTC,5);}
if (newstatus==8) {setbit(PORTC,5);setbit(PORTC,2);}
oldstatus_motor3=newstatus;
}


void right_motor3(void)
{
unsigned char newstatus;
newstatus=workright(oldstatus_motor3);
clearbit(PORTC,2);
clearbit(PORTC,3);
clearbit(PORTC,4);
clearbit(PORTC,5);
if (newstatus==1) {setbit(PORTC,2);}
if (newstatus==2) {setbit(PORTC,2);setbit(PORTC,3);}
if (newstatus==3) {setbit(PORTC,3);}
if (newstatus==4) {setbit(PORTC,3);setbit(PORTC,4);}
if (newstatus==5) {setbit(PORTC,4);}
if (newstatus==6) {setbit(PORTC,4);setbit(PORTC,5);}
if (newstatus==7) {setbit(PORTC,5);}
if (newstatus==8) {setbit(PORTC,5);setbit(PORTC,2);}
oldstatus_motor3=newstatus;
}



#pragma vector =  ANA_COMP_vect// Сюда мы попадем, если вход AIN1 установится в 0
__interrupt void  ana_comp_handler(void)
{
//analog comparator compare event
wakeup_motor3(); // договорились, что рабочий фронт =0, значит двигатель просят подвинуться. Нужно просыпаться
if (!testbit(PIND,1)>0) left_motor3();// а в зависимости, от того, в какую сторону просят крутиться,
  else right_motor3();               //вызываем и соответствующие подппрограмки
}


void left_motor2(void)// все, как и раньше. Только для двигателя 2.
{
unsigned char newstatus;
newstatus=workleft(oldstatus_motor2);
clearbit(PORTB,4);
clearbit(PORTB,5);
clearbit(PORTC,0);
clearbit(PORTC,1);
if (newstatus==1) {setbit(PORTB,4);}
if (newstatus==2) {setbit(PORTB,4);setbit(PORTB,5);}
if (newstatus==3) {setbit(PORTB,5);}
if (newstatus==4) {setbit(PORTB,5);setbit(PORTC,0);}
if (newstatus==5) {setbit(PORTC,0);}
if (newstatus==6) {setbit(PORTC,0);setbit(PORTC,1);}
if (newstatus==7) {setbit(PORTC,1);}
if (newstatus==8) {setbit(PORTC,1);setbit(PORTB,4);}
oldstatus_motor2=newstatus;
}


void right_motor2(void)
{
unsigned char newstatus;
newstatus=workright(oldstatus_motor2);
clearbit(PORTB,4);
clearbit(PORTB,5);
clearbit(PORTC,0);
clearbit(PORTC,1);
if (newstatus==1) {setbit(PORTB,4);}
if (newstatus==2) {setbit(PORTB,4);setbit(PORTB,5);}
if (newstatus==3) {setbit(PORTB,5);}
if (newstatus==4) {setbit(PORTB,5);setbit(PORTC,0);}
if (newstatus==5) {setbit(PORTC,0);}
if (newstatus==6) {setbit(PORTC,0);setbit(PORTC,1);}
if (newstatus==7) {setbit(PORTC,1);}
if (newstatus==8) {setbit(PORTC,1);setbit(PORTB,4);}
oldstatus_motor2=newstatus;
}

#pragma vector =  INT0_vect// Сюда мы попадем, если вход INT0 установится в 0
__interrupt void  int0_handler(void)
{
//external interupt on INT0
wakeup_motor1();// все, как и для мотора3, только для первого
if (!testbit(PIND,0)>0) left_motor1();
  else right_motor1();
}




#pragma vector =  INT1_vect// Сюда мы попадем, если вход INT1 установится в 0
__interrupt void  int1_handler(void)
{
//external interupt on INT1
wakeup_motor2();// выше уже обьяснял.
if (!testbit(PIND,4)>0) left_motor2();
  else right_motor2();
}

void init_devices(void)
{
 //stop errant interrupts until set up
__disable_interrupt(); //disable all interrupts
 port_init();// вызываем процедуру инициализации портов
 timer0_init();// вызываем процедуру инициализации таймера
 comparator_init();// вызываем процедуру инициализации компаратора

 MCUCR = 0x0A;// INT0- Falling edge, INT1- Falling edge (interrupt from 1 to 0)
 GICR  = 0xC0;// Interrupt from INT0+INT1
 TIMSK = 0x01; //timer interrupt sources
 __enable_interrupt(); //re-enable interrupts
 //all peripherals are now initialized
}




main( void )
{
 worktime1=0; //обнуляем переменные, содержащие время неактивности двигателей
 worktime2=0;
 worktime3=0;
 oldstatus_motor1=1;// состояния портов двигателя 1.2.3.4
 oldstatus_motor2=1;//примем по умолчанию 1
 oldstatus_motor3=1;
 init_devices();// Думаю, это не вызывает затруднений для понимания....

__delay_cycles (300);
// В соответствии со статусом 1  установим соответствующие линии портов
clearbit(PORTB,2);//M1
clearbit(PORTB,3);
clearbit(PORTB,1);
setbit(PORTB,0);

clearbit(PORTC,0);//M2
clearbit(PORTC,1);
clearbit(PORTB,5);
setbit(PORTB,4);

clearbit(PORTC,4);//M3
clearbit(PORTC,5);
clearbit(PORTC,3);
setbit(PORTC,2);

 sleep_motor1();
 sleep_motor2();
 sleep_motor3();
 while(1){}// Все настроено. Дальше работа идет только при возникновении прерываний.
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STEP/DIR контроллер 3-х шаговых двигателей на микроконтр
СообщениеДобавлено: Вт май 17, 2011 12:43:04 
Встал на лапы

Зарегистрирован: Чт янв 17, 2008 23:40:37
Сообщений: 113
Рейтинг сообщения: 0
vitrix писал(а):
Вечером, если Freeman будет не против.

Freeman не против, вот только эта ветка по конкретному устройству... так что если по вашей теме будет больше 1-2 сообщений, то стоит создать отдельную тему.

В свое время такой проектик не нашел и решил сделать свой. Кроме того он (для меня) избыточен.
Кстати, вместо биполярников лучше ставить полевики...

А вот с джойстиком, идея интересная, надо бы где-то найти и поиграться...

убивец писал(а):
Но я не не понял как реализованы концевые выключатели нулевого положения осей х,у,z?

По схеме предусмотрена только кнопка Estop. Остальное - не разведено. Никто вам не мешает дополнить схему концевиками - благо входов в LPT хватает.

А на счет исходников - не выкладываю потому что разведется флуд по теме нерациональности и кривизны написания... Имею горький опыт... Сам я не считаю что прошивка плохо написана, просто, местами, не рационально...
Но ведь программисты, они как из гитаристы из анекдотов:

"- Сколько нужно гитаристов, чтобы вкрутить лампочку?
- 100!
- Почему так много?!
- Один будет вкручивать, а остальные 99 будут критиковать,
и говорить, что они бы это сделали значительно лучше."


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 38 ]  1,  

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y