Задать вопрос
@kahi4

Почему АЦП возвращает синусоиду?

Очень странное поведение АЦП. Задача -- считывать показания нескольких потенциометров и пересылать их в другую плату (FPGA). Начал с повторения примера www.arduino.cc/en/Tutorial/AnalogInOutSerial
Однако возникли сложности -- диод все время мигает с частотой примерно 3Гц, ровно как и на последовательный порт приходят значения, изменяющиеся от нуля до 1023 и обратно

Показания консоли COM-порта

sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 52. output = 12
sensor = 51. output = 12
sensor = 99. output = 24
sensor = 193. output = 48
sensor = 322. output = 80
sensor = 467. output = 116
sensor = 576. output = 143
sensor = 684. output = 170
sensor = 814. output = 202
sensor = 916. output = 228
sensor = 1023. output = 255
sensor = 1023. output = 255
sensor = 1023. output = 255
sensor = 1023. output = 255
sensor = 929. output = 231
sensor = 778. output = 193
sensor = 603. output = 150
sensor = 295. output = 73
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0
sensor = 0. output = 0


Замечу, что потенциометр при этом не вращаю.
Попробовал повторить эксперимент с другими портами -- одно и то же. Решил подключить порт к земле -- к моему удивлению картина повторилась. Подключение к питанию через 220Ом резистор дал такой же результат.
Однако, если на вход АЦП ничего не подключать -- выводится какой-то шум (примерно sensor = 300 ± 100). Подскажите, в чем может быть проблема, пока я не начал изгонять демонов из платы.

P.S. Года два назад ровно этот же пример работал как и ожидается, т.е. корректно.

Схема
3a359f396944454ab30e622c680973e1.png
В железе
33e2d08c34d8421cad675f4408a019c2.jpg
Код
const int analogInPin = A4;  // Analog input pin that the potentiometer is attached to
const int analogOutPin = 9; // Analog output pin that the LED is attached to

int sensorValue = 0;        // value read from the pot
int outputValue = 0;        // value output to the PWM (analog out)

int a2 = 0;
int a3 = 0;
int a4 = 0;
int a5 = 0;

void setup() {
  // initialize serial communications at 9600 bps:
  Serial.begin(9600);
}

void loop() {

  // read the analog in value:
  sensorValue = analogRead(A1);
  a2 = analogRead(A2);
  a3 = analogRead(A3);
  a4 = analogRead(A4);
  a5 = analogRead(A5);

  outputValue = map(sensorValue, 0, 1023, 0, 255);
  analogWrite(analogOutPin, outputValue);

  // print the results to the serial monitor:
  Serial.print("a2 = " );
  Serial.print(a2);
  Serial.print("\t a3 = ");
  Serial.print(a3);
  Serial.print("\t a4 = ");
  Serial.print(a4);
  Serial.print("\t a5 = ");
  Serial.println(a5);

  delay(100);
}

Выход консоли (табы съехали)
a2 = 160.  a3 = 0. a4 = 0. a5 = 0
a2 = 92.    a3 = 0. a4 = 0. a5 = 0
a2 = 64.    a3 = 0. a4 = 0. a5 = 0
a2 = 55.    a3 = 0. a4 = 0. a5 = 0
a2 = 90.     a3 = 75. a4 = 90. a5 = 99
a2 = 207.   a3 = 340. a4 = 381. a5 = 425
a2 = 550. a3 = 934. a4 = 983. a5 = 1023
a2 = 766. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 877. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 928. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 919. a3 = 953. a4 = 935. a5 = 920
a2 = 797. a3 = 696. a4 = 665. a5 = 631
a2 = 490. a3 = 179. a4 = 132. a5 = 85
a2 = 247. a3 = 6. a4 = 0. a5 = 0
a2 = 135. a3 = 0. a4 = 0. a5 = 0
a2 = 84. a3 = 0. a4 = 0. a5 = 0
a2 = 63. a3 = 0. a4 = 0. a5 = 0
a2 = 59. a3 = 0. a4 = 9. a5 = 25
a2 = 114. a3 = 129. a4 = 143. a5 = 158
a2 = 306. a3 = 519. a4 = 564. a5 = 610
a2 = 664. a3 = 1001. a4 = 1023. a5 = 1023
a2 = 823. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 904. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 936. a3 = 1023. a4 = 1023. a5 = 1023
a2 = 884. a3 = 874. a4 = 854. a5 = 834
a2 = 727. a3 = 560. a4 = 539. a5 = 498
a2 = 406. a3 = 74. a4 = 33. a5 = 0
a2 = 212. a3 = 0. a4 = 0. a5 = 0
a2 = 120. a3 = 0. a4 = 0. a5 = 0
a2 = 79. a3 = 0. a4 = 0. a5 = 0
a2 = 68. a3 = 0. a4 = 0. a5 = 0

  • Вопрос задан
  • 449 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
По
analoginoutseria1_bb.png

На одну точку два аналоговых входа (А0 и А1, хотя для проверки можно и все их на одну точку воткнуть для замера, туда, где у потенциометра синий провод подрисован) и смотреть, что они читают. Если один скачет, пока остальные спокойны - то неадекватным аналоговым входом лучше не пользоваться.

В идеале должны все показать одинаковое значение.
Ответ написан
Neuroware
@Neuroware
Программист в свободное от работы время
нужна схема подключения
про шум на ацп это обычные наводки, это нормально если нет подтяжки
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы