Частота аналогового сигнала

Roman_khv
Offline
Зарегистрирован: 08.05.2018

Требуется рассчитать частоту аналогового сигнала приходящего с осей акселерометра. Сейчас это делается с помощью fft в LabView (в комп порт посылаются данные с осей акса, в лаб вью они расскладываются по частоте). Подскажите как это можно сделать с помощью кода и сразу в ком порт слать вычислинную частоту? Данные по радио улетат если что

#include <SPI.h>                                          // Подключаем библиотеку для работы с шиной SPI
#include <nRF24L01.h>                                     // Подключаем файл настроек из библиотеки RF24
#include <RF24.h>                                         // Подключаем библиотеку для работы с nRF24L01+
RF24 radio(9, 10);
int data[3];        

void setup()
{
    radio.begin();                                        // Инициируем работу nRF24L01+
    radio.setChannel(5);                                  // Указываем канал передачи данных (от 0 до 127), 5 - значит передача данных осуществляется на частоте 2,405 ГГц (на одном канале может быть только 1 приёмник и до 6 передатчиков)
    radio.setDataRate     (RF24_1MBPS);                   // Указываем скорость передачи данных (RF24_250KBPS, RF24_1MBPS, RF24_2MBPS), RF24_1MBPS - 1Мбит/сек
    radio.setPALevel      (RF24_PA_HIGH);                 // Указываем мощность передатчика (RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_HIGH=-6dBm, RF24_PA_MAX=0dBm)
    radio.openWritingPipe (0x1234567890LL);     
Serial.begin(9600); // определяем скорость обмена с компьютером
}
void loop()
{
data[0] = analogRead(0); // считываем уровень со входа A0
data[1] = analogRead(1); // считываем уровень со входа A1
data[2] = analogRead(2); // считываем уровень со входа A2
radio.write(&data, sizeof(data));                   
delay(10);
}

 

Roman_khv
Offline
Зарегистрирован: 08.05.2018

Забыл сказать, что сигнал - синусоида. Насколько я понимаю это можно сделать с помощью библиотеки "freqmeasure.h" Но там сигнал должен идти с 8го пина. А как мне расскаладывать сигнал идущий с A0-A2 пинов? 

svm
Offline
Зарегистрирован: 06.11.2016

А причем здесь частота? Вы же считываете аналоговые сигналы со входов А0-А2. Нет там никакой синусоиды - там просто изменяется напряжение.

Roman_khv
Offline
Зарегистрирован: 08.05.2018

На А0-А2 приходят значения с акселерометра. Если строить график по этим значениям с помощью LabView то можно наблюдать синусоиду (датчик вращается). По этой синусоиде в LabView вычисляется частота аналогового сигнала. Задача в том чтобы последняя операция производилась сразу в ардуине, без использования LabView

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Roman_khv, Вы в своем первом сообщении произнесли волшебное слово: fft. Вот в этом направлении и нужно копать.

В принципе, если известно, что сигнал именно синусоида (естественно, с добавленными шумами - как же без них!), то можно организовать и конечный автомат.

kasper007
Offline
Зарегистрирован: 23.05.2016

А что Вам мешает заводить сигнал не на A0-A2, а на "8 pin" и использовать стандартную библиотеку? Измерять нужно по 3 каналам? О каких величинах значений частот идет речь?

Roman_khv
Offline
Зарегистрирован: 08.05.2018

Мешает то, что все давно уже спаяно и да, 3 канала. там до 1 Гц величины

Roman_khv
Offline
Зарегистрирован: 08.05.2018

Вот я и копаю, но понять не могу как мне организовать преобразование сразу трех каналов ВЫБРАННЫХ МНОЙ а не прописанных в стандартной библиотеке, какую функцию надо вызвать :(( поэтому и пишу на форум в надежде, что бывалые подскажут эти несколько так необходимых мне строк..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

То есть мы сначала паяем, и только потом начинаем проектировать?

С 8 пина невозможно снять аналоговый сигнал, следовательно, все Ваши дальнейшие рассуждения неверны в принципе.

Непонятно, чего Вы хотите. Постарайтесь как-то обрисовать задачу без фантастических допущений.

b707
Offline
Зарегистрирован: 26.05.2017

Roman_khv, а вы описание библиотеки FreqMeasure пробовали читать? Библиотека рассчитана на цифровые сигналы, она просто считает импульсы в заданное время, используя аппаратный таймер и\или прерывание, поэтому работает только на конкретном пине.

Roman_khv пишет:

Вот я и копаю, но понять не могу как мне организовать преобразование сразу трех каналов ВЫБРАННЫХ МНОЙ а не прописанных в стандартной библиотеке

никак

kasper007
Offline
Зарегистрирован: 23.05.2016

Если говорить о задаче целиком, то наверное сложности в ее решении нет. Частоты очень низкие, т.е. можно даже прерывания не использовать, обойтись обыкновенным програмным таймером. Преобразуем наш синус в меандр (схем в инете 100500), а затем подаем на обыкновенный цифровой вход и считаем. В данном случае количество каналов может и 1 и 2 и 3.

Roman_khv
Offline
Зарегистрирован: 08.05.2018

тогда Вы можете подсказать как это реалиизовать с помощью FFT?

 

Roman_khv
Offline
Зарегистрирован: 08.05.2018

Система работает с LabView, есть задача избавиться от лаб вью. Сигнал дает акс с АЦП на борту

Roman_khv
Offline
Зарегистрирован: 08.05.2018

Вообще на практике проверенно, что акс работает до 660 об/мин ( скорость его вращения). Получается что мне надо определять частоту до этого диапозона и про 1 Герц я скорее соврал. 

kasper007
Offline
Зарегистрирован: 23.05.2016

Что-то похохожее на вашу задачу обсуждали здесь: http://arduino.ru/forum/programmirovanie/bystroe-preobrazovanie-fure-fft...

Roman_khv
Offline
Зарегистрирован: 08.05.2018

что-то там замудрено. Я думаю, что все должно быть намного проще

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Сделайте проще - кто ж Вам не дает.

Roman_khv
Offline
Зарегистрирован: 08.05.2018

Если бы мог, то не писал на форум..

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

А на форум с какой целью написали?

Если нужно готовое решение, то это в раздел "Ищу исполнителя".

А если сами что-то хотите сделать, то нужно делать самому, за Вас это никто делать не будет.

Roman_khv
Offline
Зарегистрирован: 08.05.2018

Я на форум пришел, чтобы узнать может кто сталкивался с этим и может подсказать, что можно использовать. От стандартных фраз прошу воздржаться, ибо они никакого смысла в себе не несут

b707
Offline
Зарегистрирован: 26.05.2017

Roman_khv пишет:

Я на форум пришел, чтобы узнать может кто сталкивался с этим и может подсказать, что можно использовать.

ну так вам дали ссылку на обсуждение - а вам не подходит, "слишком сложно, должно быть проще". Что на это можно ответить, кроме как "Дерзайте сами!" ??

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Roman_khv пишет:

Я на форум пришел, чтобы узнать может кто сталкивался с этим и может подсказать

Конечно сталкивался. Вам и подсказали, берите библиотеку FFT и делайте. В той теме всё есть.

Проще не получится. Разве что очень хорошо знать допущения Вашей задачи. Но изучать допущения и искать метод проще - это само по себе серьёзная задача.

Если для Вас это слишком сложно, ну не делайте, заажите тому, для кого не слишком сложно.