Генератор сигналів на SigmaDSP, Генератор синуса, меандру, пили і трикутника

Те, що у вас вже є, ви можете видалити в кошику.

При проведенні випробувань, досліджень та в тестуванні роботи радіоелектронних схем працюють в акустиці необхідні джерела сигналів низької частоти найрізноманітніших частот і форм. За допомогою модуля RDC2-0027 і будь-якого контролера Arduino можна легко побудувати генератор сигналів низької частоти дуже високої якості. Наприклад, синусоїдальний сигнал буде спотворений всього на 0,007% у всьому діапазоні звукових частот.
Давайте побудуємо генератор відразу чотирьох сигналів: синус, меандр, трикутник і пила.
Для побудови генератора зберемо схему.

У схемі використовуються: RDC2-0027 v1 або v2 - модуль цифрової обробки звуку на SigmaDSP ADAU1701, Мелісса - клон Arduino Mini, чотири семисегментних світлодіодних дисплея RDC1-LD , Чотири потенціометра на 10кОм і чотири кнопки.
RDC2-0027 - буде джерелом НЧ, Ардуіно управляє частотою сигналів, включає / вимикає сигнали однієї з чотирьох форм в будь-якій комбінації і виводить значення частоти на дисплей. Форму сигналів вибираємо кнопками SW1-SW3, а частоту сигналу встановлюємо потенціометрами RV1-RV3.
Перед складанням схеми необхідно буде в SigmaStudio зібрати проект з чотирьох генераторів, і завантажити згенерований .hex файл в EEPROM RDC2-0027. Зробити це можна за допомогою USB програматора FLASH і EEPROM пам'яті RDC2-0026 або за допомогою Arduino. Докладні інструкції знайдете в розділі Цифровий звук.

Проект чотирьох генераторів SigmaStudio

Проект чотирьох генераторів SigmaStudio

Потім завантажуємо в Arduino скетч ADAU1701_Gen_LED_Dis.
Для розуміння, звідки в скетчі взяті дані подивіться скрін IDE Arduino з завантаженим скетчем генераторів. Рядки відповідають за включення і частоту синуса підкреслені кольоровими лініями. У попередньому малюнку ті ж дані в SigmaStudio підкреслені тими ж квітами.

У попередньому малюнку ті ж дані в SigmaStudio підкреслені тими ж квітами

Наступним крок це збірка генератора. Якщо вам не потрібна індикація частоти просто не підключайте індикацію (чотири RDC1-LD), а в своїх експериментах відстежуйте сигнал осциллографом, підключеним до одного з виходів аудіопроцесора.
У ролику можна побачити як виглядає проект і як змінюється форма або частота вихідного сигналу.

Це відкритий проект! Ліцензія, під якою він поширюється - Creative Commons - Attribution - Share Alike license .

// # include "i2clib / EEPROM24.h" #include "i2clib / I2CMaster.h" #include "i2clib / SoftI2C_mod.h" #include "i2clib / ADAU1701.h" #include <RDC1_LD.h> #include <Adafruit_NeoPixel. h> // висновки для підключення ADAU1701 #define DSP_SDA 9 #define DSP_SCL 10 #define DSP_WP 12 #define DSP_RES 1 // 13 #define DSP_ADDRESS 0 // аналогові входи #define SIN_FREQ_PIN A3 #define SQR_FREQ_PIN A2 #define TRI_FREQ_PIN A1 #define SAW_FREQ_PIN A0 // висновки для кнопок #define SIN_ON_KEY_PIN 2 #define SQR_ON_KEY_PIN 3 #define TRI_ON_KEY_PIN 4 #define SAW_ON_KEY_PIN 5 // висновки для індикатора #define DIS_LATCH 6 #define DIS_DATA 7 #define DIS_CLK 8 #define LED_PIN 13 #define ACTIVE_COLOR ((uint32_t) 0x000300) // адреси взяті з SigmaStudio #define SIN_ON_ADDR 2 // адреса в SigmaStudio для включення генератора синуса #define SQR_ON_ADDR 5 #define TRI_ON_ADDR 12 #define SAW_ON_ADDR 15 #define SIN_FREQ_ADDR 1 / / Адреса в SigmaStudio для установки частоти генератора синуса #define SQR_FREQ_ADDR 4 #define TRI_FREQ_ADDR 11 #define SAW_FREQ_ADDR 14 // значення взяті з опису на мікросхему ADAU1701 #define ADAU1701_DSP_CORE_CTRL 0x081C #define ADAU1701_DAC_SETUP 0x0827 #define SAFELOAD_ADR_0 0x0815 #define SAFELOAD_DATA_0 0x0810 #define DSP_CORE_IST ( 1 << 5) #define GENERATOR_COUNT 4 #define GEN_MAX_FREQ ((uint32_t) 6466219) #define FREQ_PER_ADC_VAL ((uint32_t) (GEN_MAX_FREQ / 1023)) #define GEN_MAX_FREQ_ALL ((uint32_t) 1747626) #define FREQ_PER_ADC_VAL_ALL ((uint32_t) (GEN_MAX_FREQ_ALL / 1023)) #define HzFREQ_PER_ADC_VAL ((float) (6466219.0 / 18500.0)) #define HzFREQ_PER_ADC_VAL_ALL ((float) (1747626.0 / 5000.0)) #define ADC_THRESHOLD 25 SoftI2C mI2C (DSP_SDA, DSP_SCL); // EEPROM24 mEeprom (mI2C, EEPROM_24LC256); ADAU1701 mDSP (mI2C, DSP_ADDRESS); RDC1_LD Display (DIS_LATCH, DIS_DATA, DIS_CLK, 4); // latch, data, clk, розряди Adafruit_NeoPixel LEDS = Adafruit_NeoPixel (1, LED_PIN, NEO_GRB + NEO_KHZ800); uint8_t KeyPins [] = {SIN_ON_KEY_PIN, SQR_ON_KEY_PIN, TRI_ON_KEY_PIN, SAW_ON_KEY_PIN,}; uint8_t AinPins [] = {SIN_FREQ_PIN, SQR_FREQ_PIN, TRI_FREQ_PIN, SAW_FREQ_PIN,}; uint8_t GenState = 0; uint16_t AinPrevVals [] = {0, 0, 0, 0,}; void setup () {pinMode (DSP_SDA, INPUT); digitalWrite (DSP_SDA, LOW); pinMode (DSP_SCL, INPUT); digitalWrite (DSP_SCL, LOW); pinMode (DSP_WP, INPUT); digitalWrite (DSP_WP, LOW); pinMode (DSP_RES, INPUT); digitalWrite (DSP_RES, LOW); for (uint8_t i = 0; i <GENERATOR_COUNT; i ++) digitalWrite (KeyPins [i], HIGH); pinMode (DSP_RES, OUTPUT); delay (1000); pinMode (DSP_RES, INPUT); delay (22); while (digitalRead (DSP_WP) == LOW); delay (300); // дисплей із загальним катодом Display.SetType (COMMON_CATHODE); LEDS.begin (); } Void loop () {for (uint8_t i = 0; i <GENERATOR_COUNT; i ++) {if (digitalRead (KeyPins [i]) == LOW) {delay (70); if (digitalRead (KeyPins [i]) == LOW) {uint16_t OnAddr [] = {SIN_ON_ADDR, SQR_ON_ADDR, TRI_ON_ADDR, SAW_ON_ADDR}; uint8_t Data [5]; Data [0] = 0; Data [1] = OnAddr [i]; mDSP.write (SAFELOAD_ADR_0, 2, Data); Data [1] = 0; if (GenState & (1 << i)) {GenState & = ~ (1 << i); Data [2] = 0; } Else {GenState | = (1 << i); Data [2] = 0x80; } Data [3] = 0; Data [4] = 0; mDSP.write (SAFELOAD_DATA_0, 5, Data); mDSP.read (ADAU1701_DSP_CORE_CTRL, 2, Data); Data [1] | = DSP_CORE_IST; mDSP.write (ADAU1701_DSP_CORE_CTRL, 2, Data); while (digitalRead (KeyPins [i]) == LOW); }}} If (GenState == 0) LEDS.setPixelColor (0, 0); else LEDS.setPixelColor (0, ACTIVE_COLOR); LEDS.show (); for (uint8_t i = 0; i <GENERATOR_COUNT; i ++) {uint16_t ADCDataNew = analogRead (AinPins [i]); if ((abs (ADCDataNew - AinPrevVals [i])> = ADC_THRESHOLD) && (ADCDataNew> = 3)) {uint16_t FreqAddr [] = {SIN_FREQ_ADDR, SQR_FREQ_ADDR, TRI_FREQ_ADDR, SAW_FREQ_ADDR}; AinPrevVals [i] = ADCDataNew; // if (AinPrevVals [i] == 0) // AinPrevVals [i] = 1; uint32_t FreqPerADC = FREQ_PER_ADC_VAL; if (i> = 1) // якщо не синус FreqPerADC = FREQ_PER_ADC_VAL_ALL; uint32_t NewFreqVal = ((uint32_t) AinPrevVals [i]) * FreqPerADC; float FreqToShow = NewFreqVal; float HzFreqPerADC = HzFREQ_PER_ADC_VAL; if (i> = 1) // якщо не синус HzFreqPerADC = HzFREQ_PER_ADC_VAL_ALL; FreqToShow = (FreqToShow / HzFreqPerADC) / 1000; Display.print (FreqToShow, 2); if (i == 3) // якщо пила NewFreqVal / = 2; uint8_t Data [5]; Data [0] = 0; Data [1] = FreqAddr [i]; mDSP.write (SAFELOAD_ADR_0, 2, Data); Data [1] = NewFreqVal >> 24; Data [2] = NewFreqVal >> 16; Data [3] = NewFreqVal >> 8; Data [4] = NewFreqVal; mDSP.write (SAFELOAD_DATA_0, 5, Data); mDSP.read (ADAU1701_DSP_CORE_CTRL, 2, Data); Data [1] | = DSP_CORE_IST; mDSP.write (ADAU1701_DSP_CORE_CTRL, 2, Data); }}} // --------------------------------------------- -------------------

Разделы

» Ваз

» Двигатель

» Не заводится

» Неисправности

» Обзор

» Новости


Календарь

«    Август 2017    »
ПнВтСрЧтПтСбВс
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 

Архив

О сайте

Затраты на выполнение норм токсичности автомобилей в США на период до 1974 г.-1975 г произошли существенные изменения. Прежде всего следует отметить изменение характера большинства работ по электромобилям: работы в подавляющем большинстве стали носить чисто утилитарный характер. Большинство созданных в начале 70х годов электромобилей поступили в опытную эксплуатацию. Выпуск электромобилей в размере нескольких десятков штук стал обычным не только для Англии, но и для США, ФРГ, Франции.

ПОПУЛЯРНОЕ

РЕКЛАМА

www.school4mama.ru © 2016. Запчасти для автомобилей Шкода