Обработка и oтображение сигналов на частоте преобразования АЦП

Обработка и oтображение сигналов на частоте преобразования АЦП

460
ПОДЕЛИТЬСЯ

Цель работы: Рассмотрение особенностей ввода и отображения широкополосных сигналов.
Задачка работы: Построение канала ввода , обработки и отображения сигналов на наибольшей частоте преобразования АЦП контроллера Arduino.
Приборы и принадлежности: Контроллер Arduino UNO, пакет Simulink МатЛАБ (R2012).

ВВЕДЕНИЕ
1) дозволяет существенно уменьшить время проектирования метода для контроллера с учетом ограничений его ресурсов. Разработка программных средств для наблюдения, анализа и обработки сигналов на уровне контроллеров просит значимых временных издержек. Подключение контроллера к спец среде высочайшего уровня (Рис.

Для этого контроллер должен принимать сигналы на наибольшей частоте преобразования АЦП. Неплохим примером сильной спец среды для работы с сигналами является МатЛАБ. Для анализа сигналов часто требуется следить его диапазон в очень широкой полосе частот.

Индивидуальностью этого канала является то, что такты настоящего времени задаются не МатЛАБ, а контроллером Arduino. Построение рабочего канала «Arduino UNO – МатЛАБ» для наблюдения и обработки сигналов в настоящем времени на предельной частоте преобразования АЦП тщательно излагается в данной работе. Такое построение не просит компиляции Simulink модели с библиотекой настоящего времени (rtwin.tlc), что дозволяет применять в модели фактически любые блоки библиотеки Simulink.

Для проектирование алгоритмов на уровне спец среды нужен канал передачи данных меж контроллером и средой проектирования. 1. Сопоставление средств разработки алгоритмов. Рис.

ОБЩИЕ СВЕДЕНИЯ
Средства скопления, анализа, обработки и отображения сигналов
В данной работе употребляется среда Simulink для приёма и отображения данных контроллера Arduino.

Simulink интегрирована в среду MatLAB. Simulink – это интерактивная среда и язык программирования для имитационного моделирования, позволяющая при помощи блок-диаграмм строить динамические модели действий. Интеграция дозволяет применять уже готовые библиотеки блоков, интегрированные математические методы, массивные средства обработки и графического отображения данных для решения всего диапазона задач от разработки концепции модели до тестирования, проверки, генерации кода и аппаратной реализации.

2. Состав пакетов расширения библиотеки Simulink на примере пакета цифровой обработки сигнала “DSP System Toolbox” показан на Рис.

Пример доп пакета расширения Simulink для моделирования систем обработки сигналов: DSP System Toolbox [1]. Рис. 2. Выделено содержимое раздела Power Spectrum Estimation — блоки для спектральной оценки сигнала. В пакете употребляются новые методы спектрального анализа.

Потоковая передача данных
Внедрение 2-ух буферов для скопления и передачи данных дозволяет организовать без разрывов сбор, обработку и визуализацию данных (для избежания утраты данных скорость следующего процесса обязана быть не ниже скорости предшествующего процесса).

Примером внедрения таковой организации может быть модуль E14-440 [2] для многоканального ввода, вывода и обработки аналоговой и цифровой инфы, подключаемый к компу через шину USB.

Входные данные поначалу заносятся в первую половинку FIFO буфера АЦП. Опосля скопления данных во 2-ой половинке FIFO буфера снова начинается передача данных в PC и параллельно длится сбор данных уже в первую половинку. Опосля ее наполнения данные начинают передаваться в PC, в тоже время не прекращается сбор данных во вторую половинку FIFO буфера.

ПОСТРОЕНИЕ ОСЦИЛЛОГРАФА НА БАЗЕ КОНТРОЛЛЕРА ARDUINO
Наибольшая скорость скопления данных АЦП
Используя вывод результата на монитор редактора Arduino на наибольшей частоте (57600 бит/с) напишем програмку подсчета преобразований АЦП за фиксированный период.

Программа измерения скорости преобразования АЦП:

const int adc_5 = A5; // ADC port number
unsigned long time_start; // Start of capturing, ms
unsigned long time_end; // End of capturing, ms

void setup() {
Serial.begin (57600); // 9600, 19200, 38400, 57600 and 115200 bit/s
}

void loop(){
time_start = millis();
for (int i = 0; i < 1024; i++) {
int val = analogRead(adc_5);
}
time_end = millis();
int period = time_end — time_start;
Serial.println(period);

Среднее время преобразования АЦП: 0.1123 мс (как 115/1024). Время (в мсек) 1024 и 512 преобразований АЦП. Рис. 3.

Время масштабирования данных АЦП
Для перевода 10 разрядных данных АЦП в 8 разрядные употребляется функция
map(val, 0, 1023, 0, 255);
где val – int переменная c 10 важными разрядами.
Программа измерения времени преобразования АЦП с масштабированием и записи в массив:

const int adc_5 = A5; // ADC port number
unsigned long time_start; // Start of capturing, ms
unsigned long time_end; // End of capturing, ms
byte adc_bytes[1024]; // Buffer for ADC data

void setup() {
Serial.begin (57600); // bit/s
}

void loop(){
time_start = millis();
for (int i = 0; i < 1024; i++) {
int val = analogRead(adc_5);
adc_bytes[i] = map(val, 0, 1023, 0, 255);
}
time_end = millis();
int period = time_end — time_start;
Serial.println(period);
}

Период АЦП преобразования с масштабированием: 0.1611 мс (как 165/1024). Рис. 4. Время (в мсек) 1024 преобразований АЦП, перевода 10 р. данных в 8 разрядные и запись в массив.

Так как время преобразования АЦП 0.13 мс, то один перевод 10 разрядных данных в байтовый формат (масштабирование) составляет 0.0424 мс.

Скорость канала поочередной передачи данных
Для определения скорости побайтовой передачи в поочередный канал в цикле передается код знака Serial.write(1) который не отображается на мониторе.

Основной блок программы определения скорости передачи:

void loop(){ //Do stuff here
unsigned long time = millis();
Serial.write(1);
rate = rate + 1;
if (time > set_time) {
set_time = set_time + 30; // 30 ms RT clock
Serial.println(rate);
rate = 0;
}
}

Рис. 5. Тестовые данные: количество переданных б в поочередный канал за 30 мс на скорости 57600 бит/с.
Тест показал, что передача 173 б занимает 30 мс, с иной стороны за 30 мс на скорости 57600 бит/с можно передать 1728 бит. Следовательно, на передачу 1-го б расходуется время передачи 10 бит. Используя это отношение для режима передачи
• Data bits: 8
• Parity: none
• Stop bits: 1
• Flow control: none
можно подсчитать время потоковой передачи массива данных на различных скоростях.
Передача, к примеру, 256 б на скорости 9600 бод (бит/c) занимает 267 мс, на скорости 57600 бод – 44 мс; и на скорости 115200 бод – 22 мс (как 256*10/115200).

Размер массива для скопления и передачи данных
Тестирование программы повторяющегося считывания АЦП, масштабирования 10 разрядных данных до 8 разрядных, тактирования и побайтной передачи данных показало, что наибольший размер массива для скопления и отправки данных не должен превосходить 1800 б. Размер оперативной (SRAM) памяти Arduino UNO составляет 2 Кбайт.

Потому массив для скопления и передачи данных АЦП ограничен 1024 б либо 512 словами. Наиболее сложные программы могут востребовать и большей доборной памяти SRAM.

Рис. Кусочек провода, подсоединенный к аналоговому входу А5 контроллера Arduino для усиления наблюдаемой наводки сети 50 Гц. 6.

Таблица 1. Времена операций программы с учетом непостоянности циклов

Пример опции канала отображения 256 масштабированных значений АЦП при наибольшей скорости скопления и передачи данных.
Код программы контроллера Arduino:
const int adc_5 = A5; // ADC port number
unsigned long set_time; // Time of next clock
byte adc_bytes[256]; // Buffer for scaled ADC data

void setup() {
Serial.begin (115200); // bit/s
}

void loop(){
unsigned long time = millis(); // Current time in ms

// ADC data capturing
for (int i = 0; i < 256; i++) {
int val = analogRead(adc_5);
adc_bytes[i] = map(val, 0, 1023, 0, 255);
}

// send ADC data into serial port
Serial.print(«A»); // «A» is header
for (int i = 0; i < 256; i++) {
Serial.write(adc_bytes[i]);
}

if (time > set_time) {
set_time = set_time + 70; // RT clock is 70 ms
}
}

Рис. 7. Определение номера порта а среде Arduino.

Рис. Simulink модель для приёма АЦП данных контроллера, масштабирования вектора данных по времени, отображения данных в настоящем времени и сохранения потока данных в памяти workspace. 8.

Характеристики COM порта в среде Simulink (блок модели: Serial Configuration) 9. Рис.

10. Характеристики блоков Simulink модели и режима моделирования. Рис.

Модель запускается нажатием на клавишу Start simulation:

11. Рис. Клавиша пуска модели.

Причина смещения сигнала при наложении кадров – отсутствие синхронизации отображения. Вид сетевой наводки (подключение показано на Рис. Рис. 12. 6) с наложением кадров (левое окно) и в отдельном кадре (правое окно). Примечание: Simulink имеет довольно средств для построения канала синхронизации.

ПРИМЕРЫ ПОЛУЧЕНИЯ ПРОВЕРЕННЫХ РЕЗУЛЬТАТОВ И ВАРИАНТЫ ДЛЯ САМОКОНТРОЛЯ
8). Задание 1. пример и таблицу времён на стр. Скопление, передача и отображение отмасштабированных данных (см.
1. Знак A – заголовок передаваемого массива. Программа обязана выполняться с наибольшей скоростью. Напишите для контроллера Arduino UNO програмку повторяющегося считывания показаний АЦП, масштабирования, записи данных в массив 1024 б и передачи массива в поочередный канал.

Пример программы:

const int adc_5 = A5; // ADC port number
unsigned long set_time; // Time of next clock
byte adc_bytes[1024]; // Buffer for ADC data

void setup() {
Serial.begin (115200); // bit/s
}

void loop(){
unsigned long time = millis(); // Current time in ms

// ADC data capturing
for (int i = 0; i < 1024; i++) {
int val = analogRead(adc_5);
adc_bytes[i] = map(val, 0, 1023, 0, 255);
}

// send ADC data into serial port
Serial.print(«A»); // «A» is header
for (int i = 0; i < 1024; i++) {
Serial.write(adc_bytes[i]);
}

if (time > set_time) {
set_time = set_time + 270; // RT clock is 270 ms
}
}

Отмасштабируйте время отображаемых данных. Скорость, размер пакета, период принимаемых данных и такт работы модели должны соответствовать подходящим характеристикам контроллера. В среде МатЛАБ составьте програмку из Simulink блоков для приема и отображения данных контроллера в настоящем времени. 2.

13. Рис. Объединение векторов (Vector Concatenate) употребляется для масштабирования сигнала по шкале времени кадра (frame). Simulink модель для приема данных на наибольшей частоте: 115200 бод.

Рис. Амплитуда наводки зависит от расстояния меж проводом и вашей рукою. 3. Проверьте качество канала «Вход АЦП – экран МатЛАБ», к примеру по периоду сетевой 50 Гц наводки на входе АЦП. Для роста амплитуды наводки ко входу АЦП подсоедините кусочек провода (см. 6).

Рис. Наложение 4 кадров при сканировании частоты 50Гц на входе АЦП контроллера Arduino. 14.

Частота сети на входе АЦП контроллера, 4 кадр. 15. Рис.

Задание 2. Скопление, передача и отображение 10 разрядных данных АЦП.
Для контроллера Arduino UNO напишите програмку повторяющегося считывания показаний АЦП, записи данных в массив 512 слов и побайтной передачи данных массива в поочередный канал. Программа обязана выполняться с наибольшей скоростью. 1.

Пример программы:

const int adc_5 = A5; // ADC port number
unsigned long set_time; // Time of next clock in ms
word adc_int[512]; // Buffer for ADC data
int val;
byte val_Lo, val_Hi;

void setup() {
Serial.begin (115200); // bit/s
}

void loop(){
unsigned long time = millis();

// ADC data capturing
for (int i = 0; i < 512; i++) {
adc_int[i] = analogRead(adc_5);
}

// send ADC data into serial port
// first low bytes then high bytes
Serial.print(«A»); // «A» is header
for (int i = 0; i < 512; i++) {
val = adc_int[i];
val_Lo = (val << 1) & 0xFE;
Serial.write(val_Lo); // Lo byte
}
for (int i = 0; i < 512; i++) {
val = adc_int[i];
val_Hi = (val >> 6) & 0xE;
Serial.write(val_Hi); // Hi byte
}

if (time > set_time) {
set_time = set_time + 160; // RT clock is 160 ms
}
}

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

Рис. 16. Программа Simulink для приёма, восстановления и отображения массива данных АЦП контроллера Arduino UNO.
3. Запишите сетевые 50 Гц наводки.

Наложение 15 кадров при сканировании сетевой наводки 50Гц на входе АЦП контроллера. Период программы: 160 мс. 17. Время передачи 512х2 б на частоте 115200 бод: 89 мс. Рис. Время наполнения массива данными АЦП: 58 мс.

Рис. 18. Крайний 15 кадр. Время 3.5 циклов 50 Гц сигнала: 70 мс.

Задание 3. Обработка сигнала m-програмкой МатЛАБ
Рис. 13). Сохраните отображаемые в настоящем времени данные в workspace памяти МатЛАБ, к примеру, при помощи блока simout (см. 1.
2. Скопируйте сохраненные данные в рабочий каталог, к примеру:
save(‘simout_50Hz’,’simout’);
Разработайте m-програмку МатЛАБ для отображения архивного АЦП сигнала контроллера. 3.

Пример кода:

clear all
load(‘simout_50Hz’);

d_frame = simout.Time(2)-simout.Time(1);
size_frame = size(simout.Data,1);
sampling = d_frame/(size_frame + 163*4); % dt
data_size = size(simout.Data,1)*size(simout.Data,2)*size(simout.Data,3);

% time = (0:data_size-1)*sampling;
time = [];
for i = 1:length(simout.Time)
time = [time (0:1023)*sampling+simout.Time(i)];
end

adc = uint8([]);
for i = 1:size(simout.Data,3)
adc = [adc simout.Data(:,:,i)’];
end

% frame_num = length(simout.Time) % or size(adc,3) % is 54 frame

if 1 %
figure
plot(time, adc, ‘b’)
grid on
xlabel(‘Time, s’);
ylabel(‘ADC [0… 255], bit’);
title(‘8 bit ADC frame against Time’);
end

Покадровое изменение 50 Гц наводки на входе АЦП контроллера Arduino UNO: 24 кадра по 0.27 сек. Рис. 19.

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

Пример кода:

clear all
load(‘simout_50Hz’);

d_frame = simout.Time(2)-simout.Time(1);
sampling = d_frame/((256 + 176)*4); % dt
data_size = size(simout.Data,1)*size(simout.Data,2)*size(simout.Data,3); % <256 x 1 x 54>

%FRAME number
i = 5;
time = (0:1023)*sampling+simout.Time(i);
adc = simout.Data(:,:,i)’;
if 1 %
figure
plot(time, adc, ‘b’)
grid on
xlabel(‘Time, s’);
ylabel(‘ADC [0… 255], bit’);
title(‘8 bit ADC frame against Time’);
end
% period
comp_level = 60;
j = 1;
for i = 2:length(adc)
if (adc(i) >= comp_level) && (adc(i-1) < comp_level)
cell_num(j) = i;
j = j + 1;
end
end
s_period = diff(time(cell_num));

Следовательно время 1-го считывания и масштабирования сигнала АЦП: 0.156 мс. Непрерывное и поточечное изменение сигнала в избранном кадре. 20. Размер вектора: 1024 б. Рис. Время 5 кадра: 1.08… 1.24 сек.

Рис. 21. Период наводки сети 5 кадра: 19.2… 19.4 мсек.

Построение диапазона сигнала в настоящем времени. Задание 4.
Для наблюдения частотного диапазона сигнала подключите к отображаемому сигналу модели блок скорого преобразования Фурье (Spectrum Scope: FFT) из раздела библиотеки Simulink > DSP System Toolbox > Sinks. 1.

Модель со спектроскопом. 22. Рис.

Диапазон сетевой наводки. 23. Сигнал кадра включает 1024 амплитуды и 163×4 нулевых значений. Рис.

Выделите основную гармонику сигнала: 50 Гц. 2.

24. Гармоника сигнала на частоте 50 Гц. Рис.

Подключите блок Spectrum Scope: FFT к неотмасштабированному (по времени) сигналу. 3.

На входе неотмасштабированный сигнал с наименьшей зоной нулевых значений в конце массива (вектора). Рис. 25. Перенос точки подключения спектрографа.

Настройте блок. Выберите тип отображаемого диапазона: Spectrum Type. 4.

Характеристики спектрометра неотмасштабированного сигнала из 1024 амплитуд. 26. Рис.

Построение канала высокоскоростной потоковой передачи и обработки 8р данных в настоящем времени без пропуска данных. Задание 5.
Напишите для контроллера Arduino UNO програмку повторяющегося считывания показаний АЦП, масштабирования и передачи в поочередный канал 2048 б с заголовком. 1. Программа обязана считывать показания АЦП на неизменной частоте без перерывов.

Пример программы:
const int adc_5 = A5; // ADC port number

void setup() {
Serial.begin (115200); // bit/s
}

void loop(){
for (int i = 0; i < 2048; i++) {
if (i == 0) Serial.print(«A „); // “A» is header
int val = analogRead(adc_5);
byte adc_byte = map(val, 0, 1023, 0, 255);
Serial.write(adc_byte);
}
}

Настройте модель Simulink (МатЛАБ) на прием данных контроллера. 2.

27. Кадр содержит 2048 б. Рис. Пример модели для отображения непрерывного потока данных.

10) по периоду 50 Гц сети. Настройте время моделирования модели (Меню > Simulation > Configuration Parameters > Solver > Fixed-step size) и такт блока Serial Receive > Block Sample Time, (см. Рис. 3.
Расчетное время кадра по данным Таблица 1: 254 мс (для 1024 б) => 508 мс для 2048 б, В реальности, время кадра программы (в которой считывание АЦП и передача выполняются попеременно) составляет 375 мс.

Следовательно, время кадра обязано быть 375 мс, а период преобразования АЦП, масштабирования и передачи данных: 0.1831 мс. Рис. Кадр графопостроителя Vector Scope. В кадре 18.75 периодов 50 Гц волны. 28.

В командном окне МатЛАБ наберите команду формирования 5 кадрового сигнала. 4.
sgnl = [simout.Data(:,1,1)’ simout.Data(:,1,2)’ simout.Data(:,1,3)’ simout.Data(:,1,4)’ simout.Data(:,1,5)’];

Постройте график 5 первых кадров сигнала. 5.

29. 5 кадров входного сигнала модели. Рис.

Разглядите качество стыков кадров. 6.

Рис. 30. Имеются приметные преломления в первом б каждого кадра. Стыки 5 кадров. Подменой первых б средними значениями меж наиблежайшими точками можно значительно понизить преломления.

7. Наблюдайте диапазон сигнала в настоящем времени. Подключите ко входному сигналу модели анализатор диапазона.

31. Модель отображения диапазона входного сигнала (АЦП Arduino UNO) в настоящем времени. Рис.

Диапазон сетевой наводки на входе АЦП контроллера Arduino. Рис. 32.

Подключите ко входному сигналу модели осциллограф Time Scope из библиотеки Simulink > DSP System Toolbox > Sinks. 8.

33. Рис. Осциллограф в модели для отображения входного сигнала контроллера Arduino.

9. Настройте осциллограф на отображение содержимого текущего кадра и частоты сигнала.

Рис. Настройка осциллографа Time Scope > Menu > View > Properties. 34.

Запустите модель и наблюдайте стабильность сигнальных характеристик. 10.

Рис. Отображение сигнала и его характеристик в настоящем времени на осциллографе Simulink модели. 35.

Крайний вариант канала контроллер Arduino – МатЛАБ в сопоставлении с прошлыми вариациями имеет последующие достоинства.
• не употребляется память контроллера для скопления АЦП данных;
• обеспечивается малый такт преобразования АЦП с масштабированием, который чуток больше такта преобразования АЦП с масштабированием при отсутствии передачи;
• не требуется масштабирование сигнала по времени в Simulink модели;
• модель содержит меньше блоков;
• фактически не ограничен размер вектора и время кадра.

КОНТРОЛЬНЫЕ Вопросцы
1. Сравните периоды преобразования АЦП первого и крайнего заданий.
Почему для построения диапазона сигнала рекомендуется брать подборку размером кратную двум? 2.
Какова задержка потоковой передачи 1024 б на частоте 115200 бит/c при последующих параметрах передачи? 3.
• Data bits: 8
• Parity: none
• Stop bits: 1
• Flow control: none

БИБЛИОГРАФИЧЕСКИЙ Перечень
DSP System Toolbox. 1. matlab.ru/datasheets/Dsp-system-toolbox-Ru.pdf
Dr. Система термостатирования на базе USB интерфейса Lcard E14-440 (S-function) portalnp.ru/2013/09/1036 2. Bob Davidov.
Bob Davidov. Компьютерные технологии управления в технических системах portalnp.ru/author/bobdavidov. habrahabr.ru 3. Dr.