Валера К

Программируем высотомер на основе TI eZ430 Chronos

277 posts in this topic

Кстати, девайс реально можно заточить под пищалку, вытащив его из корпуса часов и смастерить к нему коробочку.

А может можно по беспроводному интерфейсу динамик подключить внешний?)

Share this post


Link to post
Share on other sites
А может можно по беспроводному интерфейсу динамик подключить внешний?)

Если я не ошибаюсь, то вот эта хреновина нужна:

http://focus.ti.com/docs/toolsw/folders/pr...emk868-915.html

CC1111EMK868-915.jpg

На ее базе, судя по видео на ютубе, делают всякие примочки для радиоуправления всякого (двери отрывающиеся, управление светом, RC cars) Пищалку скорее всего, тоже сделать можно. стоит 50$ Вобщем, отличный инструмент для разработки.

Share this post


Link to post
Share on other sites
Компилировал во этим http://mspgcc4.sourceforge.net/ Проблем особых не было. а главное никаких ограничений.
а не особые какие были? ;)

отсутствие опыта и времени на то, чтобы основательно разобраться. (но за часа полтора сумбурных рысканий по мануалам разобрался как компилировать)

и косяк в том, что пока не получается подключить вариометр в готовой сборке.

Share this post


Link to post
Share on other sites
и косяк в том, что пока не получается подключить вариометр в готовой сборке.

как же я "люблю" эти "интуитивно понятные" ГНУсные компиляторы для железа... Ты пробовал компилировать этот проект с вариометром при помощи IAR или Code Composer Studio?

Share this post


Link to post
Share on other sites
как же я "люблю" эти "интуитивно понятные" ГНУсные компиляторы для железа... Ты пробовал компилировать этот проект с вариометром при помощи IAR или Code Composer Studio?

нет пока. в описании рекомендуют gcc. вот я и послушался

Share this post


Link to post
Share on other sites

Ура! собрал с вариометром. Заодно, вроде, убрал фильтрацию, чтобы задержки отображения не было. Алгоритмы вычисления высоты не трогал. Увеличил таймаут пока до 3 часов.

Итого имеем высотник сверху и вариометр или часы снизу.

This fork adds a variometer, an instrument indicating vertical speed,
essentially for use in free flight (paragliding, hang gliding, ...).
Initially based on the vario source coded by dkm, I ended up rewriting
that module completely.
- Pressing the "v" (down) button cycles between displays as follows:
    * vario (in m/s)
      Displays a signed fractional value representing the ascent or
          descent speed in meters per second.
    * vario (in Pascal)
          Displays a signed integer value representing the ascent or
          descent speed in Pascal/second.
    * pressure (in hPa)
          Displays a signed fraction representing the pressure measured at
          the current altitude.
    * max Vz (in m/s)
          Displays the maximum vertical speed in meters/second.
    * min Vz (in m/s)
          Displays the minimum vertical speed in meters/second.  
- A long press on the "#" button performs a context sensitive function:    
    * during vario display, changes the vario sound mode:
      Off      (default, no symbol displayed)
      Ascent 0 (start beeping at 0.0m/s, beeper1 and beeper2 symbols
               displayed)
      Ascent 1 (start beeping at 0.1m/s, beeper1 symbol displayed)
      Both     (beep for up or down, beeper1 and beeper2 symbols
               displayed)
      Tone frequency, number and duration of beeps depend on climb rate.
    * during max/min Vz display, resets both the max and min values.
- The "record" icon is flashed at one second intervals, indicating that
  the watch is in vario mode and receiving pressure measurements.
  Note that the upper line must be in altimeter mode for the vario to
  work, as it relies on updates from the altimeter. If the altimeter
  is not active, the vario display shows "noAlt".

Сборка для 868Мгц версии

OpenChronos.rar

eZChronos.rar

Share this post


Link to post
Share on other sites

wami,

Залил прошивку через Wireless-Updater на версию с 868 мГц, работает. Надо будет посмотреть алгоритмы расчёта высоты.

Share this post


Link to post
Share on other sites

Ну вот, процесс пошел :)))

Напишу, чего сделал я и todo лист.

В стандартной прошивке менял следующее:

1) Отрубается сглаживание (все время передается FILTER_OFF).

2) Переписал драйвер датчика давления. Убрал старый алгоритм и ненужные функции. В результате сам алгоритм такой:

s16 conv_pa_to_meter(u32 p_meas, s16 altitude_offset)
{
    volatile s16 h;
    volatile float rawAltitude;
    volatile float fl_p_meas;
    volatile float pressureFactor = 1/5.25588;
    fl_p_meas = (float) p_meas;  
    rawAltitude = 44330 * (1 - pow((fl_p_meas/101325.0), pressureFactor));
    h=(s16)rawAltitude + altitude_offset;
    return (h);
}

Количество кода и функций сократилось раза в 3 :) Кроме того переделал поправку относительно земли.

3) Увеличил таймаут высотомера до 8 часов (изначально стоит 1 час, дальше высотомер отрубается и выводит на экран -----)

4) При включении выводит давление с датчика.

todo:

0) Нужно понять, достаточное ли быстродействие датчика. По умолчанию в регистр 0x03 пишется 0x0B, это режим ultra low power с обновлением примерно раз в секунду и потреблением 3 мА. Есть еще несколько режимов с 2Hz и 9Hz обновлением и потреблением 30 мА.

1) дописать в меню заглушку для нижней строки, чтобы можно было выбрать внизу пустое место (оставить только высотомер сверху)

2) сделать округление показаний в зависимости от высоты

3) сделать автоматическое выставления 0 как в Viso

4) сделать возможность включать подсветку постоянно (для night jump)

PS: Комрады, у кого есть возможность сравнить абсолютные значения давления, выдаваемые датчиком с чем--нить еще? Например с Suunto.

У меня врет датчик на 20 милибар, хотя в даташите сказано, что погрешность всего +-150 паскалей. У меня такое чувство, что в эти отладочные комплекты ставят не прошедьшие по параметрам датчики за копейку :) Т.к. сам датчик у нас стоит 1000 р. :) На работу относительно земли это не влияет, но хотелось бы понять, это мне попался такой экземпляр, или это тенденция.

Чтобы сравнить, можно заменить в файле test.c строку

display_chars(LCD_SEG_L2_4_0, (u8 *) "CC430", SEG_ON);

на

start_altitude_measurement();

stop_altitude_measurement();

pressure=ps_get_pa();

str = int_to_array(pressure, 6, 6);

display_chars(LCD_SEG_L2_5_0, str, SEG_ON_BLINK_OFF);

Тогда они будут выводит вниз давление при каждом включении.

Share this post


Link to post
Share on other sites
Есть маленький пьезо-пищик. Из-за герметичного копуса слышно очень тихо. Разве что в ухо прям направлять, и если нежалко, то просверлить отверстие напротив пищалки(она, ктати, приклеена к металлической крышке) то так будет слышнее.

Кстати, девайс реально можно заточить под пищалку, вытащив его из корпуса часов и смастерить к нему коробочку.

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

Share this post


Link to post
Share on other sites

сравнил показание давление одних из своих 430-х с суунто. разница около заводской погрешности (100-300 Pa) притом в Suunto давление выыводится в целых hPa. Завтра постараюсь вторые сравнить.

В прошивке которую собрал я давление тоже можно посмотреть в режиме вариометра пощелкав кнопку вниз.

И посмотрел я на этот вариометр... Надо какой-нибудь алгоритм сглаживания, чтобы не вносил сильную задержку. У кого какие есть идеи?

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

Share this post


Link to post
Share on other sites

Динамика там нет. Сверлить там ничего не надо, это не поможет. Там стоит пьезоэллемент и через пружинку колебания передаются на заднюю крышку. Соответственно когда она снята, то ничего не пищит. был не прав

сравнил показание давление одних из своих 430-х с суунто. разница около заводской погрешности (100-300 Pa) притом в Suunto давление выыводится в целых hPa.

Значит мне попался неудачный экземпляр. Не понятно только, как ты определил разницу в 100-300 Pa, если "Suunto давление выыводится в целых hPa."

Ты пробовал компилировать этот проект с вариометром при помощи IAR или Code Composer Studio?

Отвечу за него - не компилится :)

Share this post


Link to post
Share on other sites
Надо какой-нибудь алгоритм сглаживания, чтобы не вносил сильную задержку. У кого какие есть идеи?

я использовал математическую модель RC-фильтра. Необходимый эффект сглаживания достигается подбором R, C параметров.

P.S. здесь формул готовых больше - выбирай любую :). Смотри раздел фильтр нижних частот, так как Тебе именно высокие частоты нужно отсечь.

http://www.skilldiagram.com/gl1-19.html

Share this post


Link to post
Share on other sites
Динамика там нет. Сверлить там ничего не надо, это не поможет. Там стоит пьезоэллемент и через пружинку колебания передаются на заднюю крышку. Соответственно когда она снята, то ничего не пищит.

Значит мне попался неудачный экземпляр. Не понятно только, как ты определил разницу в 100-300 Pa, если "Suunto давление выыводится в целых hPa."

как определил: мои показывают 1003.45 suunto 1002

Динамик там есть. Это пьезоэллемент, приклеенный к крышке. Питание к нему по пружинке и корпусу. В прошивке OpenChronos какой-то косяк с аудио, вот оно и не работает. Надо будет разобраться. Ато я уже думал запорол динамик.

Share this post


Link to post
Share on other sites
я использовал математическую модель RC-фильтра. Необходимый эффект сглаживания достигается подбором R, C параметров.

если известны уравнения движения, то использование интегратора не оптимально.

смотреть нужно в сторону фильтра кальмана, а поскольку известны еще и предельные ускорения, то в сторону constrained kalman filter.

Что получается (получалось у меня с реальными записями. кальман, учитывающий в уравнении движения члены до 3его порядка) здесь -

http://foto.mail.ru/mail/diwil/LMS

на картинке график с меткой 'real' это ручная аппроксимация smoothing spline, коротрая выглядит как живая, но совершенно не пригодна для реального времени.

да... верх - скорость, низ - высота. На этих примерах я моделировал ну совсем нереальные шумы (в высотах - +-300м) - путем добавления шума к записанным данным.

К слову, чем выше порядок слагаемого, тем сильнее он зашумлен. Поэтому, если надо вычислять еще и скорость, то для нее необходима еще своя дополнительная обработка.

Share this post


Link to post
Share on other sites

А можно для дурака, зачем нам в скайдайве фильтры? IMHO, что пришло с датчика, то и выводим вполне подходит :)

Share this post


Link to post
Share on other sites
если известны уравнения движения, то использование интегратора не оптимально.

смотреть нужно в сторону фильтра кальмана, а поскольку известны еще и предельные ускорения, то в сторону constrained kalman filter.

Что получается (получалось у меня с реальными записями. кальман, учитывающий в уравнении движения члены до 3его порядка) здесь -

http://foto.mail.ru/mail/diwil/LMS

на картинке график с меткой 'real' это ручная аппроксимация smoothing spline, коротрая выглядит как живая, но совершенно не пригодна для реального времени.

да... верх - скорость, низ - высота. На этих примерах я моделировал ну совсем нереальные шумы (в высотах - +-300м) - путем добавления шума к записанным данным.

К слову, чем выше порядок слагаемого, тем сильнее он зашумлен. Поэтому, если надо вычислять еще и скорость, то для нее необходима еще своя дополнительная обработка.

вот тут некоторые размышления на подобную тему с примерами кодов. Но, думается в нашем случае с частотой обновления в 1гц все это слишком мудрено. Да и помехи не такие уж и ужасные. У меня лежа на столе давление скачет в диапазоне +- 20Па

А можно для дурака, зачем нам в скайдайве фильтры? IMHO, что пришло с датчика, то и выводим вполне подходит :)

IMHO для высоты сгодится, а вот когда показания вариометра скачет +- 1,5 м/с не очень.

Share this post


Link to post
Share on other sites
0) Нужно понять, достаточное ли быстродействие датчика. По умолчанию в регистр 0x03 пишется 0x0B, это режим

PS: Комрады, у кого есть возможность сравнить абсолютные значения давления, выдаваемые датчиком с чем--нить еще? Например с Suunto.

датчик выдает данные в режиме Ultra low power с частотой 1Hz, поставь его врежим High Speed , тогда он будет выдавать данные с частотой 9Hz, это уже нормально, правда упадет точность измерения

в файле данные о подъеме-спуске, посчитанные по формуле которую ты использовал в программе

подъем до 3000 и прыжок, частота измерения 5Hz

5.xls

Share this post


Link to post
Share on other sites
вот тут некоторые размышления на подобную тему с примерами кодов. Но, думается в нашем случае с частотой обновления в 1гц все это слишком мудрено. Да и помехи не такие уж и ужасные. У меня лежа на столе давление скачет в диапазоне +- 20Па

IMHO для высоты сгодится, а вот когда показания вариометра скачет +- 1,5 м/с не очень.

раз в секунду - это, очевидно, плохо. Помехи бывают ужасные. Я проверял :). Помеха может быть и нестационарной, тогда простой интегратор будет давать "веселенький" результат. LMS без сшивки вообще не годится, а с сшивкой _сильно_ зашумлен и имеет тенденцию отклоняться от истинного (хотя, кто знает, что такое истина) значения, ну, во всяком случае, по виду кривой.

на моих картинках данные с датчика intersema ms5534 - 20 раз в секунду: 4 давления, температура, 4 давления, температура,... для последующей обработки каждый 5й отсчет давления вычисленный.

P.S. я в свое время много датчиков и много различных способов фильтрации перепробовал. Лучше всего kalman constrained получился. Хотя, наверное, шумы сильно зависят от 'sensor housing'.

Share this post


Link to post
Share on other sites
датчик выдает данные в режиме Ultra low power с частотой 1Hz, поставь его врежим High Speed , тогда он будет выдавать данные с частотой 9Hz, это уже нормально, правда упадет точность измерения

Точность не упадет. В режиме high speed разрешение такое-же как и в ultra low power (15bit).

А вот потребление вырастет до 30 мА и это значит, что только датчик сожрет батарейку за примерно 7-8 часов.

Для скайдайва достаточно вполне дискретности обоих режимов, вопрос в скорости.

в файле данные о подъеме-спуске, посчитанные по формуле которую ты использовал в программе

подъем до 3000 и прыжок, частота измерения 5Hz

Очень похоже, если в начале "0" выставить, спасибо за данные :)

Share this post


Link to post
Share on other sites

при желании, думаю датчик давления можно поменять, на BMP085, при максимальной скорости работы, по I2C он выдает 100 Hz, по размерам он меньше чем тот который стоит в часах, конечно нужно будет повозиться с распайкой

Share this post


Link to post
Share on other sites

В обед мотанулся до радиомагазина, купил пьезик зп-3. Прислонил к дивайсу вместо крышки - громкость вполне достаточная, если учесть, что будет ещё и резонатор в виде коробочки - вообще отлично.

Share this post


Link to post
Share on other sites

Посмотрел исходники вариометра. Печально. Надо будет их заметно переделывать. Там вообще не учитывается температура и высота для преобразования изменения давления в вертикальную скорость.

И еще. Удалось один раз повесить часы. Правда только во время нажатяи кнопок. Так что пока бы не стал на 100% им доверяться.

PS для таких как я, кто не знал, как блокировать нажатия кнопок: зажать и удержать # и \/. также разблокировать.

Share this post


Link to post
Share on other sites

Кто-нить пробовал установить CCS с диска, который идет в комплекте с часами?

...у меня не получается ни фига...

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now