Друзья Всем привет!
Нужна помощь в написании фильтра для аналогового сигнала.
Программа управляет работой гидравлики и от шумов на аналоговом пине А0 происходят рывки при небольшом угле отклонения управляющего рычага.
Я трижды прочитал статью на этом сайте о фильтрации. Но моих навыков не хватает на адаптацию примеров указанных в статье для моей программы.
Программу писал сам (в первый раз) не кидайтесь тапками...
Помогите написать медианный фильтр для analogValue, пожалуйста. Или скиньте программу с примером использования такого фильтра.
// These constants won't change:
const int analogPin = A0; // Вход с датчика положения рукоятки
const int OutA = 10; // Выход на твердотельное реле
const int OutB = 11; // Выход на твердотельное реле
const int LimA = 462; // начало срабатывания клапана на движение влево
const int LimB = 562; // начало срабатывания клапана на движение вправо
const byte averageFactor = 5;
int sensorValue = 0;
void setup() {
pinMode(OutA, OUTPUT);
pinMode(OutB, OUTPUT);
// initialize serial communications:
Serial.begin(9600);
}
void loop() {
if (analogValue > LimB) { //если напряжение больше лимита
int val = analogRead(0);
val = map(val, 562, 1023, 0, 30); //подается шим пропорционально отклонению, поворот вправо
analogWrite(OutA, val);
Serial.println(val);
} else if (analogValue < LimA) { //если напряжение меньше лимита
int val = analogRead(0);
val = map(val, 0, 462, 40, 0);
analogWrite(OutB, val); //подается шим пропорционально отклонению, поворот вправо
Serial.println(val);
} else {
analogWrite(OutA, 0); // в нейтральном положении не подавать ШИМ
analogWrite(OutB, 0);
// print the analog value:
Serial.println(analogValue);
delay(50);
}
}
Нужна помощь в написании фильтра для аналогового сигнала.
Программа управляет работой гидравлики и от шумов на аналоговом пине А0 происходят рывки при небольшом угле отклонения управляющего рычага.
Я трижды прочитал статью на этом сайте о фильтрации. Но моих навыков не хватает на адаптацию примеров указанных в статье для моей программы.
Программу писал сам (в первый раз) не кидайтесь тапками...
Помогите написать медианный фильтр для analogValue, пожалуйста. Или скиньте программу с примером использования такого фильтра.
// These constants won't change:
const int analogPin = A0; // Вход с датчика положения рукоятки
const int OutA = 10; // Выход на твердотельное реле
const int OutB = 11; // Выход на твердотельное реле
const int LimA = 462; // начало срабатывания клапана на движение влево
const int LimB = 562; // начало срабатывания клапана на движение вправо
const byte averageFactor = 5;
int sensorValue = 0;
void setup() {
pinMode(OutA, OUTPUT);
pinMode(OutB, OUTPUT);
// initialize serial communications:
Serial.begin(9600);
}
void loop() {
if (analogValue > LimB) { //если напряжение больше лимита
int val = analogRead(0);
val = map(val, 562, 1023, 0, 30); //подается шим пропорционально отклонению, поворот вправо
analogWrite(OutA, val);
Serial.println(val);
} else if (analogValue < LimA) { //если напряжение меньше лимита
int val = analogRead(0);
val = map(val, 0, 462, 40, 0);
analogWrite(OutB, val); //подается шим пропорционально отклонению, поворот вправо
Serial.println(val);
} else {
analogWrite(OutA, 0); // в нейтральном положении не подавать ШИМ
analogWrite(OutB, 0);
// print the analog value:
Serial.println(analogValue);
delay(50);
}
}
Вложения
-
2.2 KB Просмотры: 1