Помогите с анализом PWM сигнала (от RC приемника)

Vadim111
Offline
Зарегистрирован: 14.01.2015

Есть аппаратура радиоуправления (конкретно - Futaba 8fg. приемник R6208, который используется в обычном, не Fast режиме). Необходимо подключится к какому-либо из каналов приемника и в зависимости от сигнала PWM на этом канале сделать то или иное действие. Т.е., к примеру, если мы поднимаем стик управления на пульте, сигнал на приемнике в максимуме - зажигается красные светодиод, опускаем стик - сигнал в минимуме - зажгли синий светодиод. В идеале хотелось бы использовать (анализировать) одновременно несколько каналов и увеличить градацию, скажем, до 4 точек (к примеру, положение стика от +100 до +50; от 0 до +50; от 0 до -50 и от -50 до -100).

Пытался искать решение подобного вопроса, в том числе на зарубежных форумах. Нашел несколько постов, где рекомендуют считывать PPM сигнал, т.е. суммарный сигнал для всех каналов. Его надо брать с какой-то точки в приемнике. Для меня это слишком сложно, поскольку я физически не смогу подпаять проводок к микроскопической схеме приемника. Подключиться к стандартному разъему куда удобней, но о таком варианте считывания сигнала ничего доступно разжеванного не нашел.

Расскажите пожалуйста на пальцах, какую методику анализа такого сигнала я должен использовать в скетче: считывать каким-то образом его длительность или брать усредненное значение вольтажа? Есть ли какая-нибудь библиотека? Можно ли  привести какой-нибудь элементарный пример?

График PWM сигнала хорошо изучил, опыт написания несложных скетчей имею.

dmitriykisliy
Offline
Зарегистрирован: 03.03.2015

увидеть бы ваш ШИМ на осциллограмме

а так

1) в прерывании отслеживать длительность HIGH (или LOW, не важно) и период. по скважности зажигать нужный светодиод. это если скважность постоянная до изменения положения стика

2) C или RC фильтром через диод сглаживать сигнал и отправлять на аналоговый вход, ну и ... дальше не сложно

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

попробуй такой код, но он для одного канала. в приемнике всеравно каждый канал отдельно вроде

#define PPM_pin      A0
byte PPM;
unsigned long time;


void setup(){
  Serial.begin(115200);
  pinMode(PPM_pin, INPUT);
}

void loop(){
  PPM_read();
  Serial.println(PPM);
  delay(200);
  
}

//=============================================================================
//                           Считывание сигнала PPM
//=============================================================================
void PPM_read(){
  while(digitalRead(PPM_pin) == 0);
  time = micros();
  while(digitalRead(PPM_pin) == 1);
  time = micros()-time;
  if (time>535 && time<2385) PPM = map(time, 536, 2384, 0, 180);
  //Serial.println(time);
}


преобразует PPM сигнал в углы

535 и 2385 это время для библиотеки servo ардуиновской. у твоей аппаратуры свои. их нужно определеить и вписать в формулу

а дальше из углов делай что хочешь. хочешь шимом управляй, хочешь релюшкой

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

dmitriykisliy пишет:

увидеть бы ваш ШИМ на осциллограмме

Это выходы для подключения всяких серв. Просто стандартнейший сигнал .  Для PulseIn  работа. Если один канал.
Вот как много сигналов, да и одновременно считать- загадка, однако.....
Тут больше интересно все эти импульсы вместе-дружно начинаются или нет?

dmitriykisliy
Offline
Зарегистрирован: 03.03.2015

на любой плате 2 интеррупта. больше - мега в помощь. можно по каждому считать микросы или запускать счетчик (в этом не силен)

Vadim111
Offline
Зарегистрирован: 14.01.2015

trembo пишет:

Тут больше интересно все эти импульсы вместе-дружно начинаются или нет?

Осциллографа у меня не, но лет 5 назад, когда я еще не знал и не умел пользоваться Ардуиной, я заказывал аналогичный девайс у одного знатока микроконтроллеров на местном радиорынке. Он писал прогу для PIC-а и сам разрабатывал полную схему. У него долго не получалось написать программу. Точно не помню, какой был глюк, но не работало. Тогда он пригласил меня к себе в мастерскую вместе со всей аппаратурой и подключил все 8 контактов приемника к осциллографу. График сигналов его очень удивил. Картина была, условно, следующая: 1, 4,5 каналы - сигнал начинается одновременно (и каждый имеет длину в зависимости от положения стика), 2 и 8 смещены на 20мс и тоже начинаются вместе. Каждый из остальных каналов смещается на 20мс, но какие-то не на 20мс относительно предыдущего, а на 40.

Если изобразить примитивно, то осциллограмма была примерно следующая (черточки - сигналы разной длины, длина черточки - условино полные 20 мс. Здесь я изобразил, что 3-й канал смещен относительно 7-го на 40мс.):

1 канал: _

2 канал:   _

3канал:              _

4 канал: _

5 канал: _

6 канал:     _

7 канал:        _

8 канал:   _

Какова логика такого появления сигналов мы тогда так и не поняли. К тому же я уже не помню, какие именно каналы шли первыми, какие начинались одновременно и т.д. Да и жестко привязываться именно к этому приемнику не хотелось бы. А вдруг у другой модели (допустим 4-х канальной) все сигналы идут по очереди?

trembo пишет:

Просто стандартнейший сигнал .  Для PulseIn  работа.

Не могли бы вы более просто разъяснить, что вы имели ввиду?

Vadim111
Offline
Зарегистрирован: 14.01.2015

jeka_tm пишет:

попробуй такой код, но он для одного канала...

Посмотрел код - вроде бы должно работать, но не совсем понятно, почему задержку делают на 200мс - считывают только каждый 10-й сигнал или остальное время зарезервировано для считывания других каналов?

И совсем не понятно что это за временные промежутки 535 и 2385. Я понимаю, что это из библиотеки, но если пытаться анализировать временной промежуток другими средствами (чтобы впихнуть анализ 5-8 каналов) то хотелось бы знать конкретное назначение каждой величины. Странные числа, ничему не кратные. Вы, часом, не в курсе, что они обозначают?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

почитай про сигнал ppm и узнаешь что у разных производителей эти значения разные

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Подумалось...... Может быть специально сделан разбег по времени импульсов на сервы.
Чтобы они трогались с места в разное время, а не одновременно.
Для того чтобы пики их стартовых токов не складывались в большой пик тока потребления с источника питания.
Приедет FlySky- попробую глянуть....

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Vadim111 пишет:

Осциллографа у меня нет......

Есть у вас осциллограф, а при таких частотах он даже аналоговый:

https://www.google.ru/search?q=arduino+oscilloscope&newwindow=1&biw=1680...

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Vadim111 пишет:

 Т.е., к примеру, если мы поднимаем стик управления на пульте, сигнал на приемнике в максимуме - зажигается красные светодиод, опускаем стик - сигнал в минимуме - зажгли синий светодиод. В идеале хотелось бы использовать (анализировать) одновременно несколько каналов и увеличить градацию, скажем, до 4 точек (к примеру, положение стика от +100 до +50; от 0 до +50; от 0 до -50 и от -50 до -100).

1. Вешаем на этот канал серву, хоть такую

http://www.ebay.com/sch/i.html?_sacat=0&_nkw=2.5g+servo&_frs=1
http://www.ebay.com/sch/i.html?_sacat=0&_nkw=3.7g+servo&_frs=1
http://www.ebay.com/sch/i.html?_sacat=0&_nkw=4.3g+servo&_frs=1
http://www.ebay.com/sch/i.html?_sacat=0&_nkw=micro+servo&rt=nc&LH_BIN=1.

И два микрика. Включаем ими свои лампочки. Без Ардуины.

2. Ставим к серве потенциометр. И analogRead на Ардуину.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

тогда можно вскрыть серву и подпаятся к переменному резистору

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

.....тоже хотел написать....... но мелкие сервы.... ммммм .......лучше не разбирать.....

perdmen
Offline
Зарегистрирован: 18.09.2021

Посмотрте библиотеку ServoInput и ваша задача вам покажется простой как 2х2....

https://www.partsnotincluded.com/how-to-use-an-rc-controller-with-an-arduino/

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

perdmen пишет:

Посмотрте библиотеку ServoInput и ваша задача вам покажется простой как 2х2....

https://www.partsnotincluded.com/how-to-use-an-rc-controller-with-an-arduino/

посту шесть лет однако, осень..."тихо сам с собою я веду беседу"...