• Как определить массу нагрузки на валу двигателя?

    @4ainik Автор вопроса
    вы не поверите, но при одинаковой мощности (в данном случае моменте открытия симистра) после некоторого момента времени скорость стабилизируется и соответственно ускорение равно 0. Вот в этот момент и можно с определенной долей вероятности определить массу нагрузки.
  • Какой оптимальный размер буфера?

    @4ainik
    d-stream, верное замечание, так то да, данные от HDD обычно пересылаются напрямую с ДИСКА в ОЗУ минуя процессор, занимается этим контроллер DMA это точно так для IDE интерфейса, насчет SATA точно не скажу, но тоже наверняка за это отвечает контроллер. По крайней мере это справедливо для больших блоков данных, но при малых объемах например 1 сектор процессор может и сам считать этот блок без DMA.
  • Как определить массу нагрузки на валу двигателя?

    @4ainik Автор вопроса
    в самом деле, не подвешиваете же вы гири на метровой палке.

    Ржу не могу :) Но кроме шуток, буквально так и будут выглядить измерения.
    Вот графики, нагрузка постоянна, мощности (моменты открытия симистора для каждой кривой одинаковые) и тем не менее довольно заметно, как в правой половине есть существенные изменения скорости (очевидно сетевое напряжение гуляет).
    3c24aac1a9ba477090c7707505aee50d.PNG

    Более подробно тут.
    В чисто математическом подходе получается много неизвестных и вообще много переменных. Склоняюсь к построению экспериментальных графиков с последующей аппроксимацией.
  • Как определить массу нагрузки на валу двигателя?

    @4ainik Автор вопроса
    vaut, когда я учился в институте еще при Петре I, то на ТММ нам рассказывали про то что у двигателя есть КПД (т.е. полезная выходная мощность двигателя = мощность двигателя * КПД двигателя), у механической передачи есть КПД (принимаются потери 1%, 2%, т.е. полезная выходная мощность передачи = полезная выходная мощность двигателя * КПД передачи), и т.п. развивая эту мысль можно сказать, что у любого подшипника даже самого лучшего есть тоже КПД и он увы не 100%, т.е. в каждом узле, в каждой детали существуют потери... И даже если мы рассматриваем супер подшипник какой-нибудь левитационный у которого просто отсутствует трение, все равно массу тела никто не отменял, и чтобы сдвинуть эту массу с места, придать ей движение, нужно совершить определенную работу... А вот дальше требуется совершать работу по поддержанию скорости в данном случае вращения, конечно она меньше чем при придания ускорения, но она все же есть.
    Но задача так не стоит, чтобы углубляться в глубокую теорию, задача довольно банальная и уже решена, т.е. это скорее очередной "велосипед", но свой :) Александр Гусев предложил вариант с построением графика.
  • Как определить массу нагрузки на валу двигателя?

    @4ainik Автор вопроса
    Уже ближе к делу. Сейчас уже есть некоторый набор данных, чуть позже буду анализировать.
    Да симистор открывается в одно и тоже время, поэтому скорость обычно довольно стабильная и измерена.
    Есть графики вот тут.
    Не хотелось бы заморачиваться с измерением тока, тем более с такими вычислениями как среднеквадратичное значение тока, там же ж корень из суммы квадратов...
    Длина плеча постоянна.
    Думаю все же ограничиться одной скоростью, тупо построив график для разных нагрузок.
    Но все же на будущее как выглядит та формула зависимости момента от тока?
    И крутящий момент изменяется при изменении нагрузки на валу?
  • Как настраивать ПИД (PID)?

    @4ainik Автор вопроса
    Алексей Макаренко,
    Кстати, есть еще такой момент - если выход пид-регулятора будет колебаться достаточно быстро, то за счет инерционности нагрузки можно получить как бы "усреднение" воздействия (по аналогии с ШИМ-управлением), эквивалент некоторого промежуточного между двумя ступенями дискретного воздействия.
    да это понятно, что для системы это будет незаметно, а вот двигатель не очень любит такие скачки, да и число логически зачем прыгать то через ступень если расхождение не велико!?
    Интегральная составляющая есть, но влияние ее не велико, даже незначительно это какие-то 0,00001% если не меньше.
    Прелесть этой формулы
    power_level -= pid.update

    в том, что если ПИД регулятор несколько раз подряд говорит нужно прибавить 0.2, то в конечном итоге (int) power_level всеже изменится на 1. Т.е. фактически мощность меняется на то значение на какое указал ПИД, но вот то что реально дробная часть не учитывается это уже другой вопрос.
    Кстати формула
    power_level = zero_power - pid.update

    тоже довольно спорная, что брать за zero_power большой вопрос. Как я уже писал где-то выше, если брать 120 за "ноль", то это не совсем верно, т.к. это маленькая но все же положительная мощность, да ее не достаточно для того чтобы начать крутить двигатель, но она вносит свой вклад в уменьшение трения, сопротивления воздуха и в конечном счете затормаживает торможение, извините за тавтологию :)
    Буду экспериментировать дальше...
  • Как определить массу нагрузки на валу двигателя?

    @4ainik Автор вопроса
    vaut, пусть так, пусть ересь - не суть, важно другое, что есть прямая ну или обратная связь между увеличением массы на валу (инерцией тела если угодно) и уменьшением скорости вращения двигателя/системы при прочих равных условиях, точнее чем больше масса (или чем больше нагружен двигатель) те меньше будет его скорость. Отсюда есть фактические данные:
    1) обороты на хх 120 Об/мин
    2) обороты с дополнительной массой/нагрузкой - 110 об/мин.
    Вопрос: какой массой обладает доп нагрузка? пусть не в кг, так хоть в процентах?
  • Как настраивать ПИД (PID)?

    @4ainik Автор вопроса
    Применил формулу
    power_level = zero_power - pid.update
    и заметил один странный момент на низких оборотах (60 Об/мин) ПИД выдает такое управление, что приводит к большей фактической скорости, т.е. он где-то 64-66 и ниже не хочет опускаться... и в тоже время на высоких оборотах (120-140) с теми же коэффициентами наоборот не дотягивает до цели несколько попугаев, такого не было при формуле
    power_level -= pid.update

    Я догадываюсь о причинах, здесь видимо "ноль" не тот + набегает погрешность вычисления, т.к. скорость это довольно грубая дискретная величина, а управление еще более грубое. Т.е. фактически ПИД говорит нужно убавить 0,2 попугая, а мы можем убавить/прибавить только целого попугая!
    Если анализировать компоненты по отдельности, то значительно скачет пропорциональная компонента, что приводи к скачкам power_level на 2 единицы и в конечном счете система колеблется между двумя значениями скажем 112 и 114, пропуская при этом 113 :) Очевидно нужно уменьшать коэфф. пропорциональной компоненты. Вообще то говоря основной вклад все время вносит именно пропорциональная компонента где-то 99,9999%.
  • Как определить массу нагрузки на валу двигателя?

    @4ainik Автор вопроса
    Не проще) Ни о каких дополнительных датчиках речи не идет, ну максимум датчик тока.
    Точность низкая, все же это не расчет траектории полета ракеты от Земли до Сатурна.
    КПД двигателя не известно,
    на валу может быть "момент", а не "масса"
    на валу и то и другое, двигатель создает крутящий момент, а нагрузка обладает массой и этот момент "осваивает" если так можно выразиться.
    Вот кстати в стиральных машинах иногда вычисляется "загруженность" в процентах.... т.е. типа 20%, 40% .. 100% (при максимальной загрузке в 3кг) 100% это 3кг, 20% это 0,6кг...
  • Я изучаю одно а в колледже другое. что делать?

    @4ainik
    TheMox,
    Ребята, кто нибудь знает можно ли доучиться этот год в колледже и потом сразу же перейти в 11 класс?
    думаю это вопрос лучше задать директору школы, в которой вы хотите учиться...
    вероятно нужно будет сдавать экзамены...
    да и раз новый учебный год только начался, то самое время подсуетиться, возможно будет очень просто восстановиться в школе...
  • Я изучаю одно а в колледже другое. что делать?

    @4ainik
    Толстый Лорри,
    Прикол в том, что в институте все равно будешь учить C++))
    ой не факт
  • Как настраивать ПИД (PID)?

    @4ainik Автор вопроса
    Алексей Макаренко, т.е.
    вот так
    power_level -= pid.update(target_rpm - rpm, rpm);
    вы считаете не верное?

    А нужно так:?
    power_level = MIN_POWER - pid.update(target_rpm - rpm, rpm);


    В первом случае действительно будет иметь место некое накопление, но значение power_level ограничено (108..120). Во втором же случае получится полная ерунда, когда ПИД вернет отрицательное значение... хотя оно все равно будет ограничено рамками. Вообще "переломное" значение где-то 114, при котором начитается движение/ускорение системы, при большем она будет замедляться, при 120 вообще остановится, не сразу конечно, но существенно позднее чем при отключении питания.
  • Как настраивать ПИД (PID)?

    @4ainik Автор вопроса
    в последних 3х графиках 120 это RPM т.е. Обороты в минуту нагрузки т.е. системы, но оно удивительным образом совпало и с начальным значением управляющим воздействием.
    b552bf52bac64625811a235e9d21470e.PNG
    Чем меньше это число, тем раньше открывается симистор, и тем больше мощность/скорость двигателя.
    Если "управляющим воздействием" назвать переменной power_level, то
    ее значение корректируется так power_level -= pid.update(target_rpm - rpm, rpm);
  • Как настраивать ПИД (PID)?

    @4ainik Автор вопроса
    Первый опыт ПИД управления...
    Реализацию контроллера взял отсюда
    Первое приближение только пропорциональная составляющая (коэфф=1). Цель 120 Об/мин.
    2ae5aa9d258f41b4b4186b2339145bae.PNG
    Синий график - управляющий сигнал, розовый - скорость, желтый - сигнал с ПИД. Вообще было много всяких разных попыток осмыслить и прикрутить ПИД и здесь кажется уже правильное направление.
    А вот тут как-то попал пальцем в небо :) Цель та же 120 Об/мин. Пропорциональная (0.1) + дифф (0.5)
    ca656b2c7cb945cdbbf7ac7ad7da866c.png
    Почти идеально, если не считать "вылета" примерно на 10%.

    Проверка на другой скорости. Цель 60 Об/мин. Пропорциональная (0.1) + дифф (0.5)
    accb3a179c884d29a7e991dca21183ce.PNG
    Здесь "перелет" гораздо существеннее более 30% и почему-то "полочка" - превышение 60 Об/мин.
    Вот.
  • Как настраивать ПИД (PID)?

    @4ainik Автор вопроса
    ой, вру. Теоретически шагов/уровней мощности около 150, но эффективный диапазон гораздо уже. Так к примеру система начинает еле-еле вращаться при 114 (синий график), а уже при 108 мы получаем верхний график (цвета запекшейся крови), т.е. всего 6 шагов...
  • Как настраивать ПИД (PID)?

    @4ainik Автор вопроса
    Понятно, что можно параметры загружать динамически, только их еще нужно получить.
    Из параметров, которые можно контролировать:
    1) обратная связь от тахометра
    2) управление моментом включения симистора (но правда небольшой диапазон около 20шагов, что соответствует от 60до 200 Об/мин)
    3) ток в принципе можно, только в какой момент непонятно, да и что это даст? раскрутить систему уже сейчас можно, главное не форсировать обороты, а дальше после набора скорости ток будет не сильно меняться, а то и вовсе убывать
    4) в принципе можно еще пропускать периоды сетевого напряжение, это как компенсация малого количества шагов в п.2
  • За что олдскульные электронщики ругают ардуино?

    @4ainik
    Тимур Хасаншин, хм, да перечитал и действительно звучит несколько двусмысленно...
    Тогда приведу цитату от "@n12eq3"
    всё правильно говорится, с некоторыми оговорками. основные минусы
    1) говнокод. если использовать родное приложение, прошивка получается крайне кривой. отсюда лезет убогость работы по скорости, убогость работы библиотек (совместная работа нескольких), убогость вырастающего на этом кале "программиста", убогость по работе устройства в целом.

    Так наверное будет понятнее: тем предложением я хотел сказать, что согласен с мнением всех высказавшихся, но НЕ согласен с утверждением что ардуина это, как выразился @n12eq3, "кал".