Создание синусоидальной волны с помощью ЦАП и ее обратная передача

Я хочу создать цифровую синусоидальную волну, отправить ее в DAC0, а затем получить ее обратно в качестве входных данных на A0 и построить график. Я использую Arduino Due. Я написал следующий код:

#define maxSamplesNum 120
#define Sample 50000000/maxSamplesNum  // sample for the 50Hz signal expressed in microseconds

static int Table[maxSamplesNum] =                        // lookup table  for sine wave table

  {
    0x7ff, 0x86a, 0x8d5, 0x93f, 0x9a9, 0xa11, 0xa78, 0xadd, 0xb40, 0xba1,
    0xbff, 0xc5a, 0xcb2, 0xd08, 0xd59, 0xda7, 0xdf1, 0xe36, 0xe77, 0xeb4,
    0xeec, 0xf1f, 0xf4d, 0xf77, 0xf9a, 0xfb9, 0xfd2, 0xfe5, 0xff3, 0xffc,
    0xfff, 0xffc, 0xff3, 0xfe5, 0xfd2, 0xfb9, 0xf9a, 0xf77, 0xf4d, 0xf1f,
    0xeec, 0xeb4, 0xe77, 0xe36, 0xdf1, 0xda7, 0xd59, 0xd08, 0xcb2, 0xc5a,
    0xbff, 0xba1, 0xb40, 0xadd, 0xa78, 0xa11, 0x9a9, 0x93f, 0x8d5, 0x86a,
    0x7ff, 0x794, 0x729, 0x6bf, 0x655, 0x5ed, 0x586, 0x521, 0x4be, 0x45d,
    0x3ff, 0x3a4, 0x34c, 0x2f6, 0x2a5, 0x257, 0x20d, 0x1c8, 0x187, 0x14a,
    0x112, 0xdf, 0xb1, 0x87, 0x64, 0x45, 0x2c, 0x19, 0xb, 0x2,
    0x0, 0x2, 0xb, 0x19, 0x2c, 0x45, 0x64, 0x87, 0xb1, 0xdf,
    0x112, 0x14a, 0x187, 0x1c8, 0x20d, 0x257, 0x2a5, 0x2f6, 0x34c, 0x3a4,
    0x3ff, 0x45d, 0x4be, 0x521, 0x586, 0x5ed, 0x655, 0x6bf, 0x729, 0x794
  };

int i = 0;
int sample;
int sensorPin = A0;
int sensorValue = 0;


void setup() {
  Serial.begin(9600);
  analogWriteResolution(12);  // set the analog output resolution to 12 bit (4096 levels)
  analogReadResolution(12);   // set the analog input resolution to 12 bit


}

void loop() {

  sample = 50;

  analogWrite(DAC0, Table[i]);  // write the selected waveform on DAC0


  i++;
  if(i == maxSamplesNum)  // Reset the counter to repeat the wave
    i = 0;

  delayMicroseconds(sample);  // Hold the sample value for the sample time
  sensorValue = analogRead(sensorPin);
}

Я хочу создать синусоидальную волну 3,3 В (P-P), но я не знаю, как установить амплитуду этой волны.

Также я хотел бы перенаправить вывод синусоидальной волны с DAC0 на вывод A0 и построить график, чтобы проверить, была ли сгенерированная синусоидальная волна успешной. Как построить график ?

Обновление : Я загрузил программу, но результата не было. Я попытался прочитать данные из A0, но вывода не было. Что я делаю не так?

, 👍3

Обсуждение

Вам просто нужно "Serial.print ()" считывать показания АЦП либо немедленно (что замедлит генерацию сигнала), либо после факта (буферизуйте значения, а затем распечатайте их все)., @Edgar Bonet

Возможное дублирование [Нет выходного напряжения на DAC0](https://arduinoprosto.ru/q/39325/no-voltage-output-on-dac0), @Code Gorilla


1 ответ


0

Я запустил ваш код без изменений и подключил осциллограф, чтобы посмотреть на DAC0 (выглядит нормально синусоидальной волной) и A0 (выглядит плоской линией). Надеюсь, это поможет.

A0 Screenshot DAC0 Sceenshot

,

В дополнение к предложению @Edgar есть дополнительная информация о Arduino IDE [Последовательный плоттер] [https://arduinogetstarted.com/tutorials/arduino-serial-plotter#:~:text=Serial%20Plotter%20is%20one%20of,and%20visualizes%20data%20as%20waveforms]. Что, я думаю, решает часть вашего вопроса "Как мне построить график". Тест осциллографа показывает, что ваша генерация волн работает нормально. Если вам нужна дополнительная помощь по поводу обратной связи на A0, я предлагаю вам показать свою проводку. С уважением., @RowanP