вторник, 25 октября 2016 г.

Программирование драйвера бесколлекторного двигателя H-KING при помощи Arduino.

Программа рпедназначена для программирования и проверки драйверов бесколлекторных двигателей H-KING 10 A. Должна работать с H-KING 20 A, 30 A, 50 A.

Инструкция: компилируем, прошиваем в ардуинку, открываем терминал на 9600 бод, внимательно читаем дальнейшие инструкции в терминале.


#include <Servo.h>
Servo ESC_module;

//AS-IS.

//H-KING ESC Programmer and tester. Arduino-based.
//Works with H-KING 10A ESC (maybe 20A, 35A, 50A)

//Tested on Diecimila and Arduino 1.0.6 IDE
//Will works on Arduino UNO, Arduino Nano, Arduino Mega.



void setup()
{
  ESC_module.attach(9);
  ESC_module.write(0);
  Serial.begin(9600);
  Serial.println("Init...");
  delay(500);

  Serial.println("Do you want to configure ESC? Send 1 - yes  or 2 - no, test only");
  while(1)
  {
    while (!Serial.available());
    int val=Serial.parseInt();
    if((val!=1) && (val!=2))
    {
      Serial.print(val,DEC);
      Serial.println(" - wrong value, try again");
      continue;
    }
    if(val == 1)
    {
      Serial.println("Starting ESC configuration sequence...");
      Serial.println();
      break;
    }
    else
    {
      Serial.println("Connect ESC control pin to arduino pin 9. Connect GND.");
      Serial.println("Connect battery to ESC.");
      ESC_module.write(0);
      Serial.println("Starting ESC test mode. You can enter values from 0 to 180 to test ESC.");
      return;
    }
  } //setting Q1

  Serial.println("Connect ESC control pin to arduino pin 9. Connect GND.");
  Serial.println("Disconnect battery from ESC. Then send any char to terminal.");
  Serial.println();
  while (!Serial.available());
  Serial.read();

  Serial.println("Now connect battery to ESC and send any char.");
  ESC_module.write(180);
  while (!Serial.available());
  Serial.read();
  Serial.println("...loading...");
  Serial.println();

  delay(3500);
  ESC_module.write(90);  //first mid pos
  delay(2000);
  ESC_module.write(180);  //high pos
  delay(2000);
  ESC_module.write(90);  //second mid pos
  Serial.println("Now ESC in programming mode (4 rings)...");
  Serial.println();
  delay(2000);
  Serial.println("Now ESC makes single beep that repeats: Q1");
  Serial.println("Setting battery type - send char: 1 for Li-Po (default) or 2 for NiCad-NiMh");
  while(1)
  {
    while (!Serial.available());
    int val=Serial.parseInt();
    if((val!=1) && (val!=2))
    {
      Serial.print(val,DEC);
      Serial.println(" - wrong value, try again");
      continue;
    }
    if(val == 1)
    {
      ESC_module.write(180);  //high pos
      Serial.println("Battery type 1 selected - LiPo");
      Serial.println();
      break;
    }
    else
    {
      ESC_module.write(5);  //low pos
      Serial.println("Battery type 2 selected - NiCad-MiMh");
      Serial.println();
      break;
    }
  } //setting Q1
  Serial.println("If you hear rapid beeps - battery setting successfully set.");
  delay(2000);

  ESC_module.write(90);  //mid pos
  Serial.println("Now ESC makes two repeating beeps: Q2");
  Serial.println("Setting brake - send char: 1 - ON or 2 - OFF (default)");
  while(1)
  {
    while (!Serial.available());
    int val=Serial.parseInt();
    if((val!=1) && (val!=2))
    {
      Serial.print(val,DEC);
      Serial.println(" - wrong value, try again");
      continue;
    }
    if(val == 1)
    {
      ESC_module.write(180);  //high pos
      Serial.println("Brake mode ON");
      Serial.println();
      break;
    }
    else
    {
      ESC_module.write(5);  //low pos
      Serial.println("Break mode OFF");
      Serial.println();
      break;
    }
  } //setting Q2
  Serial.println("If you hear rapid beeps - break setting successfully set.");
  delay(2000);

  ESC_module.write(90);  //mid pos
  Serial.println("Now ESC makes three repeating beeps: Q3");
  Serial.println("Rotation direction - send char: 1 - default (default) or 2 - reversed");
  while(1)
  {
    while (!Serial.available());
    int val=Serial.parseInt();
    if((val!=1) && (val!=2))
    {
      Serial.print(val,DEC);
      Serial.println(" - wrong value, try again");
      continue;
    }
    if(val == 1)
    {
      ESC_module.write(180);  //high pos
      Serial.println("Drirection - default");
      Serial.println();
      break;
    }
    else
    {
      ESC_module.write(5);  //low pos
      Serial.println("Drirection - reversed");
      Serial.println();
      break;
    }
  } //setting Q3
  delay(2000);
  Serial.println("Programming completed. ESC now may be armed.");
  ESC_module.write(90);
  delay(1000);
  Serial.println();
  Serial.println("Disconnect and connect battery.");
  Serial.println();
  ESC_module.write(0);
  delay(5000);
  Serial.println("Starting ESC test mode.");
  Serial.println("You can enter values from 0 to 180 to test ESC.");
}

void loop()
{
  int val;
  delay(100);
  if(Serial.available())
  {
    val=Serial.parseInt();
    if ((val<0) || (val>180))
    {
      Serial.print(val,DEC);
      Serial.println(" - wrong value, try again");
    }
    else
    {
      Serial.print(val,DEC);
      Serial.println(" - OK");
      ESC_module.write(val);
    }
  }
}


Комментариев нет:

Отправить комментарий