Вы находитесь на странице: 1из 9

Листинг в Ардуино для управления BLDC двигателем через микроконтроллер VESC

С авто изменяющимися оборотами двигателя

#include <buffer.h>

#include <crc.h>

#include <datatypes.h>

#include <VescUart.h>//Библиотка для работы с микроконтроллером VESC


VescUart VUART;//Создаем Класс VescUart с назвнием VUART

void setup() {

Serial.begin(9600); //Открываем 1ый порт

Serial1.begin(250000);//Открываем 2ой порт

while (!Serial1) {;}

VUART.setSerialPort(&Serial1);

String command;

String str1="Ток, А";

String str2="Обороты двигателя, об/мин";

String str3="Напряжение, В";

String str4="Ток потребления, А*ч";

int throttle = 900;//газ

float current=1.0;

int rpm;

float voltage;

float ampHours;

int del = 150;//шаг

int u = 1;//переключение 1-вверх, 0-вниз

void loop() {

if (VUART.getVescValues())//считваем данные с микроконтррллера VESC

rpm=(VUART.data.rpm);//количесвто оборотов
voltage=(VUART.data.inpVoltage);//напряжение

ampHours=(VUART.data.ampHours);//среднее значение заряда проходящего через


электродвигатель

current=(VUART.data.avgInputCurrent);//потребление тока

//Алогоритм для регулирования оборота с шагом в del от -8000erpm до 80000erpm, с задержкой


0.1сек

if(throttle<8000 && u==1)

throttle = throttle + del;

u=1;

else if(throttle < (-8000))

u=1;

else

throttle = throttle - del;

u=0;

delay(100);

VUART.setRPM(throttle);

}
Листинг в Ардуино для управления BLDC двигателем через микроконтроллер VESC

С управление оборотами(“газом” или током) через монитор порта

#include <buffer.h>

#include <crc.h>

#include <datatypes.h>

#include <VescUart.h>//Библиотка для работы с микроконтроллером VESC


VescUart VUART;//Создаем Класс VescUart с назвнием VUART

void setup() {

Serial.begin(9600); //Открываем 1ый порт

Serial1.begin(250000);//Открываем 2ой порт

while (!Serial1) {;}

VUART.setSerialPort(&Serial1);

String command;

String str1="Ток, А";

String str2="Обороты двигателя, об/мин";

String str3="Напряжение, В";

String str4="Ток потребления, А*ч";

int throttle = 900;

float current=1.0;

int rpm;

float voltage;

float ampHours;

int del = 150;

int u = 1;

void loop() {

if (VUART.getVescValues())//считваем данные с микроконтррллера VESC

rpm=(VUART.data.rpm);//количесвто оборотов
voltage=(VUART.data.inpVoltage);//напряжение

ampHours=(VUART.data.ampHours);//среднее значение заряда проходящего через


электродвигатель

current=(VUART.data.avgInputCurrent);//потребление тока

if (Serial.available()) {

command = Serial.readStringUntil('\n');//считываем данные с монитора порта для управления


двигателем или газом, илил оборотами, или током

throttle = command.toInt();//конвертируем в целочисленные значения

if ( throttle >= -2000 && throttle <= 15000) {//устанваливаем ограничения

// при выполении ограничений выпишем данные двигателя на монтор порта

Serial.println(throttle);

Serial.println(str1+" "+current);

Serial.println(str2+" " + rpm);

Serial.println(str3+" " + voltage);

Serial.println(str4+" " + ampHours);

} else {

//иначе напечаем сообщение об ошибке

throttle = 0;

Serial.println("Unvalid throttle value");

VUART.setRPM(throttle);//отправляем данные микроконтроллеру VESC через класс VUART

}
Листинг в Ардуино для управления сервоприводом для рулевого управления

Считываем данные с потенциометра и сравниваем данные монитора порта (где пользователь


указывает желаемый угол поворота)

int SENSOR_PIN = 0; // center pin of the potentiometer

int RPWM_Output = 5; // Arduino PWM output pin 5; connect to IBT-2 pin 1 (RPWM)

int LPWM_Output = 6; // Arduino PWM output pin 6; connect to IBT-2 pin 2 (LPWM)

int data = 0;// изаначлное заданное положение


int y;

void setup()

pinMode(RPWM_Output, OUTPUT);//включаем порты

pinMode(LPWM_Output, OUTPUT);

Serial.begin(9600);

void loop()

int sensorValue = analogRead(SENSOR_PIN);//считываем данные с потенциометра

int poten = sensorValue * (100.0 / 1023.0);//пересчитваем в диапазон от 0 до 100

Serial.print("Реостат");

Serial.println(poten);//печатаем

if(Serial.available() > 0)

data = Serial.parseInt(); //считываем данные с экрана, задаем положение

Serial.print("Задаем положение");

Serial.println(data);//печатаем

if (poten < data)//сравниваем значений и вращаем

// forward rotation
analogWrite(RPWM_Output, 0);

analogWrite(LPWM_Output, 50);

y = 1;

Serial.println(y);//печатаем

else if (poten == data)

analogWrite(RPWM_Output, 0);

analogWrite(LPWM_Output, 0);

y = 2;

Serial.println(y);//печатаем

if (poten > data)

analogWrite(LPWM_Output, 0);

analogWrite(RPWM_Output, 50);

y = 3;

Serial.println(y);//печатаем

Вам также может понравиться