Программа по измерению тока
- Войдите на сайт для отправки комментариев
Ср, 28/05/2014 - 20:50
Доброго времени суток.
Суть моего вопроса в следующем:
у меня собрана схема управления движком постоянного тока. с ШИМ ноги управляю транзисторами тем самым регулируя скорость. Так же предусмотрен контур измерения тока в цепи двигателя. Задача по броску тока ( каковые возникают при закороченном роторе) производить отключение движка, то есть прекратить подавать ШИМ сигнал.
Как я понимаю мне нужно постоянно сравнивать текущее значение тока с значением тока в предыдущий момент времени. Не совсем понимаю как это програмно реализовать. Помогите плз. (желательно куском кода для данной задачи)
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);
}
}
}
Суть моего вопроса в следующем:
у меня собрана схема управления движком постоянного тока. с ШИМ ноги управляю транзисторами тем самым регулируя скорость. Так же предусмотрен контур измерения тока в цепи двигателя. Задача по броску тока ( каковые возникают при закороченном роторе) производить отключение движка, то есть прекратить подавать ШИМ сигнал.
Как я понимаю мне нужно постоянно сравнивать текущее значение тока с значением тока в предыдущий момент времени. Не совсем понимаю как это програмно реализовать. Помогите плз. (желательно куском кода для данной задачи)
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);
}
}
}