Указанный гироскоп был использован мной ранее для обкатки комплементарного фильтра, который в свою очередь планируется использовать в подсистеме стабилизации квадрокоптера. Согласно даташиту, модуль имеет следующие базовые характеристики:
Согласно этим данным, для преобразования выходного сигнала датчика в конкретную величину скорости вращения вокруг оси 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. |
События >