|
решение систем нелинейных уравнений ..., ... на микроконтроллере :) |
|
|
|
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, 09:17
|

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
|
|
|
|
|
Oct 31 2010, 10:04
|

бессмертным стать можно тремя способами
    
Группа: Свой
Сообщений: 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 не попадал, но прийдет время и ....
|
|
|
|
|
Oct 31 2010, 10:32
|

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
|
|
|
|
|
Oct 31 2010, 10:40
|

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

|
Цитата(AlexandrY @ Oct 31 2010, 13:11)  А чем там в стирлинге можно управлять? И какая конструкция имеется в виду. Проверка решения как-то делается? фазовым углом, отношением объемов, среднеиндикаторным давлением гелия в движке. это типо исследования на заданную тему, ничего пока практического и серьезного. хочется приложится к этой теме с подходом в виде управления поршнями от электомагнитами и имиже снимать мощность. от механики избавится. проверка делается простая - зарание расчитан минимальная дельта по фазе процесса, в пределах которой решение с предыдущими значениями гарантировано сходится, при тех условиях что у меня (при тех уравнениях) это работает при любых входных начальных условиях из их возможного диапазона P,V,m - положительные величины. а вообще вопрос правильный, векторов корней системы то может быть много или вообще не быть или быть бесконечно много, а интересует именно один набор обычно - как проверять это вопрос специальный. 2_Danis тоже периодически занимаюсь ИНСкой, только у меня ничего не получается - гироскопы и акселерометры тредротелные, тоесть мерим только первую производную от углового положения, далее мраки получаются.. горизонт без дополнительного канала(а лучше чтоб их много и разных) коррекции никак не получить. а у вас как это решается? еслиб только в вычислениях проблема была б...эх.
|
|
|
|
|
Oct 31 2010, 10:57
|

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

|
Цитата(klen @ Oct 31 2010, 13:40)  горизонт без дополнительного канала(а лучше чтоб их много и разных) коррекции никак не получить. а у вас как это решается? еслиб только в вычислениях проблема была б...эх. Надеюсь, модераторы не будут ругаться за Оффтопик... Все-таки у нас дополнительный канал предполагается, это у нас будет глонасс и GPS.
Сообщение отредактировал Danis - Oct 31 2010, 10:58
--------------------
Magic Friend
|
|
|
|
|
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:18
|

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

|
http://aravil.livejournal.com/17728.html С чувством патриотизма переплотил бы максиму 1,5 цены, но на порядок.... [/quote] наверно он будет в радиацонно стойком керамическом корпусе с позолотой, вот и цена + наша промышленность серийно может только жигули выпускать(првда это не сдело ее автомобилем) 2_Forger класический фильтр калмана неработоспособен в принципе. во первых белых шумов не бывает, во вторых уравнение Рикатти для весов невязок дает експоненциально уменьшающиеся веса и фильтр начинает работать по заложенной модели и меньше использует коррекцию по свходным сигналам - эго можно понять, он ведб думает что он уже "словил" фазу процесса и входные данные уже не несут информации. короче без костылей это только для демострации методов синтеза фильтов. вы чтото недоговариваете. а поделится алгоритмами можете - я тоже БИНС хочу сделать на MEMS датчиках - авиагоризонт нужен как воздух для дыхания.
|
|
|
|
|
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)  наверно он будет в радиацонно стойком керамическом корпусе с позолотой, вот и цена + наша промышленность серийно может только жигули выпускать(првда это не сдело ее автомобилем) Как признавался глава Миландра в одной из статей в одном уважаемомом журнале (по моей памяти): у нас в стране не выгодно работать на ширпотреб, т.е. на бытовуху. Но этот проц. прошел военную приемку......
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|