Принципиальная схема для работы биполярного шагового двигателя с использованием LDR

Я новичок в Arduino, кое-как я собрал этот код для запуска шагового двигателя с помощью LDR (разновидность программы слежения за солнечными батареями). Я искал в сети и попытался использовать схему серводвигателя для запуска шагового двигателя, предполагая, что просто заменил серводвигатель с шаговым двигателем будет работать. Я предполагаю, что это не так (потому что серводвигатель не движется в соответствии с входными сигналами LRD). Помогите пожалуйста со схемой.

Вот код, который я использую


const int dirPin  = 5;
const int stepPin = 4;
const int enPin   = 6;
const int SensorPin1 = A0;
const int SensorPin2 = A1;
int sensorValue1 = 0;
int sensorValue2 = 0;

void setup() {

  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);

  pinMode(enPin,OUTPUT);
  digitalWrite(enPin,LOW);
  Serial.begin(9600); 

}
void loop() {
  sensorValue1 = analogRead(SensorPin1); 
  Serial.println(sensorValue1);
  sensorValue2 = analogRead(SensorPin2); 
  Serial.println(sensorValue2);

  if(sensorValue1 < 40 && sensorValue2 < 400){
    Serial.print("No sun Detected");
    digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,LOW);
  }
  else if(sensorValue1 > 400){

    digitalWrite(dirPin,HIGH);
    digitalWrite(stepPin,HIGH);

 }
else if(sensorValue2 > 400){
    digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,HIGH);
}
}

Используемое оборудование:

  • Биполярный шаговый двигатель — NEMA 23, крутящий момент 20 кг 
  • Драйвер шагового двигателя: TB6600
  • Источник питания: SMPS 12 В, 5 ампер.
  • ЛДР: 2
  • Резисторы: 2 резистора по 10 кОм.
  • 1 Arduino Uno
  • Макетная плата

Схема цепи

, 👍-1

Обсуждение

С большинством драйверов шагового двигателя шаговый двигатель будет двигаться на 1 (!) шаг, когда вы подаете 1 импульс на вход (имеется в виду переход низкий-высокий-низкий или инверсия). Ваш код будет управлять двигателем максимум на 1 шаг, скорее всего, недостаточно, чтобы его увидеть. Генерировать больше импульсов, @chrisl

Измените digitalWrite(stepPin,LOW); на digitalWrite(stepPin,LOW);delay(1);digitalWrite(stepPin,HIGH);, @Gerben

Спасибо @chrisl .. постараюсь сообщить вам ... но я все еще ищу электрическую схему, @Adwaiot Sakarde

Для принципиальной схемы: вы видели, например, [это руководство пользователя по TB6600](https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=7&cad=rja&uact=8&ved=2ahUKEwi1t7C798ThAhUSsaQKHV43CqIQFjAGegQIABAB&url =https%3A%2F%2Fwww.dfrobot.com%2Fwiki%2Findex.php%2FTB6600_Stepper_Motor_Driver_SKU%3A_DRI0043&usg=AOvVaw3StPPcyHQy8k_v1Gerphcl)? Там упоминается, как драйвер должен быть подключен к Arduino и к двигателю. Вы даже можете скачать более подробное руководство пользователя в формате pdf., @chrisl


1 ответ


1

Если это поможет, я немного изменил ваш код.

const int dirPin  = 8;
const int stepPin = 7;
const int enPin   = 13;//с контактом 13 Вы можете контролировать встроенный светодиод, если он горит, «включить» ВЫСОКИЙ уровень, и шаговый двигатель будет вращаться.
const int rightSensorPin = A0;
const int leftSensorPin = A1;
int rightSensorRead = 0;
int leftSensorRead = 0;
int rightLightPct = 0;
int leftLightPct = 0;
int degreeChange = 1;


void setup() {
  Serial.begin(9600);
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
  pinMode(enPin,OUTPUT);
  pinMode(A0, INPUT_PULLUP);//дополнительные резисторы не нужны. Просто подключите одну ногу LDR к A0, а другую к GND.
  pinMode(A1, INPUT_PULLUP);
}

void loop() {
  rightSensorRead = analogRead(rightSensorPin);
  leftSensorRead = analogRead(leftSensorPin);
  rightLightPct = map(rightSensorRead, 0, 1023, 0, 100);
  leftLightPct = map(leftSensorRead, 0, 1023, 0, 100);
  degreeChange = map(abs(rightLightPct-leftLightPct),0,100,2,10);
  Serial.print("right = ");
  Serial.print(rightSensorRead);
  Serial.print(" left = ");
  Serial.print(leftSensorRead);
  Serial.print(" Pct r/l = ");
  Serial.print(rightLightPct);
  Serial.print("/");
  Serial.println(leftLightPct);
  if(rightLightPct < 15 && leftLightPct < 15){
    Serial.println("Sun is detected");
    digitalWrite(enPin, LOW);
    digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,LOW);
    delay(5000);//если что-то мешает, программа ждет 5 сек. Если за это время ничего не произойдет, программа продолжится. Это время может стереть или добавить еще немного.
  }else if(rightLightPct > 50 && leftLightPct > 50){
    Serial.println("Sun is set!");
    digitalWrite(enPin, LOW);
    digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,LOW);
  }else if(rightLightPct > 20 && leftLightPct > 20){
    Serial.println("Seeking sun!");
    digitalWrite(enPin, HIGH);
    digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,LOW);
    delay(1);
    digitalWrite(stepPin,HIGH);
  }else if(rightLightPct > leftLightPct){
    Serial.println("Turning CW!");
    digitalWrite(enPin, HIGH);
    digitalWrite(dirPin,HIGH);
    digitalWrite(stepPin,LOW);
    delay(1);
    digitalWrite(stepPin,HIGH);
  }else{
    Serial.println("Turning CCW!");
    digitalWrite(enPin, HIGH);
    digitalWrite(dirPin,LOW);
    digitalWrite(stepPin,LOW);
    delay(1);
    digitalWrite(stepPin,HIGH);
  }
}
,