Страница 2 из 3

Re: Подскажите по элетронике

Добавлено: 25 сен 2012, 18:20
shurikss123
а четвертая ось для каких целей нужна, добавлять ее или не стоит. почти заканчиваю

Re: Подскажите по элетронике

Добавлено: 25 сен 2012, 18:58
2cme
shurikss123 писал(а):а четвертая ось для каких целей нужна, добавлять ее или не стоит. почти заканчиваю
фото чего получилось то?

Re: Подскажите по элетронике

Добавлено: 25 сен 2012, 19:13
shurikss123
Там по проводам пока не понятно, вид ужасает, но исходник такой

Код: Выделить всё

/*
 * main.c
 *
 *  Created on: 24.09.2012
 *      Author: shurik
 */
#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/iom16.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define a 0b1000
#define b 0b0100
#define c 0b0010
#define d 0b0001
#define z 0b0000

volatile uint8_t Control_Port = 0;

volatile int stepX = 0;
volatile int dirX = 0;
volatile int posX = 0;
volatile int stepY = 0;
volatile int dirY = 0;
volatile int posY = 0;
volatile int stepZ = 0;
volatile int dirZ = 0;
volatile int posZ = 0;

volatile int operation = 0;

volatile uint8_t Xcount[] =
{ a, b, c, d, z };
volatile uint8_t Ycount[] =
{ a, b, c, d, z };
volatile uint8_t Zcount[] =
{ a, b, c, d, z };

int main()
{
	PORTA = 0xff;
	while (1)
	{
		Control_Port = PINA;
		// control start
		// X
		switch (!(Control_Port & (1 << PIN0)))
		{
			case 1:
			{
				dirX = 1;
				break;
			}
			case 0:
			{
				dirX = 0;
				break;
			}
			default:
				break;
		}

		switch (!(Control_Port & (1 << PIN1)))
		{
			case 1:
			{
				if (stepX == 0)
				{
					stepX = 1;
				}
				break;
			}
			case 0:
			{
				if (stepX == 1)
				{
					stepX = 2;
				}
				break;
			}
			default:
				break;
		}
		// Y
		switch (!(Control_Port & (1 << PIN2)))
		{
			case 1:
			{
				dirY = 1;
				break;
			}
			case 0:
			{
				dirY = 0;
				break;
			}
			default:
				break;
		}

		switch (!(Control_Port & (1 << PIN3)))
		{
			case 1:
			{
				if (stepY == 0)
				{
					stepY = 1;
				}
				break;
			}
			case 0:
			{
				if (stepY == 1)
				{
					stepY = 2;
				}
				break;
			}
			default:
				break;
		}
		// Z
		switch (!(Control_Port & (1 << PIN4)))
		{
			case 1:
			{
				dirZ = 1;
				break;
			}
			case 0:
			{
				dirZ = 2;
				break;
			}
			default:
				break;
		}

		switch (!(Control_Port & (1 << PIN5)))
		{
			case 1:
			{
				if (stepZ == 0)
				{
					stepZ = 1;
				}
				break;
			}
			case 0:
			{
				if (stepZ == 1)
				{
					stepZ = 2;
				}
				break;
			}
			default:
				break;
		}

		//X
		if (stepX == 2)
		{
			if (dirX == 1)
			{
				if (posX < 3)
				{
					posX++;
				}
				else
				{
					posX = 0;
				}
			}
			else
			{
				if (posX > 0)
				{
					posX--;
				}
				else
				{
					posX = 3;
				}
			}
			operation = 1;
			stepX = 0;
		}

		//Y
		if (stepY == 2)
		{
			if (dirY == 1)
			{
				if (posY < 3)
				{
					posY++;
				}
				else
				{
					posY = 0;
				}
			}
			else
			{
				if (posY > 0)
				{
					posY--;
				}
				else
				{
					posY = 3;
				}
			}
			operation = 1;
			stepY = 0;
		}

		//Z
		if (stepZ == 2)
		{
			if (dirZ == 1)
			{
				if (posZ < 3)
				{
					posZ++;
				}
				else
				{
					posZ = 0;
				}
			}
			else
			{
				if (posZ > 0)
				{
					posZ--;
				}
				else
				{
					posZ = 3;
				}
			}

			operation = 1;
			stepZ = 0;
		}

		if (operation == 1)
		{
			DDRD = (Xcount[posX]) | (Ycount[posY] << 4);
			DDRC = Zcount[posZ];
			operation = 0;
			_delay_ms(20); //тут можно откалибровать под двигатель
		}

		else
		{
			DDRD = (Xcount[4]) | (Ycount[4] << 4);
			DDRC = Zcount[4];
		}

	}

}
Можно еще добить и пульт с дисплеем, приделать сюда

Re: Подскажите по элетронике

Добавлено: 25 сен 2012, 19:26
wldev
shurikss123 писал(а):Там по проводам пока не понятно, вид ужасает, но исходник такой
Это исходник чего?

Re: Подскажите по элетронике

Добавлено: 25 сен 2012, 19:31
shurikss123
Bender писал(а):
shurikss123 писал(а):Там по проводам пока не понятно, вид ужасает, но исходник такой
Это исходник чего?
контроллера (atmega16)

Re: Подскажите по элетронике

Добавлено: 26 сен 2012, 14:35
wldev
Тяжко читать ваш исходник...((
Оч. много лишних "{ }"

Код: Выделить всё

*
 * main.c
 *
 *  Created on: 24.09.2012
 *      Author: shurik
 */
#define F_CPU 8000000UL

#include <avr/io.h>
#include <avr/iom16.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define a 0b1000
#define b 0b0100
#define c 0b0010
#define d 0b0001
#define z 0b0000

volatile uint8_t Control_Port = 0;

volatile int stepX = 0;
volatile int dirX = 0;
volatile int posX = 0;
volatile int stepY = 0;
volatile int dirY = 0;
volatile int posY = 0;
volatile int stepZ = 0;
volatile int dirZ = 0;
volatile int posZ = 0;

volatile int operation = 0;

volatile uint8_t Xcount[] =
{ a, b, c, d, z };
volatile uint8_t Ycount[] =
{ a, b, c, d, z };
volatile uint8_t Zcount[] =
{ a, b, c, d, z };



int main()
{
   PORTA = 0xff;
   while (1)
   {
      Control_Port = PINA;
      // control start
      // X
      dirX=!(Control_Port & (1 << PIN0)))
      
      switch (!(Control_Port & (1 << PIN1)))
       {
       case 1: if (stepX == 0) stepX = 1;  break;
	   case 0: if (stepX == 1) stepX = 2;  break;
      }
      // Y
      dirY=!(Control_Port & (1 << PIN2)))
      
      switch (!(Control_Port & (1 << PIN3)))
       {
        case 1: if (stepY == 0) stepY = 1; break;
        case 0: if (stepY == 1) stepY = 2; break;
       }
      // Z
      dirZ=!(Control_Port & (1 << PIN4)))
      
      switch (!(Control_Port & (1 << PIN5)))
       {
         case 1: if (stepZ == 0) stepZ = 1;break;
         case 0: if (stepZ == 1) stepZ = 2;break;
       }

      //X
      if (stepX == 2)
      {
         if (dirX == 1)
           if (posX < 3) posX++;  else posX = 0;
         else
           if (posX > 0) posX--;  else posX = 3;
         
         operation = 1;
         stepX = 0;
      }

      //Y
      if (stepY == 2)
      {
         if (dirY == 1)
           if (posY < 3) posY++; else posY = 0;
         else
           if (posY > 0) posY--; else posY = 3;
         operation = 1;
         stepY = 0;
      }

      //Z
      if (stepZ == 2)
      {
         if (dirZ == 1)
            if (posZ < 3) posZ++; else posZ = 0;
         else
            if (posZ > 0) posZ--; else posZ = 3;

         operation = 1;
         stepZ = 0;
      }

      if (operation == 1)
      {
         DDRD = (Xcount[posX]) | (Ycount[posY] << 4);
         DDRC = Zcount[posZ];
         operation = 0;
         _delay_ms(20); //тут можно откалибровать под двигатель
      }

      else
      {
         DDRD = (Xcount[4]) | (Ycount[4] << 4);
         DDRC = Zcount[4];
      }

   }

}
Так вы просто по нажатию кнопки делаете шаг? И считаете его?

Re: Подскажите по элетронике

Добавлено: 26 сен 2012, 15:58
shurikss123
Bender писал(а):Тяжко читать ваш исходник...((
А мне наоборот удобней и ясней.
Bender писал(а):Оч. много лишних "{ }"
Бросается в глаза. да.
Bender писал(а):Так вы просто по нажатию кнопки делаете шаг? И считаете его?
Почему кнопки? я не считаю, шаги он их делает в зависимости от направления и сигнала степ.

Re: Подскажите по элетронике

Добавлено: 30 сен 2012, 09:02
wldev
shurikss123 писал(а):Почему кнопки? я не считаю, шаги он их делает в зависимости от направления и сигнала степ.
Это оч. просто...
Сделайте разгон и торможение + переходы с торможения на разгон.

Re: Подскажите по элетронике

Добавлено: 30 сен 2012, 13:05
Nick
Насколько я понял это простой контроллер для управления микродрайверами шаговых двигателей, который выдает драйверам задание в виде такой обмотке такой ток.

Кстати, продумай микрошаговый режим - с ним будет интереснее.

Re: Подскажите по элетронике

Добавлено: 30 сен 2012, 19:48
shurikss123
Ну если вы мне опишите то что вам требуется могу и сделать, 4-й день мебель в свою комнату собираю по этому немного не до этого, кстати хочу сделать при запуске контроллера, чтоб он делал 10 шагов + после 5 шагов назад, чтоб соответствовала двигателя и контроллера

Re: Подскажите по элетронике

Добавлено: 30 сен 2012, 21:06
Nick
shurikss123 писал(а):чтоб он делал 10 шагов + после 5 шагов назад, чтоб соответствовала двигателя и контроллера
Чего делал?

Re: Подскажите по элетронике

Добавлено: 01 окт 2012, 19:12
shurikss123
Nick писал(а):Чего делал?
чтоб первый шаг соответствовал позиции двигателя.

Re: Подскажите по элетронике

Добавлено: 01 окт 2012, 19:30
2cme
В железе (hardware) что-то воплотилось? Прошивку (firmware) для авр отладили?

p.s.
МК целесобразно применять если реализовывать фичи, или в какойто степени рагрузить комп, а также если подключать к USB. Иначе овчинка выделки не стоить.

Re: Подскажите по элетронике

Добавлено: 01 окт 2012, 19:32
Nick
shurikss123 писал(а):чтоб первый шаг соответствовал позиции двигателя.
А это имхо не так важно, все равно, при любом перемещении произойдет тоже самое.

Re: Подскажите по элетронике

Добавлено: 01 окт 2012, 19:57
shurikss123
2cme писал(а):В железе (hardware) что-то воплотилось? Прошивку (firmware) для авр отладили?.
не до конца нет нормального кабеля(LPT), так что тока один двигатель тестил, вроде работает как надо,будем тестить в конце недели.

Re: Подскажите по элетронике

Добавлено: 09 окт 2012, 21:17
2cme
shurikss123 писал(а):будем тестить в конце недели.
???

Re: Подскажите по элетронике

Добавлено: 09 окт 2012, 21:27
Rafiq
Тоже интересует этот вопрос. Оно конечно можно на AVR реализовать шаг и полушаг, даже аппноты есть на Атмеле, но подойдет ли это для станка? Обязательно ли для станка микрошаг? Не будет ли заметной "лесенки" на диагональных линиях в режиме шага и полушага? Ведь даже дешевые драйверы на TB6560 юзают микрошаг.

Да и дешевле наверное взять упомянутую TB6560 (всего ~$3 на Ибэе, урвал сейчас на аукционе одну за $2.26, сильно удивился, почему не могу взять три, ведь в Buy It Now можно указать количество, а когда аукцион выигрываешь, почему то нет), ведь для МК придется либо городить мосты на дискретных транзисторах, либо подвешивать к нему специализированную микросхему.

Да, еще момент, shurikss123, перед тем как цеплять к компу, комп должен быть опторазвязан от станка быстрыми оптронами, например 6N137. Иначе будут помехи, и даже могут возникнуть зрелищные пиротехнические эффекты.

Re: Подскажите по элетронике

Добавлено: 09 окт 2012, 22:06
Nick
Rafiq писал(а):Не будет ли заметной "лесенки"
Лесенки не будет, насколько я понимаю микрошаг в основном делают для более плавной работы двигателей.

Re: Подскажите по элетронике

Добавлено: 09 окт 2012, 22:11
2cme
Nick писал(а):Лесенки не будет, насколько я понимаю микрошаг в основном делают для более плавной работы двигателей.
Если я не ошибаюсь: Микрошаг делают для того чтобы получить большую разрешающую способность, избавится от резонанса и т.д.
Недостаток микрошага: уменьшается крутящий момент.

Re: Подскажите по элетронике

Добавлено: 09 окт 2012, 22:25
Serg
Микрошаг не увеличивает разрешающую способность т.к. не гарантируется, что например в режиме полушага ротор можно спозиционировать точно посередине между полными шагами. И чем мельче микрошаг (больше цифра) тем больше будут отклонения от теоретического положения.
Но за счёт микрошага апроксимация получается более плавная.