Гироскопические муки с Pololu LPR550AL
Дата публикации: Sep 10, 2012 5:46:10 PM
Согласно этим данным, для преобразования выходного сигнала датчика в конкретную величину скорости вращения вокруг оси 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.
Указанный гироскоп был использован мной ранее для обкатки комплементарного фильтра, который в свою очередь планируется использовать в подсистеме стабилизации квадрокоптера. Согласно даташиту, модуль имеет следующие базовые характеристики:напряжение питания - 2.7В - 3.6В;
диапазон измерений - ±500гр/с для режима с усилением сигнала 4x и ±2000гр/с для режима без усиления;
чувствительность 2мВ и 0.5мВ соответственно.