Помогите с шаговым двигателем

Devil40rus
Offline
Зарегистрирован: 27.03.2014

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

 // Подключаем библиотеку дисплея:
#include <LiquidCrystal.h>
  // Подключаем библиотеку шагового двигателя:
#include <Stepper.h>
  // Количество шагов мотора: 
#define STEPS 48 // Шагов на оборот
  // Подключаем математические функции:
#include "math.h" 
  // Объявляем переменные и приводим их в порядок:
float SWRpad = 0;
float SWRotr = 0;
float SWR = 0;
  // Прописываем пины индикатора:
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
  // Создает класс шагового двигателя и объявляет какими ножками:
Stepper stepper(STEPS, 8, 9, 10, 11);

void setup ()

{
analogReference(DEFAULT); // Стандартное опорное напряжение 5 В

lcd.begin(16, 2); // Задаем размерность экрана, 2 строки по 16 символов

  // Установление скорости оборотов двигателя в оборотах в минуту (RPM)
stepper.setSpeed(30);
}

void loop ()

{
  // Считываем в порт значение частоты:
SWRpad = analogRead(A2);  // Читаем со второй ноги аналогово входа напряжение падающей волны
SWRotr = analogRead(A1);  // Читаем с первой ноги аналогово входа напряжение отраженной волны
  // Расчет и вывод КСВ:
SWR = (SWRpad + SWRotr)/(SWRpad - SWRotr);
// определяем номер шага и значение SWR - сравниваем с тем что запомнили вначале,
// если новое значение лучше, то запомнинаем новое и номер шага
// после полного оборота выбираем лучшее

lcd.setCursor(0, 0);
lcd.print(" SWR ");
if (SWR>1) {
lcd.setCursor(4, 0);
lcd.print(">1");} 

else if (SWR > 3) {
  // Один полный круг вперед круг=шаг?
stepper.step(1*STEPS);
delay(1000); // задержка определяется временем на шаг двигателя
  // Один полный круг назад
stepper.step(-1*STEPS);
delay(1000);

lcd.setCursor(4, 0);
lcd.print(SWR);
}
  // Задержка и очистка экрана:
delay (100);
lcd.clear(); 
}

 

 

SONIC300077
Offline
Зарегистрирован: 15.10.2013

Думаю что вот так !

 // Подключаем библиотеку дисплея:
#include <LiquidCrystal.h>
  // Подключаем библиотеку шагового двигателя:
#include <Stepper.h>
  // Количество шагов мотора: 
#define STEPS 48 // Шагов на оборот
  // Подключаем математические функции:
#include "math.h" 
  // Объявляем переменные и приводим их в порядок:
float SWRpad = 0;
float SWRotr = 0;
float SWR = 0;
  // Прописываем пины индикатора:
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
  // Создает класс шагового двигателя и объявляет какими ножками:
Stepper stepper(STEPS, 8, 9, 10, 11);
//Второй Мотор
Stepper stepper2(STEPS, 2, 3, 4, 5);

void setup ()

{
analogReference(DEFAULT); // Стандартное опорное напряжение 5 В

lcd.begin(16, 2); // Задаем размерность экрана, 2 строки по 16 символов

  // Установление скорости оборотов двигателя в оборотах в минуту (RPM)
stepper.setSpeed(30);
stepper2.setSpeed(30);
}

void loop ()

{
  // Считываем в порт значение частоты:
SWRpad = analogRead(A2);  // Читаем со второй ноги аналогово входа напряжение падающей волны
SWRotr = analogRead(A1);  // Читаем с первой ноги аналогово входа напряжение отраженной волны
  // Расчет и вывод КСВ:
SWR = (SWRpad + SWRotr)/(SWRpad - SWRotr);
// определяем номер шага и значение SWR - сравниваем с тем что запомнили вначале,
// если новое значение лучше, то запомнинаем новое и номер шага
// после полного оборота выбираем лучшее

lcd.setCursor(0, 0);
lcd.print(" SWR ");
if (SWR>1) {
lcd.setCursor(4, 0);
lcd.print(">1");} 

else if (SWR > 3) {
  // Один полный круг вперед круг=шаг?
stepper.step(1*STEPS);
stepper2.step(1*STEPS);
delay(1000); // задержка определяется временем на шаг двигателя
  // Один полный круг назад
stepper.step(-1*STEPS);
stepper2.step(-1*STEPS);
delay(1000);

lcd.setCursor(4, 0);
lcd.print(SWR);
}
  // Задержка и очистка экрана:
delay (100);
lcd.clear(); 
}

 

Devil40rus
Offline
Зарегистрирован: 27.03.2014

Большое спасибо. А как сделать счетчик шагового двигателя, в данной программе?

nick_shl
Offline
Зарегистрирован: 25.03.2014

Вот объясните мне, нахрена вам float, если analogRead() возвращает "integer values between 0 and 1023"???

SONIC300077
Offline
Зарегистрирован: 15.10.2013

Devil40rus пишет:

Большое спасибо. А как сделать счетчик шагового двигателя, в данной программе?

 

Что за счетчик ??