События‎ > ‎

Гироскопические муки с Pololu LPR550AL

Отправлено 10 сент. 2012 г., 10:46 пользователем Олег Евсегнеев
Гироскоп Pololu LPR550AL
Указанный гироскоп был использован мной ранее для обкатки комплементарного фильтра, который в свою очередь планируется использовать в подсистеме стабилизации квадрокоптера. Согласно даташиту, модуль имеет следующие базовые характеристики:
            • напряжение питания - 2.7В - 3.6В;
            • диапазон измерений - ±500гр/с для режима с усилением сигнала 4x и ±2000гр/с для режима без усиления;
            • чувствительность 2мВ и 0.5мВ соответственно.

Согласно этим данным, для преобразования выходного сигнала датчика в конкретную величину скорости вращения вокруг оси X следует использовать известную формулу:

gyr_x = (gyr_raw * 3.3 / 1023 - 1.23) / 0.0005

здесь gyr_raw - сигнал с датчика,
3.3 - опорное напряжение,
1023 - разрядность АЦП (10 разрядов),
1.23 - напряжение покоя (для LPR550AL),
0.0005 - чувствительность датчика в вольтах.

Таким образом, в состоянии покоя на выходе датчика должно получиться значение:

gyr_raw = (0 * 0.0005 + 1.23) * 1023 / 3.3 = 381.3

И это значение подтверждается опытными данными на двух платформах, ORduino и mbed. Теперь повернем датчик, положим, со скоростью 180гр/сек в положительном направлении. На выходе гироскопа планируется получить следующее значение:

gyr_raw = (180 * 0.0005 + 1.23) * 1023 / 3.3 = 409.2

И вот тут то обнаруживается проблема. Фактически, АЦП микроконтроллера выдает нам не 410, а все 665. Другими словами сигнал занимает большую часть диапазона, хотя датчик повернулся всего лишь со скоростью +180гр/с из возможных +2000гр/с.

Наиболее простым решением в данном случае стало масштабирование сигнала, путем умножения на некоторый коэффициент K. Величина данного множителя в моем случае составила K = 0.2 (вычислена экспериментально). Таким образом исходная формула приняла вид:

gyr_x = (gyr_raw * 3.3 / 1023 - 1.23) * 0.2 / 0.0005

Используя коэффициент, удается снять с датчика реальные показания угловой скорости. Однако указанное решение не поможет в случае если датчик будет поворачиваться быстрее 430гр/сек.

Причины такого поведения гироскопа Pololu LPR550AL остаются неясными. Возможно это проблема конкретного экземпляра, а может быть имеются какие-то тонкости в подключении к АЦП которые я не учел. В любом случае, такие сложные устройства как гироскоп или акселерометр лучше всего иметь в виде одного модуля со встроенными АЦП и цифровым внешним интерфейсом, например I2C.

Comments