Я подал постоянное напряжение на моторы ( через полевики ) - вертолет взлетел...
Я вывел в ШИМ число 255 - вертолет взлетает..
Но когда я заливаю нормальную прошивку - вертолет отказывается взлетать - не достаточно оборотов..
Видимо в ШИМ не выводится максимальное число... Наверное ошибка в математике.. ( округляется при расчетах )
Тут я решил узнать какое минимальное число нужно для ШИМа что-бы вертолет взлетел
Вывел 250 - взлетает
Вывел 240 - не взлетает, но зато ездит как катер на воздушной подушке...
...
Сейчас попробую найти ошибку
КРАТКО
Что касается пульта...
1) Снимаем показания переменного резистора с помощью 10-ти битного АЦП ( у нас получается число от 0 до 1023 )
2) Превращаем это число длительность пригодную для формирования PPM ( длительность должна варьироваться от 700 до 2200 мкс )
http://www.rcdesign.ru/articles/radio/ppm_pcm
__так как наш таймер тикает каждые 0,5 мкс, то для этого к этому числу прибавляем 1000 и затем умножаем на 2
__У нас получается число от 2000 до 4046 ( то есть импульс будет в районе от 1000 мкс до 2023 мкс )
3) Передаем полученную длительность в радиоэфир
Что касается приемника:
1) Замеряем полученную длительность ГАЗА ( получается в районе от 1000 мкс до 2023 мкс )
__ Так как таймер приемника тикает каждые 0,5 мкс, то мы получаем число от 2000 до 4046
2) Превращаем полученное число в число пригодное для ШИМа моторов
__ШИМ для моторов организован на 8-ми битном таймере, а это значит, что максимальное число 255
__Для этого я делю это число на 2, а затем вычитаю 1000
__У меня получается число от 0 до 1023
__Сохраняем это число, что бы чуть позже преобразовать до нужного уровня.... ( *1 )
3) Так как вертолет имеет соосную схему несущих винтов, нужно микшировать ГАЗ и КУРС
__ Замеряем полученную длительность КУРСА ( получается в районе от 1000 мкс до 2023 мкс )
__ Так как таймер приемника тикает каждые 0,5 мкс, то мы получаем число от 2000 до 4046
4) Преобразую это число до такого-же уровня до которого преобразовал ГАЗ ( то есть от 0 до 1023 )
__Для этого я делю это число на 2, а затем вычитаю 1000
__У меня получается число от 0 до 1023
5) Теперь мне нужно получить из этого числа отклонение от полета прямо ( полет прямо это число 512 )
__То есть из полученного числа нужно вычесть 512 и получится число в районе от -512 до +511 ( хочется до +512, но не беда )
6) Если полученное число отрицательное, то повернуть нужно налево, а если положительно - направо
__Для дальнейших вычислений буду использовать модуль этого числа ( от 0 до 511 )
7) В микшере я упростил все донельзя....
__ при повороте я снижаю обороты одного мотора и НЕ увеличиваю обороты второго..
__ То есть на один мотор я вывожу значение ГАЗа а на второй мотор я вывожу значение ГАЗа за минусом значения КУРСа
8 ) Вот теперь то мне и нужно прочитать то число ГАЗа, которое я сохранил - то есть это число от 0 до 1023 ( *1 )
__Теперь нужно преобразовать до нужного уровня число ГАЗа то-есть число от 0 до 1023 до уровня от 0 до 255
__Для этого я делю прочитанное число на 4 и у меня получается число от 0 до 255
__Вывожу это число на один из моторов
__Теперь дело за вторым мотором...
9) Снова читаю сохраненное число ГАЗа - то есть это число от 0 до 1023 ( *1 )
__ Вычитаю из этого числа значение курса ( значение курса у меня от 0 до 511 ) ____0...1023 минус 0...511
__ Получается значение в диапазоне от -511 до 1023
__Отрицательные числа мне не нужны и по этому все, что меньше нуля заменяем нулем и у нас получается число от 0 до 1023
10) Теперь нужно преобразовать до нужного уровня полученное число, то есть число от 0 до 1023 до уровня от 0 до 255
__Для этого я делю прочитанное число на 4 и у меня получается число от 0 до 255
__Вывожу это число на второй мотор
Логически все правильно... Но вот математически МК где то округляет.
Разбираюсь....