|
решение систем нелинейных уравнений ..., ... на микроконтроллере :) |
|
|
|
Oct 30 2010, 23:20
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912

|
Всем привет. захотелось такое, зауправлять двигателем стирлинга. 3 уравнения Вандервальса для состояния газа в полостях и одно для масс газа в полостях. тоеть всего 4. есть милион библиотек для pc, взял попробывать портировать cminpack ( http://devernay.free.fr/hacks/cminpack/cminpack.html ) работает, собсно и портировать не пришлось, скомпилил и заработало. врядли кому понадобится так извращатся как мне, но малоли... вот либа для кортексов: klen.org/Files/DevTools/libcminpack.7z библиотека собрана gcc, другого в хозяйстве не держу. но собрать можно любым компиллером. накидал тестовый пример как это нада юзать; Код #include ".cminpack.h" #include <math.h>
int equation_sytem( void* ptr , int n , const double* estimations , double* errors, double *fjac, int ldfjac, int iflag ) { if ( iflag == 1 ) // вычислените правых частей системы упавнений { errors[0] = sqrt(estimations[0]) + estimations[1]*estimations[1] - estimations[2] - 3.0; errors[1] = (estimations[0] + estimations[1])/estimations[2] - 2.0; errors[2] = estimations[0] * estimations[1] * estimations[2] - 24.0; } if ( iflag == 2 ) // вычисление матрицы Якоби { //вычисление элементов матрицы Якоби fjac[0] = 0.5 * pow ( estimations[0] , -0.5 ); fjac[3] = 2*estimations[1]; fjac[6] = -1; fjac[1] = 1.0/estimations[2]; fjac[4] = 1.0/estimations[2]; fjac[7] = -(estimations[0] + estimations[1])/(estimations[2]*estimations[2]); fjac[2] = estimations[2] * estimations[1]; fjac[5] = estimations[0] * estimations[0]; fjac[8] = estimations[1] * estimations[2]; } return 1; }
int main() { double vecX[3] ; // вектор переменных double vecE[3] ; // вектор правых частей (ошибок пиближения) double matJ[3*3]; // матрца Якоби
int n = 3; // порядок системы int ldfjac = n; int lwa = 330; // в доке написано что должно быть 10*(n*(3*n+13))/2; double wa[330]; double tol = 1e-12; // точность вычислений // начальные условия vecX[0] = 1.0; vecX[1] = 1.0; vecX[2] = 1.0; // решение системы hybrj1( equation_sytem , (void*)NULL , 3 , vecX , vecE , matJ, ldfjac ,tol , wa , lwa ); // корни уравнения в vecX return 0; } этом примере решается система: sqrt(x1) + x2*x2 - x3 - 3 = 0 (x1 + x2)/x3 - 2 = 0 x1*x2*x3 - 24 = 0 на моей шарманке (stm32f107vct6) тратится 29 милисекунд и жрется 180 байт стека на вызов hybrj1 , размер массив сами видите сколько, это зависть от количества уравнений. время мерил в тиках FreeRTOS, стек мерил тоже её же стредсвами для стека задачи. по мойму не плохо, можно еще библу отоптимизировать - без приборов по коду видно что писали не проф.программеры а математики - никагого понятия об таких вещах как стек, озу, архитектура и тд, но оно им и неадабыло так мы мучим наши микросхемки на древний русский народный празник хеллуин  вот, решил поделится празничным настроением.
|
|
|
|
|
 |
Ответов
|
Oct 31 2010, 13:14
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Для сравнения: мы в своем изделии - стабилизация движущейся в пространстве платформы - использовали фильтр КальманаУ нас два датчика обратной связи - МЭМС гироском и акселерометр. А какому датчику больше верить - тут вводятся коэффициенты степени доверия каждому датчику, которые тоже являются функцией значения с датчиков. Например, при движении (не повороте) платформы врет акселерометр, а гироскоп врет из-за накапливающейся ошибки интегрирования, т.к. дает скорость вращения, а нам нужен угол наклона. В итоге, все свелось к работе с квадратными матрицами 3x3 - работает на удивление быстро. По сути, принцип его работы - это работа с системой уравнений, но более обобщенный. Тут главное - как можно точнее воссоздать модель поведения, а оттуда уже просто получить соотв. коэффициенты. Фильтр работает изумительно - сходится при самых невозможных входных данных, т.е. нет самовозбуждения в отличие от банального ПИД регулятора. Подстройка сводится к достижению наилучшей скорости реакции. И самое важное отличие фильтра Кальмана от большинства других цифровых фильтров - у него нет задержки во времени. Т.е. фильтр Кальмана - это фильтр с предсказанием. На практике так и есть - мгновенная реакция на любые изменения на входах. Как только нам удалось добится правильной работы, то было очень интересно было наблюдать за его поведением - как "живой" реагировал на изменения показаний датчиков обратной связи  Причем, если менять данные сразу на всех датчиках - то очень быстро находил "самого надежного" и работал уже только с ним.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Oct 31 2010, 14:33
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата Ну так на каком типе ARM-ов реализовали, http://www.beck-ipc.com/en/products/sc2x/index.aspЭто - макет, так выходит быстрее, среда - CoDeSysВ самом изделии планируется ставить отечественный проц на ядре Cortex-M3. Цитата с какой скоростью велись вычисления или какая была загрузка проца, SC23/24 успевал где-то за 30 мс. Цитата на каких типах данных, FLOAT32 Цитата какова была частота выборки, 20 Гц Цитата какую скорость реакции достигли нулевую  на самом деле, задержку вносит сама механика устройства Цитата и какое было максимально разрегулирование? перерегулирование не выходит за допуск по Т.З: в динамике - до 0,2 градуса и в статике - до 0,1 градуса.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Oct 31 2010, 15:01
|

Twilight Zone
  
Группа: Свой
Сообщений: 454
Регистрация: 17-02-09
Из: Челябинск
Пользователь №: 44 990

|
Цитата(Forger @ Oct 31 2010, 17:33)  В самом изделии планируется ставить отечественный проц на ядре Cortex-M3. Интересненько, вот это 1986ВЕ91? У вас есть уже наработки с данным процессором? Моделировали ли вы свою систему на ПК? Если так, то в этой статье http://aravil.livejournal.com/17728.html есть такая фраза: "цена нашего МК будет, как минимум, на порядок выше цен западных аналогов". С чувством патриотизма переплотил бы максиму 1,5 цены, но на порядок....
Сообщение отредактировал Danis - Oct 31 2010, 15:14
--------------------
Magic Friend
|
|
|
|
|
Oct 31 2010, 15:28
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(Danis @ Oct 31 2010, 18:01)  Интересненько, вот это 1986ВЕ91? Да. Цитата У вас есть уже наработки с данным процессором? Нет, но это не имеет значения. Цитата Моделировали ли вы свою систему на ПК? Да, именно с этого начали. Цитата "цена нашего МК будет, как минимум, на порядок выше цен западных аналогов" Это не имеет значения....  Цитата(klen @ Oct 31 2010, 18:18)  наверно он будет в радиацонно стойком керамическом корпусе с позолотой, вот и цена + наша промышленность серийно может только жигули выпускать(првда это не сдело ее автомобилем) Как признавался глава Миландра в одной из статей в одном уважаемомом журнале (по моей памяти): у нас в стране не выгодно работать на ширпотреб, т.е. на бытовуху. Но этот проц. прошел военную приемку......
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
Сообщений в этой теме
klen решение систем нелинейных уравнений ... Oct 30 2010, 23:20 Danis Мне тоже приходилось заниматься мат. вычислениями ... Oct 31 2010, 09:17 klen Цитата(Danis @ Oct 31 2010, 12:17) Мне то... Oct 31 2010, 10:04  Danis Цитата(klen @ Oct 31 2010, 13:04) на Pic3... Oct 31 2010, 10:32 AlexandrY Цитата(klen @ Oct 31 2010, 01:20) захотел... Oct 31 2010, 10:11 klen Цитата(AlexandrY @ Oct 31 2010, 13:11) А ... Oct 31 2010, 10:40  Danis Цитата(klen @ Oct 31 2010, 13:40) горизон... Oct 31 2010, 10:57    klen http://aravil.livejournal.com/17728.html
С чувств... Oct 31 2010, 15:18     Forger Цитата(klen @ Oct 31 2010, 18:18) класиче... Oct 31 2010, 15:39      klen Цитата(Forger @ Oct 31 2010, 18:39) Вы по... Oct 31 2010, 17:16       Forger Цитата(klen @ Oct 31 2010, 20:16) неправд... Oct 31 2010, 17:59        klen я не могу понять как вы получаете 0,1 градус за ча... Nov 1 2010, 07:59         Serj78 Цитата(klen @ Nov 1 2010, 10:59) >... Nov 1 2010, 09:19         Forger Цитата(klen @ Nov 1 2010, 10:59) я не мог... Nov 1 2010, 09:28     Danis Цитата(Forger @ Oct 31 2010, 18:28) Но эт... Oct 31 2010, 15:38 sinc_func Делал как-то управление для электро-ассистированны... Nov 5 2010, 14:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|