Скорость обработки аналоговых сигналов

Lango
Offline
Зарегистрирован: 06.02.2014

Здравствуйте,

Собрал девайс на базе ардуино нано, который опрашывает 2 аналоговых входа на изменение напряжения, выводит данные на монитор. 

проблема со скоростю оброботки входного напряжения, при изменения напряжения на 1в (при скорости 0,3-0,5сек) данные выводяца на монитор с солидной задержкой примерно 3 сек.

как повысить скорост оброботки?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Lango, скорость обработки, если всё правильно делать -выше скорости реакции человеческого глаза. Скетч в студию...

Lango
Offline
Зарегистрирован: 06.02.2014
iint MAFS_1_Value=0;
  int MAFS_2_Value=0;
float voltage_1 = 0;
  float voltage_2 =0;
float Value=0;

void setup() {
Serial.begin(9600);
}
void loop() {
  MAFS_1_Value = analogRead(A0);
    MAFS_2_Value = analogRead(A1);
  voltage_1 = MAFS_1_Value * (5.0 / 1023.0);
    voltage_2 = MAFS_2_Value * (5.0 / 1023.0);
  Value=(voltage_1+voltage_2)/2;
  
  analogWrite(9,Value);
   Serial.println(Value);
   
 MAFS_1_Value=0;
  MAFS_2_Value=0;
voltage_1 = 0;
  voltage_2 =0;
Value=0;
 }

 

к входу А0 подходит 3в, а к А1 - 2в, на екране седнее значение - 2.5, есле резко изменить А0 или А1 допустим на 1в - среднее значение изменяется постепенно примерно в течении 2-3сек.
 
нужно примерно 3000-4000 раз в сек. опрашивать вводы 0 и 1 а среднее значение выводить на вывде 9...
Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

паузу хоть поставьте в конце хоть на 0.25с

Lango
Offline
Зарегистрирован: 06.02.2014

Michal пишет:

паузу хоть поставьте в конце хоть на 0.25с

да но ме максимальная скорость нужна

Клапауций
Offline
Зарегистрирован: 10.02.2013
analogWrite(9,Value/4); //analogWrite должно быть в диапозоне от 0 до 255
Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

Lango пишет:

Michal пишет:

паузу хоть поставьте в конце хоть на 0.25с

да но ме максимальная скорость нужна

если вам нужна максимальная скорость, то уберите вывод на ком порт. На 9600 бод вывод одного символа на порядок больше по времени, чем одно преобразование на макс. скорости(а у вас float выводится). Или реализуйте преобразование через прерывания, а вывод на порт оставьте в основном теле программы.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Lango, в конце скетча не понятно зачем вы всё обнуляете.  По сути: в скетче кроме лёгкой неоптимальности никакого криминала, ничего не должно существенно тормозить. У меня есть очень смелая гипотеза -а точно у вас соответствуют пины A1 A0 подключенным фактически?  Если например включено на A5 и A4, а в скетче А0 и А1 то можно словить похожую ситуацию, непритянутые к общему или питанию входы ловят то, что приходит на соседние пины. так-же нужно точно удостовериться, что сам по себе входящий сигнал не тормозит. Паралельно входу включите вольтметр, и при изменении напряжения не будет ли оно так-же плавно нарастать? Если ничего не перепутано, то нужно разбирать пошагово. Сначала выводите чистые значения analogRead. .

Lango
Offline
Зарегистрирован: 06.02.2014

Michal, dimax Спасибо за советы, я тоже подозревал - вывод на ком порт. Dimax да обнуление в конце не требуется, добавил во время поисков причины задержки.

 

В процессе мне нужно мониторить все пины отдельно, с интервалом обновления 1-2 раза в сек.

 

А как выводить данные не мешая процессу вычисления, вернее - не влияя на основной процесс?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Lango, вывод в ком-порт не может так мешать, что-бы по 2-3 секунды задержки были. У людей по 6 каналов выводится через компорт, и всё без тормозов работает.

Lango
Offline
Зарегистрирован: 06.02.2014

Понял, судя по всему саму схему грамотнее нужно собрать ... переделаю схему, там датчики не на прямую подключены к аналоговым выводам и по идее ети самые датчики нужно запитать с стабилизаторов (типа LM7805 …) от отдельного БП а не напрямую из ардуины.

Спасибо…

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Я уже давно только   Serial.begin(115200)   юзаю....

Lango
Offline
Зарегистрирован: 06.02.2014

Все заработало как надо, удалил Serial.begin и Serial.println, вывел отдельное питание для датчиков и адаптера... 

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

Спасибо…

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

попробуйте код из этого поста. измерение и расчет занимает всего 128мкс для одного канала. данные о времени приходят в порт что глаз не успевает, так что что то странное у вас

http://arduino.ru/forum/obshchii/vremya-na-ispolnenie-raznykh-funktsii#c...