HeadTracker: Как побороть наводки от передатчика на гироскоп?

Vad64
Prikupets:

Но как только пытаюсь подключить к передатчику через тренерский разъем, чтобы взять оттуда питание и сервосигналы, так начинаются сущая свисопляска в показаниях гироскопа. Причем, они не прекращаются даже при вынутом кварце передатчика.

А РРМ как заведен на процессор? Может быть, он дергает питание вверх через защитные диоды входа? И надо бы осциллографом проверить, нет ли возбуждения стабилизаторов в условиях питания от пульта.

ubd

Там ещё с пульта, с тренерского разъёма, РРМ сигнал идёт с размахом 10V. Это нужно учесть.

Если вытаскиваешь кварц, и помеха не пропадает, наводки от передатчика, тут не при чём.

Prikupets

Спасибо огромное 😃 , действительно дело было в уровне сигнала. А я-то думал, что там 5V идет! В общем, поставил оптрон чтобы вообще не думать об его амплитуде, и помехи исчезли. 😃

Prikupets

Ну опять засада. У меня в программе обработчик прерывания (PIC16F688) использовался для определения фронтов сервоимпульса (INT) и для формирования и врезки своих каналов по таймеру (TMR1). Все работало отлично. Но с приходом гироскопа я поюзал еще и прерывания TMR0 (чтобы замерять время между опросами гироскопа), чтобы сделать из 8 бит таймера 16 бит - просто в прерывании TMR0 я инкрементирую переменную, в которой хранится старший байт. Но из-за этого стали дергаться сервы. Периодически возникающие раз в 256 ms прерывания TMR0 могут на несколько десятков us менять длительности всех сервоимпульсов, и сервы дергаются.

Вижу несколько решений:

  1. Перейти на 20 MHz с 4 MHz - эффект ослабнет в 5 раз; Но ног для кварца хватает;
  2. Перейти на PIC18 - сразу с 28 ногами (у меня есть PIC18F252). У него есть TMR3, и два уровня прерываний; Там же можно переделать программу под использование CCP модулей - будет вероятно точнее длительность импульсов замеряться и генерироваться.

Может кто-нибудь предложит другие решения?

SGordon

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

Prikupets
SGordon:

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

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

foxfly
Prikupets:

Нет, ибо мне надо точно засекать время.

Не знаю, как в Вашем процессоре, а в PIC 16F876 (4, 5 ноги) существуют два аппаратных входа для ШИМ и два таких же выхода(15, 16).
И если Вам надо точно мерять длину канального импульса и точно его генерить- посоветовал бы работать именно по этим ногам.
А потом, судя по картинке- у вас очень “развесистый” монтаж- тут тоже могут быть проблемы…

foxfly
foxfly:

Не знаю, как в Вашем процессоре, а в PIC 16F876 (4, 5 ноги) существуют два аппаратных входа для ШИМ и два таких же выхода(15, 16).
И если Вам надо точно мерять длину канального импульса и точно его генерить- посоветовал бы работать именно по этим ногам.
А потом, судя по картинке- у вас очень “развесистый” монтаж- тут тоже могут быть проблемы…

Извиняюсь, вкралась опечатка: номера ног соответствуют AtMega-8!