реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> решение систем нелинейных уравнений ..., ... на микроконтроллере :)
klen
сообщение Oct 30 2010, 23:20
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 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, стек мерил тоже её же стредсвами для стека задачи. по мойму не плохо, можно еще библу отоптимизировать - без приборов по коду видно что писали не проф.программеры а математики - никагого понятия об таких вещах как стек, озу, архитектура и тд, но оно им и неадабыло smile.gif

так мы мучим наши микросхемки на древний русский народный празник хеллуин smile.gif

вот, решил поделится празничным настроением.
Go to the top of the page
 
+Quote Post
Danis
сообщение Oct 31 2010, 09:17
Сообщение #2


Twilight Zone
***

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



Мне тоже приходилось заниматься мат. вычислениями на микроконтроллерах. В проекте нужно было выполнить интерполяцию Лагранжа, в моем случае нужно было по 5-ти точкам построить кривую. Сначала сделал на PIC24H( 40 MIPS, 16 бит), функция считала это 1,8 ms, потом сделал это на dsPIC, уложился в 1 ms. Потом в руки попался Cortex M3 (STM32), там время на тоже заняло 0.2 ms, вот это и подкупило меня, теперь про PIC почти забыл уже, разве что старые проекты поддерживаю.

Сообщение отредактировал Danis - Oct 31 2010, 10:27


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 31 2010, 10:04
Сообщение #3


бессмертным стать можно тремя способами
*****

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



Цитата(Danis @ Oct 31 2010, 12:17) *
Мне тоже приходилось заниматься мат. вычислениями на микроконтроллерах. В проекте нужно было выполнить интерполяцию Лагранжа, в моем случае нужно было по 5-ти точкам построить кривую. Сначала сделал на PIC24H( 40 MIPS, 16 бит), функция считала это 1,8 ms, потом сделал это на dsPIC, уложился в 1 ms. Потом в руки попался Cortex M3 (STM32), там время на тоже заняло 0.2 ms, вот это и подкупило меня, теперь про PIC почты забыл уже, разве что старые проекты поддерживаю.

на Pic32 будет еще быстрее - там ядро нормальное.
а на Cortex M4F еще веселей, там FPU есть, только вот в руки мне еще никто из Cortex M4F не попадал, но прийдет время и ....
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 31 2010, 10:11
Сообщение #4


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(klen @ Oct 31 2010, 01:20) *
захотелось такое, зауправлять двигателем стирлинга.


А чем там в стирлинге можно управлять?
И какая конструкция имеется в виду.
Проверка решения как-то делается?
Go to the top of the page
 
+Quote Post
Danis
сообщение Oct 31 2010, 10:32
Сообщение #5


Twilight Zone
***

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



Цитата(klen @ Oct 31 2010, 13:04) *
на Pic32 будет еще быстрее - там ядро нормальное.


Вот я сейчас думаю, у меня проект на носу, связанный с использованием гироскопов и акселерометров в системе контроля и навигации. А там этих систем уравнений., формул и прочего мат. аппарата выше «крыши», я и думаю, какой чип поставить. PIC32 конечно хорош, но не думаю что с Cortex-M3, тем более M4 соперничать сможет. Хочется, конечно, что то из разряда 400MHz, а там корпуса BGA, пока такие еще не использовал.


Цитата(klen @ Oct 31 2010, 13:04) *
но прийдет время и ....

http://www.arm.com/products/processors/cor.../cortex-a15.php

Сообщение отредактировал Danis - Oct 31 2010, 10:36


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 31 2010, 10:40
Сообщение #6


бессмертным стать можно тремя способами
*****

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



Цитата(AlexandrY @ Oct 31 2010, 13:11) *
А чем там в стирлинге можно управлять?
И какая конструкция имеется в виду.
Проверка решения как-то делается?

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

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

2_Danis
тоже периодически занимаюсь ИНСкой, только у меня ничего не получается - гироскопы и акселерометры тредротелные, тоесть мерим только первую производную от углового положения, далее мраки получаются.. горизонт без дополнительного канала(а лучше чтоб их много и разных) коррекции никак не получить. а у вас как это решается? еслиб только в вычислениях проблема была б...эх.
Go to the top of the page
 
+Quote Post
Danis
сообщение Oct 31 2010, 10:57
Сообщение #7


Twilight Zone
***

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



Цитата(klen @ Oct 31 2010, 13:40) *
горизонт без дополнительного канала(а лучше чтоб их много и разных) коррекции никак не получить. а у вас как это решается? еслиб только в вычислениях проблема была б...эх.


Надеюсь, модераторы не будут ругаться за Оффтопик...
Все-таки у нас дополнительный канал предполагается, это у нас будет глонасс и GPS.

Сообщение отредактировал Danis - Oct 31 2010, 10:58


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
Forger
сообщение Oct 31 2010, 13:14
Сообщение #8


Профессионал
*****

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



Для сравнения: мы в своем изделии - стабилизация движущейся в пространстве платформы - использовали фильтр Кальмана
У нас два датчика обратной связи - МЭМС гироском и акселерометр. А какому датчику больше верить - тут вводятся коэффициенты степени доверия каждому датчику, которые тоже являются функцией значения с датчиков.
Например, при движении (не повороте) платформы врет акселерометр, а гироскоп врет из-за накапливающейся ошибки интегрирования, т.к. дает скорость вращения, а нам нужен угол наклона.

В итоге, все свелось к работе с квадратными матрицами 3x3 - работает на удивление быстро.
По сути, принцип его работы - это работа с системой уравнений, но более обобщенный.
Тут главное - как можно точнее воссоздать модель поведения, а оттуда уже просто получить соотв. коэффициенты.

Фильтр работает изумительно - сходится при самых невозможных входных данных, т.е. нет самовозбуждения в отличие от банального ПИД регулятора. Подстройка сводится к достижению наилучшей скорости реакции.

И самое важное отличие фильтра Кальмана от большинства других цифровых фильтров - у него нет задержки во времени. Т.е. фильтр Кальмана - это фильтр с предсказанием. На практике так и есть - мгновенная реакция на любые изменения на входах.

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


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Oct 31 2010, 14:16
Сообщение #9


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Forger @ Oct 31 2010, 15:14) *
Фильтр работает изумительно - сходится при самых невозможных входных данных, т.е. нет самовозбуждения в отличие от банального ПИД регулятора. Подстройка сводится к достижению наилучшей скорости реакции.


Ну так на каком типе ARM-ов реализовали, с какой скоростью велись вычисления или какая была загрузка проца, на каких типах данных, какова была частота выборки, какую скорость реакции достигли и какое было максимально разрегулирование?
Вообщем ближе к теме не могли бы?
Go to the top of the page
 
+Quote Post
Forger
сообщение Oct 31 2010, 14:33
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 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 Гц
Цитата
какую скорость реакции достигли

нулевую smile.gif на самом деле, задержку вносит сама механика устройства
Цитата
и какое было максимально разрегулирование?

перерегулирование не выходит за допуск по Т.З:
в динамике - до 0,2 градуса и в статике - до 0,1 градуса.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Danis
сообщение Oct 31 2010, 15:01
Сообщение #11


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
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 31 2010, 15:18
Сообщение #12


бессмертным стать можно тремя способами
*****

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



http://aravil.livejournal.com/17728.html
С чувством патриотизма переплотил бы максиму 1,5 цены, но на порядок....
[/quote]

наверно он будет в радиацонно стойком керамическом корпусе с позолотой, вот и цена + наша промышленность серийно может только жигули выпускать(првда это не сдело ее автомобилем)

2_Forger
класический фильтр калмана неработоспособен в принципе. во первых белых шумов не бывает, во вторых уравнение Рикатти для весов невязок дает експоненциально уменьшающиеся веса и фильтр начинает работать по заложенной модели и меньше использует коррекцию по свходным сигналам - эго можно понять, он ведб думает что он уже "словил" фазу процесса и входные данные уже не несут информации. короче без костылей это только для демострации методов синтеза фильтов. вы чтото недоговариваете. а поделится алгоритмами можете - я тоже БИНС хочу сделать на MEMS датчиках - авиагоризонт нужен как воздух для дыхания.
Go to the top of the page
 
+Quote Post
Forger
сообщение Oct 31 2010, 15:28
Сообщение #13


Профессионал
*****

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



Цитата(Danis @ Oct 31 2010, 18:01) *
Интересненько, вот это 1986ВЕ91?

Да.

Цитата
У вас есть уже наработки с данным процессором?

Нет, но это не имеет значения.

Цитата
Моделировали ли вы свою систему на ПК?

Да, именно с этого начали.

Цитата
"цена нашего МК будет, как минимум, на порядок выше цен западных аналогов"

Это не имеет значения.... smile.gif


Цитата(klen @ Oct 31 2010, 18:18) *
наверно он будет в радиацонно стойком керамическом корпусе с позолотой, вот и цена + наша промышленность серийно может только жигули выпускать(првда это не сдело ее автомобилем)


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

Но этот проц. прошел военную приемку......


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Danis
сообщение Oct 31 2010, 15:38
Сообщение #14


Twilight Zone
***

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



Цитата(Forger @ Oct 31 2010, 18:28) *
Но этот проц. прошел военную приемку......

Вспоминаю статью в одном из радиожурналов: транзистор 2Т отличаются от КТ, тем что предназначены для военного использования (с военной приемкой если более точно). Потом приписка: 2T на полках магазина, это то, что забраковали военные… Но я конечно рад, что наши наконец проц. создали здравый.

Сообщение отредактировал Danis - Oct 31 2010, 15:39


--------------------
Magic Friend
Go to the top of the page
 
+Quote Post
Forger
сообщение Oct 31 2010, 15:39
Сообщение #15


Профессионал
*****

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



Цитата(klen @ Oct 31 2010, 18:18) *
класический фильтр калмана неработоспособен в принципе. во первых белых шумов не бывает, во вторых уравнение Рикатти для весов невязок дает експоненциально уменьшающиеся веса и фильтр начинает работать по заложенной модели и меньше использует коррекцию по свходным сигналам - эго можно понять, он ведб думает что он уже "словил" фазу процесса и входные данные уже не несут информации. короче без костылей это только для демострации методов синтеза фильтов. вы чтото недоговариваете. а поделится алгоритмами можете - я тоже БИНС хочу сделать на MEMS датчиках - авиагоризонт нужен как воздух для дыхания.


Вы поищите в сети по радиоуправляемым моделям, например, вертолетов с подобной моделью. на том же youtube
У них все работает как надо: МЭМС гироскоп + МЭМС акселерометр....



--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 23:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01536 секунд с 7
ELECTRONIX ©2004-2016