формирование PPM
- Войдите на сайт для отправки комментариев
Есть желание управлять при помощи одного канала (например 8-го) на 8-канальной аппаратуре несколькими нагрузками.
Для этого:
-на принимающей стороне необходимо соорудить "преобразователь- дешифратор" который в зависимости от продолжительности ШИМ импулса будет подключать различные нагузки через силовые ключи. Причем в одном случае часть ключей должна срабатывать при наличии импульса нужной длины и отключаться при его отсутствии, а часть ключей должна срабатывать при наличии соответственного импульса и оставаться в вкл состоянии при его исчезновении.
- на передающей стороне необходимо сформировать восьмиканальный ППМ (так как устройство будет подключаться к тренерском входу пульта РУ, а он хавает только 8 канальный ППМ). (Можно было бы обойтись и ШИМ сигналом, но тогда встает вопорос как его подмешать к пачке ППМ в пульте). И обеспечить изменение длины одного (например 8-го) импульса в зависимости от положения различных переключателей ( нажимаем один -формируется импульс с длиной 1000мкс, другой 1100мкс ну и так далее).
Подскажите куда копать. Может информация есть и на форуме но я не нашел. Импортные аналогичные проекты имеются но там с кодом разобраться не реально, коментов минимум и на инглише....
конспект лекций опубликуйте.
или описание изделия на человеческом языке.
01
Вот нарыл скетч.<a href=
"http://hobby.msdatabase.ru/project-updates/theresultsofoursurvey/modesw"
rel=
"nofollow"
>http://hobby.msdatabase.ru/project-updates/theresultsofoursurvey/modesw</a> С помощью которого я смогу реализовать часть своего проекта. Суть устройства такова: имеется 5 кнопок, в зависимости от того какая кнопка была нажата на
"выходном пине"
формируется ШИМ определенной длительности от (0 до 255)Проблема - не могу понять как работает програмка. Запутался в циклах, когда какой заканчивается а другой начинается...
02
Ну и переменная
"i"
то ли внутри 2 циклов обьявлена, то ли она глобальная для всех сразу....
03
/*
04
s1 - s5 & LEDS connected to analog pins 1-5
05
its numbers from 14 to 18
06
07
08
*/
09
10
#define AnalogOut 10 // PWM out
11
12
int
SelBtn = 14;
// default
13
int
BtnLevels[19];
14
15
16
void
setup
()
17
{
18
19
Serial
.begin(9600);
20
21
//5 of 6 modes
22
23
BtnLevels[14] = 0;
// 1 кнопка
24
BtnLevels[15] = 84;
25
BtnLevels[16] = 127;
26
BtnLevels[17] = 169;
27
BtnLevels[18] = 255;
// 5 кнопка
28
29
30
//force pwm
31
TCCR1B = 0x01;
32
delay(100);
33
34
pinMode(SelBtn, OUTPUT);
35
digitalWrite(SelBtn,0);
36
analogWrite (AnalogOut, BtnLevels[SelBtn]);
37
38
}
39
void
loop
()
40
{
41
ScanBtns();
42
delay(10);
43
}
44
45
46
void
ScanBtns()
47
{
48
for
(
int
i=14; i <= 18; i++)
49
ScanBtn(i);
50
}
51
52
53
void
ScanBtn(
int
ScanPin)
54
{
55
if
(SelBtn != ScanPin)
56
{
57
pinMode(ScanPin, INPUT);
58
59
if
(digitalRead(ScanPin)==0)
60
{
61
SelBtn = ScanPin;
62
unsetOther(ScanPin);
63
while
(digitalRead(ScanPin)==0);
// hold scaning until relise button
64
pinMode(ScanPin, OUTPUT);
65
digitalWrite(ScanPin,LOW);
66
67
68
}
69
}
70
}
71
72
73
74
void
unsetOther(
int
excludePin)
75
{
76
for
(
int
i=14; i <= 18; i++)
77
{
78
if
(i != excludePin)
79
pinMode(i, INPUT);
80
digitalWrite(i,HIGH);
81
}
82
83
analogWrite (AnalogOut, BtnLevels[excludePin]);
84
Serial
.println(BtnLevels[excludePin]);
85
}
конспект лекций опубликуйте.
или описание изделия на человеческом языке.
vasia, в самом деле, перепишите подробней и яснее первый пост, тогда есть вероятность что вам помогут. Просто люди которые далеки авиамоделизма, уверен, не понимают что вы хотите сделать, как именно, и зачем это вообще нужно. Я то вас сразу понял, так как бьюсь сейчас над похожей проблемой (пытаюсь заставить ардуину передавать сигнал через в\ч модуль Turnigy 9x в обход пульта управления), но помочь к сожалению не могу ничем.
Попробую яснее сформулировать задачу, параллельно упростив ее.
Делаю усттройство дистанционного управления. Устройство должно дискретно (вкл/выкл) включать несколько нагрузок.
Передатчик: высокочастотный передатчик возьмем готовый, поэтому интересует только устройство формирующее ШИМ сигнал фиксированной длительности (0-255мкс). Допустим имеем 5 кнопок, принажатии на которые устройство выдает ШИМ фиксированной длительности 1я-0; 2ая-84; 3я-127; 4ая-169; 5ая-255. Причем при нажатии кнопки включается соответствующий светодиод, который горит и после отпускания кнопки ( длительность ШИМ не изменяется пока не будет нажата следующая кнопка)
На самом деле устройство передатчика выглядит иначе, и arduino подключается к типовому модельному передатчику, вместо делителя напряжения, и при помощи длительности ШИМ имитирует аналоговый сигнал (напряжение снимаемое с переменного резистора) но не суть......
На принимающей стороне имеем: приемник ВЧ(берем типовой поэтому не суть) "декодер" длительности ШИМ который, в зависимости от длительности ШИМ импульса будет подавать "0" на соответствующий выход Arduino , например 0- 13Pin; 84- 12 Pin; 127- 11Pin;
255- 9Pin. Ну и соответственно выходы подключаются к базам силовых ключей управляющих соответсвующей нагрузкой.
Причем устройство работающее в качестве передатчика я понимаю как собрать, есть даже скетч (на пост выше) , одна беда не могу разобраться с алгоритмом работы, не могу понять когда какая функция начинает исполняться..... то ли сначала весь цикл 14-19 прогоняется одной функцией и только потоом начинает работать следующая или они пошагово как то работают. В общем если бы кто смог подробнее откоментировать скетч......
попробуй пилить библиотеку IRremote на эту тему
устройство формирующее ШИМ сигнал фиксированной длительности (0-255мкс). Допустим имеем 5 кнопок, принажатии на которые устройство выдает ШИМ фиксированной длительности 1я-0; 2ая-84; 3я-127; 4ая-169; 5ая-255.
Длительность 0мкс это отсутствие колебаний вообще. Вам точно такое на первой кнопке надо? То, как вы описали сигналы, характеристикой шима является весьма своеобразной. Импульсы длительностью 127мкс можно формировать с любой частотой ниже 7874 Гц. Например, единственный импульс длительностью 127мкс раз в четыреста тысяч лет тоже подходит под ваши требования. Сформулируйте условия более четко.
http://forum.amperka.ru/threads/rc-%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA-%D0%B8-arduino-uno.1244/
Вот посмотрите, может пригодиться.
Попробую за топикстартера сформулировать, только давайте сначала и попорядку. У нас есть аппаратура радиоуправления, которая состоит из пульта управления, передающего высокочастотного модуля в него встроенного, и собственно приемника. Механика следующая: когда приемник и передатчик включены, пульт управления, в зависимости от состояния стиков, тумблеров и кнопок, генерирует ppm сигнал, и передает его на высокочастотный передатчик (фопросы радиосвязи тут опустим), далее приемник принимает, расшифровывает сигнал, и выдает нужные ppm на сервомашинки, двигатели, регуляторы и т.д.
Что мы хотим (в идеале):
1) Чтобы ардуина могла генерировать полноценный "родной" ppm сигнал пульта управления програмно. Другими словами, нужно подключить микроконтроллер напрямую к в/ч модулю, так, чтобы на "том конце" разницы не было.
2) Чтобы ардуина могла читать полноценно родной сигнал передатчика будучи подключенной к приемнику, и уже програмно, в зависимости от настроек, рулить сервами и управлять двигателями и т.д.
А вот далее помогайте! Если я все правильно понял, то все что нам нужно знать, это "язык", на котором общаются приемник и передатчик, все остальное - вопрос паяльника и чтения мануалов по программированию. То есть нам нужен вот такой рисунок, но только с цифрами именно для наших с автором, аппаратур радиоуправления.
Без него, я не смогу программно генерировать сигналы, так как тупо не знаю что генерировать, а топикстартер не сможет управлять нагрузками через 8й канал, так как не знает конкретных параметров 8го канала.
Вот теперь помогите! Как считать ВСЕ что выдает передатчик? На ум сразу приходит осцилограф, но это подозреваю геморойно, придется много времени убить пялясь в экран, записывая, и дергая стики. Нельзя ли как то запрограммировать считывание ардуиной, чтобы включить передатчик, подергать 5 минут стики, а потом от ардуины получить файлик с возможными каналами и их параметрами?
Ну задачу я вообщето сформулировал немного по другому. Значительно упростив ее по сравнению с той которую ставите вы. Плюс у вас в постановку вкралось несколько неточностей.
- приемник принимает PPM сигнал, но на сервы и т.д. выдает уже не PPM , а прогнав ППМ через декодер разлагает его на отдельные так сказать импульсы- ШИМ сигнал так сказать. Ну и соответсвенно у нас не стоит задача декодировать ППМ пачку. Нам нужно только измерять длину импулса одиночного ШИМ сигнала. котрый мы будема получать уже выделенный приемником из ППМ пачки.
- с передатчиком вообще просто (писал выше) мы не лезем ни в каие ППМ, а тупо откручиваем один из потенциомеров, напряжение с которых передатчик преобразует в дальнейшем в сигналы управления, и подаем на него ШИМ. Но не для того чтобы преобразовать его. ШИМ в нашем случае просто "имитирует" напряжение снимаемое с переменного резистора, arduino работает как импульсный источник переменного напряжения.
" analogWrite не просто выдаёт логический ноль или единицу на заданный пин, а выдаёт на него ШИМ-сигнал (PWM signal). То есть, пин начинает очень быстро (32 000 раз в секунду) переключаться между 0 и 5 вольтами и если подключить к такому пину светодиод, создастся иллюзия, что он горит в пол силы.Функция
analogWrite
принимает 2 аргумента: пин, о котором идёт речь и значение скважности. Значение скважности — это целое число от 0 до 255, которое определяет отношение длительности ступеньки в 0 В к длительности ступеньки в 5 В. "Всем добрый день. Ещё немного хочу пофорсировать эту тему. Есть полётной контроллер f3 , есть приёмник на ардуино. Нужно сделать чтоб выход с ардуино был ppm. Если кто-то может подсказать со скетчем , буду премного благодарен
Всем добрый день. Ещё немного хочу пофорсировать эту тему. Есть полётной контроллер f3 , есть приёмник на ардуино. Нужно сделать чтоб выход с ардуино был ppm. Если кто-то может подсказать со скетчем , буду премного благодарен
а причем тут полётный контроллер, сигналы формируются в аппаратуре р.управления, там это все и выставляется PWM/PPM, что конкретно хочется сделать, обработать PPM параллельно отдельной ардуиной?
Думаю не совсем внятно изъяснился. Прошу простить. Так вот , я собрал полностью аппаратуру и приёмник на ардуино на 6 каналов , не хочется тянуть жмут проводов к полётному контроллеру , вот пытаюсь выяснить как организовать передачу по одному проводу, то есть ppm. Скетч самый обычный у меня , пульт читает значения с помощью аналог рида, а приёмник их принимает и даёт сигнал на нужные пины
Поискал скетчи для этого дела , люди пользуют Timerone надо будет попробовать тоже. Мало ли все так просто
Реализаций полно, к примеру вот а вот для NRF24 по стандарту PPM это 8 каналов, я к тому что твой полётник сможет правильно 7 каналов декодировать, испытаешь - дай знать
Удалось одолеть PPM?