Скетч для управления bldc

MotorArdent
Offline
Зарегистрирован: 25.02.2020

Добавил ручку газа :)

//распиновка фаз
const int AH = 20;
const int AL = 15;
const int BH = 19;
const int BL = 14;
const int CH = 18;
const int CL = 16;

//датчики Холла на пинах с прерыванием
#define HALL_A 3
#define HALL_B 6
#define HALL_C 9

//переменные для хранения значений датчиков Холла
volatile boolean a;
volatile boolean b;
volatile boolean c;

//потенциометр для управления скважностью
#define PWM 10

//переменная хранения данных потенциометра
int val;

void setup() {
  
//установка режимов пинов
    pinMode(AH, OUTPUT);  
    pinMode(AL, OUTPUT);
    pinMode(BH, OUTPUT);
    pinMode(BL, OUTPUT);
    pinMode(CH, OUTPUT);
    pinMode(CL, OUTPUT);
    pinMode(PWM, INPUT);
    pinMode(HALL_A, INPUT);
    pinMode(HALL_B, INPUT);
    pinMode(HALL_C, INPUT);
    
//считывание датчиков Холла
    a = digitalRead(HALL_A);
    b = digitalRead(HALL_B);
    c = digitalRead(HALL_C);
    
//аппаратные прерывания
    attachInterrupt(digitalPinToInterrupt(HALL_A), Interrupt, CHANGE);
    attachInterrupt(digitalPinToInterrupt(HALL_B), Interrupt, CHANGE);
    attachInterrupt(digitalPinToInterrupt(HALL_C), Interrupt, CHANGE); }
    
//переключения фаз
void Phases() {
    digitalWrite(AH, (a && !b) ? HIGH : LOW); //если a==HIGH и b==LOW, записать HIGH, иначе LOW
    digitalWrite(AL, (b && !a) ? HIGH : LOW);
    digitalWrite(BH, (b && !c) ? HIGH : LOW); //A+ B- //A+ C- //B+ C- //B+ A- //C+ A- //C+ B-
    digitalWrite(BL, (c && !b) ? HIGH : LOW);
    digitalWrite(CH, (c && !a) ? HIGH : LOW);
    digitalWrite(CL, (a && !c) ? HIGH : LOW);
    val = constrain(map(analogRead(PWM), 0, 1023, 0, 255), 0, 255); //ручка газа
    delay(val); }

//работа прерываний
void Interrupt() {
    a = digitalRead(HALL_A);
    b = digitalRead(HALL_B);
    c = digitalRead(HALL_C);
    Phases(); }
    
void loop() {}

В связи с отсутствием подсказок продолжение здесь ни к чему.

P.S.: Duino A.R., wdrakula, sadman41, ua6em, nik182, - спасибо за участие по делу и без высокомерия. Это правда очень здорово.

Всем пока!

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Это для абстрактной ардуины скетч?