Пропорциональное управление на МК с нуля
| |
ВитГо | Дата: Воскресенье, 21.04.2013, 10:19 | Сообщение # 301 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| а в чем проблема то ?
не пойму..
у тебя есть: - ручка управления курсом (RUD): ее значение от 0 до 1023 середина 512 - ручка управления тягой (THR): значение от 0 до 1023
соответственно значение тяги каждого канала вычисляем как значение тяги [+\-] значение курса THR1=THR+RUD THR2=THR-RUD
далее делаем из беззнакового значения RUD - значение со знаком RUDS=RUD-512
после этого берем значение THR и складываем\вычитаем из него RUDS
после возможно понадобиться ограничить расходы по каналам мин. 1000 (мкс), макс 2000 (мкс)
как то так, точно сказать не смогу, нужно пробовать
либо делать механизм микширования как это сделано в нормальных аппах - но там уже математика, только ради микширования двигателей делать как то нет смысла...
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Воскресенье, 21.04.2013, 17:48 | Сообщение # 302 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| если честно, то я ни чего не понял ..
Цитата соответственно значение тяги каждого канала вычисляем как значение тяги [+\-] значение курса THR1=THR+RUD THR2=THR-RUD
например THR= 1023 ( полный газ ) RUD = 512 ( (курс) летим прямо )
THR1=1023+512=1535 THR2=1023-512=511
что такое THR1 и THR2 ?
Цитата далее делаем из беззнакового значения RUD - значение со знаком RUDS=RUD-512
RUDS=RUD-512 => 512-512=0
Цитата после этого берем значение THR и складываем\вычитаем из него RUDS
1023-0=1023 - и что это я получил ?
... ничего не понял
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Воскресенье, 21.04.2013, 17:51 |
|
| |
ВитГо | Дата: Воскресенье, 21.04.2013, 18:00 | Сообщение # 303 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| нее !! не так
полный газ THR=1023 - это значение ручки управления тягой
летим прямо RUDS=RUD-512=512 (середина стика руд) - 512 (константа!)=0
THR1 И THR2 - это расчитываемое значение канального импульса на приемник для управления моторами
THR1=THR+RUDS=1023 THR2=THR-RUDS=1023
Например меняем курс: RUD=1023, RUDS=1023 - 512 = 511 THR1=THR+RUDS= 1023+511=1534 THR2=THR-RUDS=1023-511=512
Далее все как ранее: к значениям THRx прибавляем 1000 (у нас диапазон должен быть от 1000 до 2000 мкс) и после этого ОБЯЗАТЕЛЬНО проверяем выход значения канала за максимум минимум и ограничиваем их краями если выход за диапазон произошел THR1=THR1+1000 THR2=THR2+1000
1000<THR1<2000 1000<THR2<2000
В итоге на выходе THR1=2000 (мы получили 1534 + 1000 >2000 - значит ограничиваем значением 2000) THR2=1512 (мы получили 512 + 1000 =1512 - допустимое значение, не ограничиваем !)
вот и вся математика :-)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Воскресенье, 21.04.2013, 22:54 | Сообщение # 304 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| вот, что непонятно:
первое:
а если например меняем курс в другую сторону ? RUD=0, RUDS=0 - 512 = -512 THR1=THR+RUDS= 1023+(-512)=511 THR2=THR-RUDS=1023-(-511)=1535
а как работать с отрицательными числами ?
второе:
Цитата Далее все как ранее: к значениям THRx прибавляем 1000 (у нас диапазон должен быть от 1000 до 2000 мкс) зачем? регуля ведь не будет... тинька сама будет управлять моторами с помощью ШИМа
третье:
Цитата после этого ОБЯЗАТЕЛЬНО проверяем выход значения канала за максимум минимум и ограничиваем их краями если выход за диапазон произошел это уже нелинейная зависимость получится ...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Воскресенье, 21.04.2013, 22:56 |
|
| |
ВитГо | Дата: Понедельник, 22.04.2013, 00:04 | Сообщение # 305 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| Цитата (uwrtey) а если например меняем курс в другую сторону ? RUD=0, RUDS=0 - 512 = -512 THR1=THR+RUDS= 1023+(-512)=511 THR2=THR-RUDS=1023-(-511)=1535
а как работать с отрицательными числами ?
а чем тебя пугают отрицательные числа ? в принципе все тоже самое..
.Цитата (uwrtey) зачем? регуля ведь не будет... тинька сама будет управлять моторами с помощью ШИМа ну и что ? по радиоканалу ведь короткие импульсы могут и не пройти.. поэтому при передаче использовать стандартные значения длительностей каналов, а вот приемник уже пусть что хочет то и делает с ними :-)
Цитата (uwrtey) это уже нелинейная зависимость получится ...
почему? линейная ! просто с ограничением ! :-)
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 22.04.2013, 00:29 | Сообщение # 306 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Цитата (ВитГо) а чем тебя пугают отрицательные числа ? в принципе все тоже самое.. не знаю как с ними работать ( складывать и вычитать )
не успеваю за своими мыслями......
|
|
| |
ВитГо | Дата: Понедельник, 22.04.2013, 06:34 | Сообщение # 307 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| почитай теорию :-)
http://ru.wikipedia.org/wiki....81%D1%8 2%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%B0)
вообще ничего там страшного нет, команды те же...
ну или делать просто отдельный флаг - для того чтобы понять для какого двигателя нужно складывать и для какого нужно вычитать константу...
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Понедельник, 22.04.2013, 07:35 | Сообщение # 308 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ссылка не работает..
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Понедельник, 22.04.2013, 07:36 |
|
| |
ВитГо | Дата: Понедельник, 22.04.2013, 14:12 | Сообщение # 309 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| смотреть про дополнительный код http://kuzelenkov.narod.ru/mati/book/inform/inform5.html http://inf1.info/additionalcode
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Вторник, 23.04.2013, 21:38 | Сообщение # 310 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| спасибо! осмысляю..
не успеваю за своими мыслями......
|
|
| |
uwrtey | Дата: Среда, 24.04.2013, 10:43 | Сообщение # 311 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Почитал, написано все понятно - вроде даже, что-то понял
вот схему нарисовал по этому поводу
хочу тут разобрать один пример:
значение RUD=12 ( в машинном коде это 1100 ) MIDDLE_RUD=512 ( в машинном коде это 1000000000 ) считаем: 12-512=-500 1100-1000000000=1111111000001100 ( в человеческом понимании это 65036 ) самый старший бит - единица, а это значит, что это число отрицательное! теперь вычислим, то самое отрицательное число: ( помним о том, что система у нас двухбайтовая ) 0-1111111000001100=111110100 ( в человеческом понимании это 500 )
а если число отрицательное, то будем считать не так :
THR1=RUD+MIDDLE_RUD THR2=DUD-MIDDLE_RUD
а наоборот:
THR1=RUD-MIDDLE_RUD THR2=DUD+MIDDLE_RUD
выходит, что я все понял... ( аж сам не понял, как понял )
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Среда, 24.04.2013, 23:21 |
|
| |
uwrtey | Дата: Среда, 24.04.2013, 21:42 | Сообщение # 312 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| ладно, с математикой вроде разобрались...
Тогда я снова задам вопрос: Цитата зачем добавлять 1000? регуля ведь не будет... тинька сама будет управлять моторами с помощью ШИМа на что Ты мне ответил: Цитата ну и что ? по радиоканалу ведь короткие импульсы могут и не пройти.. поэтому при передаче использовать стандартные значения длительностей каналов, а вот приемник уже пусть что хочет то и делает с ними :-)
Дак, это и есть приемник Мы ведь с передатчиком уже разобрались - он у нас отсылает данные с трех АЦП и синхроимпульс в стандартном виде!!! И сейчас рассматриваем код приемника.. Вот я и говорю, что 1000 добавлять наверно не нужно ???
и еще меня смутило значение RUD ( от 0 до 1023 ) оно ведь у нас уже в стандартном виде PPM от 1000 до 2023 конечно это не проблема и тысячу можно отнять, но все-же...
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Среда, 24.04.2013, 23:15 |
|
| |
ВитГо | Дата: Четверг, 25.04.2013, 06:10 | Сообщение # 313 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| аа, ну на стороне приемника конечно ничего прибавлять не нужно..
просто во всех аппаратурах микширование каналов (а то что мы делаем с каналами двигателей - это и есть микширование) - выполняется на стороне передатчика ! то есть приемник - это просто приемник ! принял пачку ppm, и раздал исполнителям !! все !! никакого микширования в приемнике нет (потому что заранее нельзя предсказать для чего приемник будет применяться - для самолета, вертолета, планера, или еще для чего...)
в твоем случае микширование на стороне приемника, в принципе ничего страшного, потому что понятно что в другое место кроме верталета ты его ставить не будешь :-)
1000-1023 - не большая разница, ею можно и пренебреч, либо ограничить пределом 1000-2000... разницу даже не заметишь
Виталий (аka ВитГо)
|
|
| |
uwrtey | Дата: Четверг, 25.04.2013, 22:31 | Сообщение # 314 |
Генерал-майор
Группа: Администраторы
Сообщений: 3270
Статус: Offline
| Цитата (ВитГо) просто во всех аппаратурах микширование каналов - выполняется на стороне передатчика ! Точно... Я и не подумал...
______________________________________________________
А с каким значением RUD работать ?
со значением от 2000 до 4046? или разделить на 2 вычесть 1000 и работать с значением от 0 до 1023 ?
У нас в передатчике было так:
Значение АЦП+1000*2
Как правильнее организовать приемную сторону ?
в наличии есть кварц на 16 и на 20 мгц ( 20 тут ни как не подходит, значит на 16 )
........ скорее всего буду высчитывать >> разделить на 2 вычесть 1000 и работать с значением от 0 до 1023
_____________________________________
Кстати, а как синхронизировать? ... То, что по синхроимпульсу - это понятно! Но какое правило должно соблюдаться для синхроимпульса? ( например синхроимпульс не может быть короче чем 10 мс ) мне ведь нужно сначала определить, что синхроимпульс - это и есть синхроимпульс.
не успеваю за своими мыслями......
Сообщение отредактировал uwrtey - Четверг, 25.04.2013, 22:31 |
|
| |
ВитГо | Дата: Пятница, 26.04.2013, 18:53 | Сообщение # 315 |
Полковник
Группа: Администраторы
Сообщений: 2422
Статус: Offline
| ну для твоего случая - синхроимпульс всегда по длительности больше 13 мс.. (2 мс * 3 канала =6 мс, общая длинна пакета 20 мс)
после синхроимпульса - считываем каналы
Виталий (аka ВитГо)
|
|
| |
|