Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить

STSPIN220 не выдает шаги

Вт май 03, 2022 15:57:52

Есть такая вот схема:
Изображение
Набросал тестовый код для атини
Спойлер
Код:
const int EN = 0, STEP = 1, DIR = 2, LED = 3, ACT = 4;
const int SPEED = 1;

void setup() {
  // put your setup code here, to run once:
  pinMode(EN, OUTPUT);
  pinMode(STEP, OUTPUT);
  pinMode(DIR, OUTPUT);
  pinMode(LED, OUTPUT);

  digitalWrite(DIR, HIGH);
  digitalWrite(STEP, LOW);
  delay(100);
  digitalWrite(EN, HIGH);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(STEP, HIGH);
  delay(SPEED);
  digitalWrite(STEP, LOW);
  delay(SPEED);
}
Сначала идет инициализация дробления шага, дальше подаю на EN единицу и выдаю шаги. Но какая-то магия не происходит и шаговик даже не напрягается. Шаговик вот такой
Осциллографом ничего не увидел на выходе драйвера

Датащит stspin220

Re: STSPIN220 не выдает шаги

Пт июн 03, 2022 18:34:07

Есть успехи? Есть такой драйвер, могу попробовать включить.
Инициализация, если не ошибаюсь по стендбаю идет, а не по EN.
Последний раз редактировалось Sanchogus Пт июн 03, 2022 18:36:17, всего редактировалось 1 раз.

Re: STSPIN220 не выдает шаги

Пт июн 03, 2022 18:35:34

Sanchogus, нет успехов :dont_know:
У вас на отладочной плате?

Re: STSPIN220 не выдает шаги

Пт июн 03, 2022 18:36:55

У меня на макетке из известных субстанций. :) М.б. после ужина заведу.

Сначала набросал включение EN, затем STBY и никакой реакции от драйвера.
Поменял местами: сначала STBY, затем EN, через задержку и всё заработало.
Без передергивания STBY переинициализация невозможна.
Без дрыгания EN тоже не работает. Похоже надо дрыгать оба и в нужном порядке. :?

И да, шунты 4,3 Ом перебор. Там входное Vsns +-1 В по даташиту.
Хотя бы до 1 Ома сбросить, ИМХО.

Спойлервот таким говнокодом запустил на STM32 (HAL)
Код:
  /* USER CODE BEGIN 2 */
  /*всё выключено*/
  HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(STBY_GPIO_Port, STBY_Pin, GPIO_PIN_RESET);
  /*инициализации на fullstep*/
  HAL_GPIO_WritePin(M1_GPIO_Port, M1_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(M2_GPIO_Port, M2_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(M3_GPIO_Port, M3_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(M4_GPIO_Port, M4_Pin, GPIO_PIN_RESET);

  HAL_Delay(1);
  HAL_GPIO_WritePin(STBY_GPIO_Port, STBY_Pin, GPIO_PIN_SET);
  HAL_Delay(1);
  HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET);
  HAL_Delay(1);
  HAL_TIM_Base_Start(&htim1);   //запуск таймера
  HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //разрешение ШИМ на M3

  HAL_Delay(10000);
  /*всё выключаем*/
  HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(STBY_GPIO_Port, STBY_Pin, GPIO_PIN_RESET);
  HAL_Delay(1);
  TIM1->CCR1 = 0;   //M3 в ноль (через коэф. заполнения ШИМ = 0 )

  /*инициализации на 1/32 */
  HAL_GPIO_WritePin(M1_GPIO_Port, M1_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(M2_GPIO_Port, M2_Pin, GPIO_PIN_SET);
  TIM1->CCR1 = 0;   //M3 в ноль (через коэф. заполнения ШИМ = 0 )
  HAL_GPIO_WritePin(M4_GPIO_Port, M4_Pin, GPIO_PIN_RESET);

  HAL_Delay(1);
  HAL_GPIO_WritePin(STBY_GPIO_Port, STBY_Pin, GPIO_PIN_SET);
  HAL_Delay(1);
  HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET);
  HAL_Delay(1);
  TIM1->CCR1 = 500;   //ШИМ с коэф. заполнения 50%


  HAL_Delay(10000);
  /*всё выключаем*/
  HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_RESET);
  HAL_GPIO_WritePin(STBY_GPIO_Port, STBY_Pin, GPIO_PIN_RESET);
  HAL_Delay(1);
  TIM1->CCR1 = 0;   //M3 в ноль (через коэф. заполнения ШИМ = 0 )

  /*инициализации на 1/32 */
  HAL_GPIO_WritePin(M1_GPIO_Port, M1_Pin, GPIO_PIN_SET);
  HAL_GPIO_WritePin(M2_GPIO_Port, M2_Pin, GPIO_PIN_RESET);
  TIM1->CCR1 = 0;   //M3 в ноль (через коэф. заполнения ШИМ = 0 )
  HAL_GPIO_WritePin(M4_GPIO_Port, M4_Pin, GPIO_PIN_RESET);

  HAL_Delay(1);
  HAL_GPIO_WritePin(STBY_GPIO_Port, STBY_Pin, GPIO_PIN_SET);
  HAL_Delay(1);
  HAL_GPIO_WritePin(EN_GPIO_Port, EN_Pin, GPIO_PIN_SET);
  HAL_Delay(1);
  TIM1->CCR1 = 500;   //ШИМ с коэф. заполнения 50%

Re: STSPIN220 не выдает шаги

Сб июн 04, 2022 18:19:55

И да, шунты 4,3 Ом перебор. Там входное Vsns +-1 В по даташиту.
Хотя бы до 1 Ома сбросить, ИМХО.

У меня ток на мотор всего 50мА, если возьму резисторы меньше, то просто не смогу подобрать резисторы в делитель. Если я правильно всё посчитал.

Попробую запустить свой как до дома доберусь

Добавлено after 8 hours 20 minutes 26 seconds:
Может я делаю что-то не так, код поправил, перемычку на пин reset кинул, но ничего не движется. Даже нагрев не наблюдаю
Шаговик вот такой
Спойлерconst int EN = 0, STEP = 1, DIR = 2, RESET = 3, ACT = 4;
const int SPEED = 100;

void setup() {
pinMode(STEP, OUTPUT);
pinMode(DIR, OUTPUT);
pinMode(RESET, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(RESET, LOW);
digitalWrite(EN, LOW);

// set step
digitalWrite(DIR, HIGH);
digitalWrite(STEP, LOW);

delay(10);
digitalWrite(RESET, HIGH);
delay(1);
digitalWrite(EN, HIGH);

delay(100);
}

void loop() {
// put your main code here, to run repeatedly:
digitalWrite(STEP, HIGH);
delayMicroseconds(SPEED);
digitalWrite(STEP, LOW);
delayMicroseconds(SPEED);
}

Re: STSPIN220 не выдает шаги

Вс июн 05, 2022 16:46:49

Всё таки добил шаговик, был не пропай в одном месте
Ответить