вторник, 19 августа 2014 г.

Xcos. Математический маятник

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



Mathematical Operations
ABS_VALUE - возвращает значение входного сигнала по модулю.
BIGSOM_f - суммирование скалярных или векторных сигналов.
COSBLK_f - возвращает косинус входного сигнала.
EXPBLK_m - возвращает экспоненту в степени входящего сигнала.
GAINBLK_f - усиливает сигнал в заданное число раз.
LOGBLK_f - логарифмирует сигнал
MATMAGPHI - раскладывает комплексный сигнал на амплитуду и фазу.
MATZREIM - раскладывает сигнал на действительную и мнимую части.
MAXMIN - возвращает наибольшее или наименьшее значение.
MAX_f - наибольшее значение.
MIN_f - наименьшее значение.
POWBLK_f - возведение сигнала в заданную степень.
PRODUCT - произведение входящих сигналов.
SIGNUM - возвращает +1, если сигнал положительный, -1 если отрицательный и 0 в случае нуля.
SINBLK_f - возвращает синус входящего сигнала.
SQRT - квадратный корень из величины сигнала.
SUM_f - суммирование входных сигналов.
SUMMATION - расширенная функция суммирования, можно задавать знаки и коэффициенты для слагаемых.
TANBLK_f - тангенс входящего сигнала.
TrigFun - блок позволяет выбирать вид тригонометрического преобразования.

Рассмотрим ещё несколько элементов из палитры Continuous time systems.
DERIV - производная входного сигнала по времени.
INTEGRAL_m - интеграл входного сигнала.

Колебания математического маятника описываются уравнением 
y'' = - (w0)^2 * sin(y), где y - угол отклонения от положения равновесия, w0 - круговая частота. Обычно угол у мал, поэтому предполагается sin(y) ~ y. Но интересно посмотреть, что будет, если данное условие не выполняется. Для этого построим следующую схему.
Чтобы получить y (угол отклонения) мы дважды интегрируем его вторую производную (INTEGRAL_m). Затем вычисляем синус (SINBLK_f), умножаем на круговую частоту со знаком "-" (GAINBLK_f) и подаём на вход системы. Развернуть стандартный элемент можно через меню Format - Mirror. Для визуализации используются блоки CMSCOPE (угол отклонения y и ускорение y''), а также CSCOPXY (фазовый портрет - зависимость скорости y' от угла y). В настройках времени моделирование установим 30 с. 

Если сейчас запустить Run, мы увидим на графике прямые линии (а в фазе - точку). Необходимо задать угол начального отклонения маятника. Не уверен, что поступил правильно, но я указал его в поле Block Parameters - Initial Condition первого интегратора. Вообще, изменяя круговую частоту и начальный угол можно наблюдать разные режимы, как устойчивые, так и неустойчивые. При -w0^2 = -0.3 и y0 = 1 были получены следующие графики:
амплитуда
фаза

P.S. Поразмыслив немного, я понял, что ошибся: начальное значение первого интегратора определяет скорость, а угол устанавливается во втором интеграторе. Это следует из того, что размерности интеграла и его начального значения должны совпадать, т.е. для первого блока имеем рад/с, для второго - рад.  

Комментариев нет:

Отправить комментарий