Программа по измерению тока

Нет ответов
Cumkin
Offline
Зарегистрирован: 28.05.2014
Доброго времени суток.

Суть моего вопроса в следующем:

у меня собрана схема управления движком постоянного тока. с ШИМ ноги управляю транзисторами тем самым регулируя скорость. Так же предусмотрен контур измерения тока в цепи двигателя. Задача по броску тока ( каковые возникают при закороченном роторе) производить отключение движка, то есть прекратить подавать ШИМ сигнал. 

Как я понимаю мне нужно постоянно сравнивать текущее значение тока с значением тока в предыдущий момент времени. Не совсем понимаю как это програмно реализовать. Помогите плз. (желательно куском кода для данной задачи)



P.S. вот мой код:



int val = 0; //переменная в которую считывается потенциометр.

int motor = 9; // шим подключён к выводу 9D

int dir = 8; //dir порт подключен к выводу 8D

int potPin = 2; //потенциометр подкл. к выводу 2А

const int buttonPin = 2; //кнопка подкл. к выводу 2D 

int cur = 4; //контур измерения тока подкл. к 4A

int run = 1; //переменная для счета нажатий кнопки 

int mode = 0; //переменная для проверки количества нажатий

int signal = 0; //переменная для проверки состояния кнопки

double current =0; //переменная для считывания тока

long previousMillis =0; //предыдущее состояние счетчика

long interval1 = 250; //задержка между снятием показаний 

int maxx = 255;

int v;



void setup() {

Serial.begin(9600);

//порт 8 инициализирован на выход

pinMode(dir, OUTPUT); 



// порт 2 инициализирован на ввод

pinMode(buttonPin, INPUT); 



}



void loop(){

//переменая в которой ведется отсчет времени от момента 

//включения

unsigned long currentMillis = millis();



// считываем значение с кнопки

signal = digitalRead(buttonPin);

//считывается значение с потенциометра преобразуется 

//в скважность шим и подается на PWM_CH

//деление -> analogRead 0 - 1023 analogWrite 0 - 255

val = analogRead(potPin);

val = val/4;

analogWrite (motor,val);



current = analogRead(cur);

//блок измерения тока + вывод информации на дисплей

if(currentMillis - previousMillis > interval1) {



previousMillis = currentMillis;

Serial.print("Current 4:");

Serial.print(int(current));

double volt = current*5.0/1024;

Serial.print(" : ");

Serial.print(volt);

Serial.print(" : ");

Serial.print("PWM:");

double pwm = val*5.0/256;

Serial.println(pwm);



}

//реализация кнопки -> по нажатию подача 1 на дир канал

if (signal == HIGH) {

run++;

delay(1000);

mode = run%2;

if(mode == 0)

{

digitalWrite(dir, HIGH);



else {

// turn LED off:

digitalWrite(dir, LOW); 

}

}





}