masterspammer (masterspammer) wrote,
masterspammer
masterspammer

Category:

Модель динамика

Как я обещал, публикую немного кода, прежде всего для morontt, но может ещё кому будет интересно.

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

Итак, у нас есть динамик, описаный параметрами Тиля-Смолла:


  • re - сопротивление в омах, не то, которое обычно пишут на динамиках, а то, которое измеряется омметром на постоянном токе - разница бывает значительна, например, у меня много динамиков "на 16 Ом", у которых re ~ 12-13 Ом.

  • bl - произведение магнитной индукции на длину проводника; для нахождения силы Ампера достаточно умножить на значение тока в Амперах;

  • le - эквивалентная индуктивность, измеряется обычно не в генри, а в миллигенри;

  • cms - гибкость подвеса; что такое гибкость - жёсткость наоборот (вот так же, как сопротивление это проводимость наоборт), натурально: cms = 1/k, где k - коэффициент жёсткости/упругости из закона Гука;

  • rms - потери в подвесе;

  • sd - эффективная площадь диффузора; подвес входит в неё частично, так что грубо можно измерить диаметр по середине подвеса и вычислить площадь как площадь круга (а не как конуса); измеряется обычно не в квадратных метрах, а в сантиметрах, однако столь же квадратных;

  • mmd - масса подвижной системы БЕЗ воздуха (с воздухом - mms); как узнать - ну в идеале снять TS-параметры в вакууме, там присоединённая масса воздуха будет нулевой за неимением такового, можно взвесить до сборки, но непонятно, как учитывать вес подвеса, которые так же неполностью должен входить в mmd, как и в sd, а можно просто взять mms, считая, что будет достаточно точно; я собираюсь моделировать воздух отдельно, так что мне нужно именно mmd; обычно измеряется в граммах, а не килограммах.

В формулах ниже считаю, что le, sd и mmd уже приведены в генри, квадратные метры и колограммы соответственно.

Сначала безо всякого моделирования можно найти остальные параметры. Для этого нам потребуются плотность воздуха rho, и скорость звука в нём  - c. Например, 1.2041 кг/м^3 и 343.25 м/с соответственно.

Сразу скажу, что vas обычно измеряют в литрах, а не в кубометрах, как вычисляется ниже; желающие литров могут умножить кубометры на тысячу. M_PI - это просто число пи из math.h.

        double fs = 1 / (2 * M_PI * sqrt(cms * mmd));
        double qes = 2 * M_PI * fs * mmd * re / pow(bl, 2);
        double qms = 2 * M_PI * fs * mmd / rms;
        double qts = (qms * qes) / (qms + qes);
        double vas = rho * pow(c * sd, 2) * cms;

Максимальный импеданс - обычно его измеряют и из него вычисляют добротности, но тут мы вычислим его - и эффективность динамика (или КПД - от 0 до 1, можно умножить на 100 и получить проценты, как правило 1-2%).

        double zmax = re * (1 + qms / qes);
        double eta0 = rho * pow(bl * sd / mmd, 2) / (2 * M_PI * c * re);

Отдача на одном ватте и на напряжении 2.83В.  соответственно:

        double spl1w = 112.1 + 10.0 * log10(eta0);
        double spl283v = spl1w + 10 * log10(8.0 / re);

Дальше моделирование и в вот таких условиях:


  • rout - выходное сопротивление источника;

  • p - атмосферное давление;

Сетка моделирования:


  • dt - длительность шага в секундах;

  • dx - размер "кубика" сетки в метрах;

Состояние динамика на предыдущем шаге (dt сек. назад):


  • x0 - положение (смещение) диффузора;

  • v0 - скорость диффузора;

  • i0 - ток в катушке;

Входные данные:


  • u_in - напряжение источника (без нагрузки);

  • dp0 - разница давлений по разные стороны диффузора (из модели воздуха);

Сначала напряжение и ток (делитель напряжения и закон ома).

        double u = u_in * re / (re + rout);
        double i = u / re;

ЭДС, вызванная силой Лоренца и ЭДС самоиндукции (тут точно есть ошибка, дифур бы решить).

        double eds_lorenz = - bl * speaker->v;
        double eds_l = - le * (i - i0) / dt;

Влияние ЭДС на напряжение и ток.

        i += (eds_lorenz + eds_l) / (re + rout);
        u += (eds_lorenz + eds_l) * rout / (re + rout);

Силы, действующие на диффузор - "мотор", упругость, потери и давление на диффузор, как на поршень.

        double f_bl = bl * i;
        double f_cms = - x0 / cms;
        double f_rms = - rms * v0;
        double f_p = - dp0 * sd;

Равнодействующая сила и вызванное ей ускорение.
        double f = f_bl + f_cms + f_rms + f_p;
        double a = f / mmd;

Теперь динамик сдвигается - на один шаг.
        double v = v0 + a * dt;
        double x = x0 + v * dt;

Вот давление перед диффузором.

        double p0 = p + dp;

Динамик - поршень. Считаю как изменится давление в одном (в каждом) кубике dx*dx*dx

        double p1 = p0 * dx / (dx - (x - x0);
        double dp = p1 - p0;

Теперь dp подаётся в модель воздуха...

Tags: awav, ЗанимательнаяФизика, ФиксикиПокусали
Subscribe

  • От субботы до субботы!

    Шкафчики красиво подвесил - в точности в той конфигурации, как они висели на прошлой их (не нашей!) кухне. Обнаружил небольшой уклон вбок (заметную…

  • TV

    Купил себе два телека. Кинескопный и ЖК. Оба - мелкие автомобильные, как я и хотел. Именно о кинескопном мечтал очень давно, то переставая, то снова…

  • Привился

    (Aka осуществил первую часть корпоративного чипирования). Давно планировал, но не было такой возможности (чтоб не тащиться чёрт-те куда, а чтоб с…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 8 comments