Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заряд емкости, Реализовать программную модель 
:(
    Опции темы
PILOT
Дата 22.2.2004, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: нет
Всего: 54



Есть ли способ в реальном времени реализовать программную модель заряда емкости через резистор. (иными словами экспоненту с заданной постоянной времени). Причем без операции деления и умножения (на крайняк умножение можно, но не нужно, т.к. его придется выполнять программно. Деление не использовать т.к. программное деление выполняется оооочень долго, особенно многобайтное).
Постоянная времени может быть равна, например, минуте.
Нужно в любой момент реального времени остановив заряд узнать какого напряжение на емкости.

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
Chingachguk
Дата 22.2.2004, 08:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 1
Всего: 18



Непонятно... Если это делается на P-120, даже, то неужели так долго ? И вообще если есть аналитическая зависимость U(t)=f(R,C,t), то ее можно вычислить и все, зачем что-то моделировать ? Моделируют обычно если нельзя получить "руками" такую зависимость ? Ну и можно использовать таблицы с плотностью вероятности, заранее вычисленную...


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
PILOT
Дата 22.2.2004, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: нет
Всего: 54



Нет, не на P120 конечно. На контроллере, в котором нет ни умножения ни деления.
А моделировать нужно интегратор(RC-цепь в данном случае) причем так, чтобы он не отличался от настоящей RC-цепи.
На вход подаем напряжение от -10 до +10 Вольт, на выходе имеем экспоненциальные кривые в зависимости от того, как на входе изменяется сигнал, т.е. работа в реальном времени.

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
podval
Дата 22.2.2004, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: 18
Всего: 62



Возьми пакет Matlab, там есть Simulink. Установи и наслаждайся smile.gif
PM WWW ICQ   Вверх
PILOT
Дата 22.2.2004, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: нет
Всего: 54



smile.gif
Если бы мне нужно было бы воспользоваться МатЛабом я бы это сделал и не морочил бы Вам голову smile.gif
Попробую объяснить точнее:

Итак есть схема RC-цепь (интегратор), на нее с другой схемы подается напряжение (от -10Вольт до +10Вольт) которое изменяется от времени U(t).
После интегратора на RC-цепи стоит другая схема, которая получает проинтегрированное значение. Причем она работает только тогда, когда интегрирование происходит по закону интегрирования на RC-цепи.
Т.е. вот так:

[СХЕМА СИГНАЛА] -> [ИНТЕГРАТОР (RC)] -> [СХЕМА ПОЛУЧАТЕЛЬ]

Элементная база не позволяет использовать именно RC-цепь (огромные размеры и вес конденсаторов или большое сопротивление начинает сильно "чувствовать" внешнюю среду).
Я ставлю контроллер, в который я запрограммирую модель RC-цепи (о которой я спрашиваю).
Так вот вопрос:
Есть ли способ реализовать программную модель заряда емкости через резистор в реальном времени. Т.е. так чтобы получатель не почувствовал разницы.

СУВ.


--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
shedon
Дата 22.2.2004, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

Репутация: нет
Всего: 11



Как это зделать без деления я не знаю, но можно попытаться поставить контроллер по быстрее или поставить DSP.


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Crait
Дата 22.2.2004, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: 1
Всего: 1



Приближенно так.

dUc = Ur * (1 - exp(-dT / (R*C))) ,

где dUc - изменение напряжения на емкости за такт работы алгоритма,

Ur - среднее напряжение на резисторе за такт работы.
Можно считать (при достаточно малых квантах) равным Uвх - Uc

dT - величина временнОго такта,
R, C - ну понятно что

Если dT, R, C постоянны,
1 - exp(-dT / (R*C)) = const = K
и не требует вычисления каждый раз. Таким образом,

dUc = Ur * K или

Uc(i+1) = Uc(i) + (Uвх - Uc(i)) * K ,

где Uc(i+1) - напряжение на конденсаторе в следующем такте,
Uc(i) - напряжение на конденсаторе в текущем такте.
PM MAIL   Вверх
Chingachguk
Дата 22.2.2004, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1232
Регистрация: 25.3.2002
Где: Москва

Репутация: 1
Всего: 18



Цитата

(1 - exp(-dT / (R*C))


Ну можна так попробовать. Замечаем, что exp(-t / (R*C) можно рассчитывать таблично.При инициализации грузим заранее расчитанный на PC таблиц подстановки exp(-t/RC) = T(t). Таблицу можно сделать с достаточно небольшим шагом.

Можно в ряд разложить также. Возле нуля это будет хорошо, потом таблица.


--------------------
I don't like the drugs (but the drugs like me). M.Manson.
PM MAIL ICQ   Вверх
PILOT
Дата 22.2.2004, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: нет
Всего: 54



Итак, я к примеру воспользуюсь итерационным методом который предложил Крейт. И к примеру буду пользоваться вордом в качестве Uc. Тогда с условием одни итерация 1мс, RC=50сек:
Uc(i+1)=Uc(i)+(Uвх-Uc(i))*T/t = Uc(i)+(Uвх-Uc(i))*0.0002
учитывая например что за ноль взято $8000, то за 50 секунд с указанной разядностью (word) емкость зарядится несколько сотен раз. Данной точности недостаточно.
При увеличении разрядности резко увеличивается время вычислений (умножение на константу).

Можно ли модифицировать алгоритм так чтобы при 2-х байтной разрядности модель выполняла свои функции?

СУВ.




--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
dm9
Дата 22.2.2004, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Я бы сделал по таблице таким образом (исходисм из того, что постоянная времни = 60 сек): f(t) = 1 - exp (-t/T), T=RC=60сек
1. Время от одной секунды до 400 сек. Здесь надо делать таблицу. Я прикинул по графику, 100-200 точек таблицы дадут неплохую погрешность (ну, хотя если тебе ядерным реактором управлять, то... ну, понятно). Таковой я называю погрешность порядка одного процента (это навскидку). Далее пользуемся разложением по Тейлору. f(t+dt) = f(t) + f'(t)dt, и получаем f(t+dt) = (exp (-t/T))(1/T+dt). Ну... здесь придётся умножить... разок.
2. Первая строка таблицы - точка (0,0). Следовательно, на интервале от нуля до 0,5-1 секунды заменяем экспоненту t на t.

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

Это сообщение отредактировал(а) dm9 - 22.2.2004, 21:43
PM MAIL ICQ   Вверх
dm9
Дата 22.2.2004, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



PS Ну, понятно, что после 400 секунд считаем f(t)=1.
PPS Когда отвечал, твоего сообщения ещё не было.
Вопрос. Что такое "за ноль взято $8000"?
PM MAIL ICQ   Вверх
dm9
Дата 22.2.2004, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Про итерационный метод: через сотню-другую итераций не накопится ли слишком большая погрешность? Или я неправильно понимаю суть метода? Ты рассчитываешь первое значение, затем по первому второе, и так далее?
PM MAIL ICQ   Вверх
Crait
Дата 22.2.2004, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: 1
Всего: 1



Ну во-первых, для приведенных параметров расчета (dT=1mS, RC=50s)
коэффициент K равен 2e-5.
Умножение же на 2e-5 эквивалентно делению на 50000.
Так что при таком подходе от двухбайтового диапазона остаются
рожки да ножки (один значащий разряд).

Выхода два. Либо увеличить шаг по времени,
либо точность представления чисел. Советую второе.

Вот например, для 4-байтного представления 1/50000
можно вычислить так.

1/50000 ~ 1/65536 + 1/262144

Взятие же 1/65536 и 1/262144 долей легко делается с помощью сдвигов
на 16 и потом еще два разряда соответственно.
С сохранением знака, разумеется.
PM MAIL   Вверх
PILOT
Дата 23.2.2004, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


производство
****


Профиль
Группа: Модератор
Сообщений: 2724
Регистрация: 4.4.2002
Где: москва

Репутация: нет
Всего: 54



16777216 (это три байта) / 50000 = 335 ну... не знаю даже...
А для 4-х байтной арифметики совсем уж долго все будет... sad.gif

СУВ.



--------------------
тут могла быть Ваша реклама...
PM MAIL WWW ICQ   Вверх
Crait
Дата 23.2.2004, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 244
Регистрация: 20.2.2003

Репутация: 1
Всего: 1



PILOTIK, что долго ?
1/65536 - это, к примеру, старшие 2 байта 4-байтового числа smile.gif
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1289 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.