Постановка задачи


Есть двигатель постоянного тока. Задача — разработать, собрать и протестировать устройство, позволяющиее реализовать контур тока применительно к этому двигателю. Желаемое время переходного процесса на застопоренном двигателе (без противо-ЭДС) — не более 10мс. Интерфес связи с внешним управляющим контроллером — SPI.

Двигатель постоянного тока, коллекторный, максимальное напряжение 24В, рабочий ток до 5А.

Что значит — контур тока? Самые распространённые драйверы для управления двигателями это всякие вариации полумостов, которые усиливают напряжение. А мне хочется, чтобы драйвер брал на вход не напряжение, а силу тока. Сила, развиваемая электроприводом, прямо пропорциональна силе протекающего тока. А значит, и прямо пропорциональна ускорению на валу двигателя. Такой контур тока позволит избежать извращений, на которые нужно идти без него, как я это делал тут.

Я разбил этот текст на две статьи (вторая будет опубликована через несколько дней):

  • 1. Измерение сопротивления и индуктивности двигателя
  • 2. Разработка управляющего контура (скоро будет, оставайтесь на связи)

Вот так выглядит макет управляющего железа:



Железо


В состав системы будут входить:

  • Силовая микросхема ключей, принимающая входной PWM сигнал и усиливающая его.
  • Датчик тока.
  • Управляющий микроконтроллер, реализующий обратную связь и закон управления.

Силовой драйвер


В качестве силового драйвера выбрана широкодоступная плата ($18) от Pololu на базе микросхемы Freescale MC33926, максимальная частота ШИМ 20кГц, 5А в пике, коммутируемое напряжение от 5 до 28 вольт.

Этот чип был взят за его возможность измерения абсолютной величины протекающего тока, которая в итоге не была использована. Таким образом, можно немного сэкономить, взяв более дешёвый драйвер со схожими характеристиками.

Датчик тока и его проверка


В качестве датчка тока выбран датчик Холла Allegro ACS714 ($3), выдающий аналоговый сигнал с центром в 2.5В и 185мВ/А, типичная ошибка 1.5%. На датчик была добавлена RC-цепочка в качестве фильтра низких частот с частотой среза 16кГц.

Датчик тока был запитан от 4.96В источника, последовательно с датчиком был подключен резистор, через который было пропущено 2А. Теоретическое напряжение на выходном пине должно быть 4.96/2 + (2 * 0.185 +- 1.5%), измерение показало 2.84 В, что укладывается в расчётные параметры. Затем было поменяно направление течения тока через резистор, при -2А измеренное напряжение на выходном пине датчика составило 2.11В, что опять укладывается в расчётные параметры:



Эта проверка была необходима, т.к. я купил несколько макеток с ACS712 и ACS714 от разных производителей, и в параметры даташита попал только один!

Микроконтроллер


В качестве управляющего микроконтроллера выбран ATMega328p, работающий на частоте 16МГц. Обвязка микроконтроллера — китайский клон Arduino Nano v3 ($1.5).

Микроконтроллер генерирует ШИМ сигнал через восьмибитный счётчик с делителем 8, таким образом, частота ШИМ сигнала 16 * 10^6 /255 /8 = 7.8 кГц, что укладывается в максимально доступные для драйвера 20кГц.

Делитель АЦП микроконтроллера установлен на 128; поскольку каждое измерение требует примерно 13 тактов, максимальная частота измерений протекающего тока равна примерно 16 * 10^6 / 128 / 13 = 9.6 кГц. Измерения производятся в фоновом режиме, извещая основную программу об окончании при помощи вызова соответствующего прерывания.

Логи


Я долго бился над тем, как записывать происходящее внтри микроконтроллера, ведь памяти у него совсем немного. В итоге я обнаружил, что родной SPI интерфейс очень быстрый, и в итоге вся отладочная информация передаётся микроконтроллером по интерфейсу SPI, для её записи был применён широкодоступный ($10 на дилэкстриме, $6 на алиэкспрессе) китайский клон логического анализатора Saelae Pro 8 Logic. После совсем нетрудных манипуляций по перепрошивке VID/PID, он может быть использован с родным софтом от Saelae. Я пользуюсь sigrok (pulseview). У него исключительно простой формат лог-файлов, которые я просто читаю своей самописной программкой в пятьдесят строк. Я купил этот анализатор по совету gbg, который мне дистанционно чинил мой спектрум (спасибо тебе огромное!), и считаю это самым выгодным вложением денег за последние два года.

Например, я подал синусоидальный сигнал (в ШИМ) на выход контроллера, и логический анализатор его прекрасно видит:



Всё это было соединено вместе, фотография дана в заголовке поста.

Лирическое отступление


Практически все статьи, что я размещаю здесь, являются моим рабочим дневником. Я чему-то учусь (в данном случае теории управления) и старательно записываю то, что узнал. Лучший способ записать — это написать объяснение того, как это всё работает. Затем статьи выкладываю на разных площадках, например тут.

Целей при написании текста у меня две:

а) получить обратную связь от людей, которые знают больше меня. Например, практически всё, что я узнал для данных двух статей, мне рассказал уважаемый Arastas, прошу любить и жаловать: человек, который тратит личное время на обучение таких оболтусов, как я.

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

б) просто записать: таким образом я получаю библиотеку личного опыта, к которой периодически возвращаюсь. Кстати, тематические медиа, какой процент авторов соглашаются на ваши условия программы поддержки?

Необходимый ликбез


Преобразование Фурье


Первое, что нужно понять, читая мои тексты: я считаю, что функция и вектор — это одно и то же. Все разговоры про бесконечности на меня навевают скуку и заслоняют суть происходящего. Обобщённые функции и тому подобное — это способ рассмотреть патологические случаи используя тот же самый язык, что и случаи, где никаких патологий нет. Вот только патологии меня не интересуют.

На эту тему хорошо высказался Валерии? Иванович Опои?цев (Босс):

В любой области полезно оказаться в подходящей среде устного общения, где осыпается книжная шелуха. Там иногда ничего не меняется по сути, зато возникает чувство попадания в колею и освобождения от догм. Для науки, которая всегда в маске, это особенно важно. Суть за кадром, перед глазами — кружева. И вечно чего-то не хватает. То простоты, то сложности, да точно и не определишь — чего. Что-то куда-то шагает, ты — на обочине, а время уходит в песок, не говоря о жизни.

Далее предпринимается попытка сдвинуть ситуацию с места, моделируя письменную среду, где «спадают покровы». Внешняя канва содержания более-менее неясна из оглавления, но главная цель — та, что за кадром. Снять вуаль, грим, убрать декорации. Переупростить, даже приврать слегка, ибо дозирование правды — краеугольный камень объяснения. Результаты, перегруженные деталями, не пролезают куда надо. Озарение случается, когда пухнущая голова проваливается на уровень «дважды два», в то время как счет идет на миллионы. Такая уж тут диалектика.

Если у нас есть вектор (7,12,18,-2), то его можно рассматривать как набор коэффициентов во взвешенной сумме. 7*(1,0,0,0) + 12*(0,1,0,0) + 18*(0,0,1,0) + (-2)*(0,0,0,1). Ровно так же можно считать этот вектор значениями функции в точках 0, 1, 2, 3, ведь наши векторы (0,1,0,0) и ему подобные можно рассматривать как сдвиг единичного импульса:


Если постоянно увеличивать количество векторов (сдвинутых единичных импуьсов) в базисе, то получим обычные функции.

К сожалению, с таким базисом бывает довольно неудобно работать. Давайте рассмотрим следующую функцию в качестве примера:


Мы уже беседовали о том, что такое преобразование Фурье. Если кратко, то это смена базиса.

В нашем случае преобразование Фурье — это функция из вещественных чисел в комплексные:


Аргумент функции (вещественное число) — это просто номер базисной функции или вектора (на самом деле, пары базисных функций), а её значение — это соответствующая (пара) координат в для этих двух векторов в базисе. Базис Фурье — это синусы и косинусы различных частот. Частота и является номером базисной функции.

Для нашей конкретной функции f(t), которая уже являетя взвешенной суммой синуса и косинуса, очень легко посчитать её разложение в базис Фурье:


То есть, наша функция f(t) имеет нулевые координаты для всех векторов базиса, кроме векторов номер 11 и 41.

Чем полезен базис Фурье? Например тем, что операция дифференцирования линейно преобразует этот базис. Допустим, мы хотим посчитать преобразование Фурье от производной f'(t). Как это сделать? Как вариант, в лоб: сначала посчитать производную, а затем посчитать преобразование Фурье:


Очевидно, что при дифференцировании sin(x) он станет sin(x+90°), то есть крайне легко найти соответствие разложение в базис Фурье исходной функции и её производной:


Умножение на i — это просто поворот комплексной плоскости, который соответствует +90° в аргументе нашей функции. То есть, операция дифференцирования, которую сложно делать в базисе единичных импульсов, в базисе Фурье — это просто масштабирование и поворот на 90 градусов. Красиво, правда?

Преобразование Лапласа


Примерно та же самая история происходит и с преобразованием Лапласа. К сожалению, в отличие от базиса Фурье, базис Лапласа неортогонален, поэтому для интуитивного понимания чуточку более сложен. Ну да не суть. Лаплас пошёл немного дальше. Если у Фурье в базисе были только синусоиды, то у Лапласа в базисе синусоиды с экспоненциальным затуханием. Откуда он их взял? Это крайне, крайне полезно при решении линейных дифференциальных уравнений. Давайте подумаем, какая функция преобразуется сама в себя при дифференцировании? Экспонента. А при дифференцировании два раза? Синус. А их комбинации дают все возможные функции, которые могут появиться при решении (линейных) диффуров, что и использовал маркиз дё Лаплас.

Не будем вдаваться в подробности того, как выводятся эти свойства (лучше рассмотрите внимательно свойства базиса Фурье, он проще), давайте просто отметим следующие факты:

1. Преобразование Лапласа линейно:


2. Преобразование Лапласа производной — это аффинное действие над преобразованием самой функции:
3.

Переходим непосредственно к делу


Итак, если у нас есть двигатель постоянного тока, то протекающий ток I(t) и напряжение на клеммах U(t) связаны следующим дифференциальным уравнением, где w(t) — это скорость вращения вала двигателя:


Здесь L — это индуктивность, а R — сопротивление, которые мы и ищем. Я не буду повторять, откуда вылезает этот диффур, так как уже подробно и на пальцах его расписывал (см. «уравнения Максвелла на пальцах»).

Поскольку наша задача найти L и R, давайте жёстко зафиксируем вал двигателя, таким образом заставив w(t) быть нулевой:


По совету Arastas я подал два типа сигналов на мой двигатель: меандр и синусоиду. Затем я измерил протекающий ток, картинка получается примерно следующая:



Здесь синие кривые — это входное напряжение, котороя я контролирую, а зелёные — это измерения силы тока, полученные при помощи ACS714.

Мой микроконтроллерный код, который генерирует 11 экспериментов с меандром и синусоидами различных амплитуд и частот, можно посмотреть здесь.

Давайте решим наше дифференциальное уравнение для обоих типов сигнала напряжения, получим параметрический выходной сигнал силы тока, и подберём параметры, чтобы теоретическая кривая как можно лучше аппроксимировала реальные измерения.

Входной сигнал — функция Хэвисайда (полупериод меандра)


Итак, w(t) = 0, начальные условия I(0) = 0, ток в самом начале не течёт. Приложим постоянное напряжение U0 к клеммам мотора, как себя должен будет вести протекающий ток?

Давайте возьмём преобразование Лапласа от левой и правой частей дифференциального уравнения (1):


Для получения второй строчки я использовал линейность преобразования Лапласа, U0/s — взял из таблицы (обычно преобразования Лапласа вручную не считают, пользуются таблицами).

Для получения третьей строки использовано свойство производной.

Последняя строчка получается из предпоследней использованием метода неопределённых декомпозиций. Смысл этого перехода в том, чтобы опять получить табличную функцию. Разумеется, в двадцать первом веке руками это считать ни к чему.

Теперь осталось применить обратное преобразование Лапласа (для правой части мы смотрим таблицу) и мы решили наш диффур. Переход в базис Лапласа превратил дифференциальное уравнение в обычное алгебраическое!


Быстрая проверка результата: по истечении нескольких миллисекунд индуктивность уже не будет играть роли, и мы получим протекающий ток U_0 / R (закон Ома). В самом же начале протекающий ток равен нулю и экспоненциально возрастает, причём скорость возрастания напрямую зависит от индуктивности. Sanity check passed.

Файл с измерениями лежит здесь. Три колонки, секунды, приложенное напряжение (в вольтах), измеренная сила тока (в амперах).

Вот код, который подбирает параметры сопротивления и индуктивности для этого эксперимента:

Скрытый текст
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

U0 = 19.2

def unit_step_current(x, R, L):
    return [U0/R - U0/R*np.exp(-t*R/L) for t in x]

data = np.genfromtxt('unit_step_19.2V.csv', delimiter=',', names=['t', 'V', 'A'])

[R, L] = curve_fit(unit_step_current, data['t'], data['A'])[0]
print(R, L)

fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)

ax1.set_title("Resistance/inductance fitting")
ax1.set_xlabel('Time, seconds')
ax1.set_ylabel('Current (A), tension (V)')

ax1.plot(data['t'], data['V'], color='b', label='input tension')
ax1.plot(data['t'], data['A'], color='g', label='measured current')
model=unit_step_current(data['t'], R, L)
ax1.plot(data['t'], model, color='r', label='fitted curve')
ax1.legend()

plt.show()


Он говорит, что хорошо подходит пара R=4.4 Ома, L=6мГенри, вот график:

Входной сигнал — синус


Повторим процедуру для синусоиды напряжения с амплитудой U0 и частотой F0. Применим преобразование Лапласа к уравнению (1), сначала к правой части:


а потом и к левой:


Теперь обратное преобразование нам даст следующий закон протекания тока:


Опять быстрый sanity check: нулевой ток в самом начале, несколько миллисекунд переходных процессов (экспонента, напрямую зависящая от индуктивности). По истечению некоторого времени протекающий ток — это взвешенная сумма синуса и косинуса одной и той же частоты (частота равна входной, это хорошо). Эта сумма даёт синусоиду, чуть сдвинутую во времени. Отлично, результат правдоподобен.

Измерения лежат здесь, а код подбора параметров тут. Он даёт примерно такие же значения сопротивления и индуктивности, что нам и требовалось. Вот график:

Заключение


Почему не измерить параметры напрямую, зачем весь этот огород с микроконтроллерами? Во-первых, мне нечем измерять индуктивность. Да и измерение сопротивления двигателя омметром может иметь свои нюансы.

Далее, параметры, найденные при высокой амплитуде сигнала, не совсем совпадают с тем, что получается при низких напряжениях. Может быть интересно (тут не рассмотрено) делать модель не только двигателя, а всей системы в целом, включая нелинейность ШИМ-драйвера.

Ну а дальше осталось разработать регулятор, который будет на вход брать необходимую силу тока. Оставайтесь на связи!
Поделиться с друзьями
-->

Комментарии (53)


  1. Vcoderlab
    06.11.2016 21:30

    Я конечно извиняюсь, но… зачем весь этот матан для измерения элементарных величин?

    Говорите, измерения при малых токах некорректны… Ну ок, что мешает подать в движок пару ампер от изображённого на фото источника и измерить падение напряжения изображённым на том же фото мультиметром? А для измерения индуктивности — подать хоть те же 50 Гц из розетки с лампочкой в роли ограничителя тока и опять-таки измерить падение напряжения?


    1. haqreu
      06.11.2016 21:30
      +2

      Мне этот матан пригодится в следующей части, когда без диффура уже никуда. Да и потом, я ж говорю, что я учусь. А понимать природу происходящих процессов важно. Кроме того, с моей специальностью мне матан гораздо проще работы с розеткой и лампочкой :)


      1. user343
        06.11.2016 22:47
        +1

        Природа процессов такова, что коллекторный узел:
        1) ненадёжен
        2) вращается, искрит и генерит тучу помех.
        Индуктивность меняется скачками от угла поворота. На вход таких двигателей часто вешают конденсатор. Может этот замер L_ротора+R_щёточного_узла+R_электродуги и не сильно нужен?

        По-моему велосипед изобретен уже.
        Тут ключевые параметры управления — ток и обороты вала:
        http://vedder.se/2015/01/vesc-open-source-esc/

        А у вас даже тахометра нет. Слишком сферически-вакуумная математика получается. Механическая нагрузка на валу не учтена никак, на таком луноходе(?) далеко не уедете :)


        1. haqreu
          06.11.2016 22:51
          +1

          Есть у меня тахометр. Ноль оборотов в секунду называется. Собственно, речь идёт о настройке контура тока. Когда мотор будет крутиться, уж его энкодер (который, к слову, виден на фото) я так и быть, включу в схему.


          1. user343
            06.11.2016 23:06

            Обрисуйте задачу подробнее.
            Посмотрите картинки по моей ссылке. Велосипед придуман и ездит.
            Переделка на коллекторный двигатель проста.

            А иногда для управления каким-либо органом робота достаточно концевого выключателя.
            Доехал манипулятор до упора — двигатель выключается. Защита ДПТ от перегрузок — плавкой вставкой или электронным предохранителем на 2-х транзисторах.
            Роботы и 50 лет назад функционировали без столь подробного «матана» и ардуин — волшебством наверное :)


            1. haqreu
              06.11.2016 23:12

              То, что у вас по ссылке, это явный оверкилл для меня. Мне нужно просто уметь задать силу тока, протекающую через двигатель, это всё. Как стандартный H-bridge, который задаёт напряжение, мне нужно то же самое, но с током. Концевики не устроят :)

              Снятие данных с энкодера и т.п. не нужно для управления силой тока, это будет обрабатываться в других местах для других целей.


              1. user343
                07.11.2016 00:01

                H-bridge не задает напряжение или силу тока, а только полярность и вкл/выкл. Остальное — задачи схемы управления с датчиками.
                Есть такой хороший документ
                AN-380
                «How to drive DC motors with smart power ICs by Herbert Sax»
                www.st.com/resource/en/application_note/cd00003758.pdf
                На стр. 6 — сводная таблица методов получения скорости.
                К которому из них ваша идея относится?

                Вы хоть не шаговый двигатель пытаетесь делать из коллекторного?


                1. haqreu
                  07.11.2016 00:10

                  Нет, не шаговый :) H-bridge, конечно, делает вкл-выкл. Только скормив ему ШИМ на вход, и учитывая индуктивность двигателя, получим плавное изменение тока, как если бы мы плавно меняли напряжение.

                  В контуре тока у меня не будет измерения скорости. То, что я пытаюсь сделать, будет называться по-английски closed loop torque control. Мне нужно контролировать не скорость, как в этом документе, а ускорение.


                  1. user343
                    07.11.2016 13:57

                    >получим плавное изменение тока, как если бы мы плавно меняли напряжение.

                    Который раз вы это уже пишете, но ток через индуктивность в принципе не может меняться резко. По первому закону коммутации.

                    >torque control
                    это крутящий момент.
                    Угловое ускорение вала ДПТ зависит от механич. нагрузки и её инерции, смысла мало на него опираться. Разве что вести учёт загустевания смазки узлов от времени.

                    Измерительную линейку поставьте что ли. В сканерах и матричных принтерах всё это решалось десятилетия назад дешевле — шаговиками и зубчатыми ремнями.

                    По-моему «оверкилл» вся эта ваша разработка. Математическое упражнение-игра, попытка забивать гвозди микроскопом (или извлекать корни растений математиками по армейскому анекдоту).

                    > я купил несколько макеток с ACS712 и ACS714 от разных производителей

                    На хоббикинге и т.д. продаются тучи готовых контроллеров (ESC). Годами отлаженных, со всевозможными защитами. Дешевле всего вашего исследовательского «железа», которое на макетках будет нещадно сбоить.
                    https://hobbyking.com/en_us/afro-hv-20a-multirotor-esc-high-voltage-3-8s.html — безщёточный. Историю версий любопытно почитать.
                    Высоковольтных (>12В) для «brushed motors» там не нашёл навскидку.

                    Коллекторные движки в радиоуправляемых моделях — редкость, из-за помех на всё вокруг.
                    Потому и дороже.
                    https://www.motiondynamics.com.au/12v-48v-dc-speed-control-single-direction-25a-pcb-model.html
                    С открытыми схемами тоже есть готовые, в зависимости от датчиков можете получить любой алгоритм управления.

                    P.S. про полумост я «накосячил», полярность он не меняет в отличие от полного.


                    1. haqreu
                      07.11.2016 14:57

                      Который раз вы это уже пишете, но ток через индуктивность в принципе не может меняться резко. По первому закону коммутации.


                      Ээ… А я что сказал?

                      На хоббикинге и т.д. продаются тучи готовых контроллеров


                      Мне нужно контролировать силу, прикладываемую валом мотора к ремню. То есть, крутящий момент. В случае, когда нагрузка плюс-минус постоянная (мой случай), это будет ускорением. Эта сила со знаком, мотор должен уметь крутиться в обе стороны. Вы же мне предлагаете контроллеры, которые контролируют скорость, а не крутящий момент.

                      Если вы мне дадите ссылку на коробочку, которая умеет управлять коллекторным движком, и которая на вход принимает ШИМ момента, то я буду счастлив.


                      1. user343
                        07.11.2016 16:50

                        А я что сказал?


                        Подавайте на мотор хоть напряжение прямоугольными ступеньками 20 кГц, а он станет брать плавный ток.

                        Готовая плата:
                        http://www.robotshop.com/en/cytron-13a-5-30v-single-dc-motor-controller.html

                        Там кажется микросхемы NE555 + IR2184 стоят, простые и без «закрытого кода».

                        Любые извращ ухищрения с управлением по моменту делаются программно. Датчик тока резисторный проще при таких сравнительно малых токах. Потери денег и мощности на нём должны быть меньше аллегровских (на эфф. Холла).

                        Если вы делаете электромаятник, как преподаватель лабораторную работу для головоломства/заинтересовывания студентов («занимательную физику» 21 века), то важность Фурье вам показать не получилось. Нынешние ученики с мозаичным мышлением и синдромом дефицита внимания скажут «много букв» и заснут на третьей формуле :)

                        Резонансную частоту колебаний (или оптимальный закон управления) можно отыскать программой для конкретной обвязки двигателя. По минимуму потребл. тока например.
                        А в древних электромеханич. часах подобное делалось на 2х транзисторах без всяких ШИМ и мостов.

                        В двигателе bosh 24V 180W внутри стоит помехоподавляющий кондёр 0,68 мкФ и 2 мелких дросселя:
                        http://www.bosch-ibusiness.com/boaaelmoocs/category/DPO-K/342/product/766 — вкладка «connection diagram».
                        Индуктивность самого ротора даже те дотошные немцы и нижеуказанные американцы в паспорте не указывают, значит она не играет существенной роли.

                        Зато в даташитах встречаются:
                        Torque Sensitivity (Nm/amp)
                        Back EMF (volts/KRPM)

                        http://www.moog.com/literature/MCG/moc23series.pdf

                        P.S. сюда бы вам свою задачку подкинуть с подробностями, там участники гораздо практичнее и не «шпарят формулами» с разбега.
                        https://geektimes.ru/post/275904/

                        P.P.S. «kill all humans» в метках это шутка? Роботы с такими приводами и затратами ресурсов на разработку и сборку невыгодны и нежизнеспособны. Редкоземельные металлы для магнитов ДПТ быстрее закончатся, чем людские самообучаемые ресурсы.


                        1. Lucidus
                          07.11.2016 17:13

                          Индуктивность самого ротора даже те дотошные немцы и нижеуказанные американцы в паспорте не указывают, значит она не играет существенной роли.
                          Зато в даташитах встречаются:
                          Torque Sensitivity (Nm/amp)
                          Back EMF (volts/KRPM)

                          Все верно, не указывают Rя и Lя, но указывают постоянные времени (Electrical Time Constant, Mech. Time Constant), которые нужны для полной идентификации модели двигателя. Кстати, отдельно указаны сопротивление и индуктивность клемм! Можно не поверить на слово производителю и самому все измерить и отнять значения для клемм.

                          Описание ДПТ с постоянными магнитами, кратко и по существу ->
                          http://imed.narod.ru/el_mech/motor_dc.htm

                          З.Ы.: А даташит для примера отличнейший. Даже теплопроводность есть для расчета тепловых режимов работы.


                        1. haqreu
                          07.11.2016 18:06

                          Эээ… Вы мне предлагаете обычный мост, у меня даже лежит прямо этот на столе, плюс ставить датчик тока, и управлять моментом программно. Один-в-один то, что у меня получилось…


                          1. user343
                            07.11.2016 19:20
                            -1

                            С датчика тока аппаратно (RC цепочкой) интегрируете показания, добавляете 2-3 оптрона (датчики положения маятника в ключевых точках, рассчитанных со всей мощью современного мат. аппарата), затем запираете студентов в пустой аудитории на N часов без еды с условием-заданием разработать самообучающуюся программу автомотоэлектроардуино-инерцоида с макс. возможной продолжительностью качаний на одном заряде АКБ.
                            Сталины-Берии в «шарашках» примерно так и делали. Ещё интернета и телевизора заключенные инженегры не видели и не отвлекались на женщин, поэтому военно-технический прогресс шёл быстрее нынешнего :)


        1. Vcoderlab
          06.11.2016 23:04
          +1

          Интересная ссылка, спасибо!

          Но здесь немного иное. Здесь коллекторный двигатель постоянного тока (и, кстати, ни слова про тип возбуждения).

          Имхо всё можно реализовать гораздо проще через аппаратный (1156ЕУ3, MC34063 и пр.) ШИМ с обратной связью по току с шунта в цепи двигателя. Даже в роли индуктивности можно индуктивность двигателя использовать.


      1. Vcoderlab
        06.11.2016 23:13

        Вчитался подробнее и разглядел: значения R и L находятся… подбором!
        Столько матана чтобы потом тупо подобрать сопротивление и индуктивность, которые лучше всего соответствуют входным данным? И какова же точность такого способа?


        1. haqreu
          06.11.2016 23:15

          Минуту. А существует вообще измерение чего бы то ни было, где подбора нет?


          1. Vcoderlab
            06.11.2016 23:32

            Не понял вопроса, если честно.

            Если обратиться к моему первому комментарию например, то там происходит косвенное измерение сопротивления: измеряем ток и напряжение, затем по закону Ома вычисляем (это ключевое слово) искомую величину — сопротивление. Точность определения сопротивления обеспечивается точностью измерения тока и напряжения.

            То же самое для индуктивности: измеряем переменные ток и напряжение. Для простоты можно принять f = 50 Гц, но по-серьёзному нужно измерять и частоту (и заодно применить генератор синусоидального сигнала). Затем по закону Ома вычисляем X_L — индуктивное сопротивление на данной частоте, а уже из него опять-таки вычисляем искомую индуктивность. Точность обеспечивается точностью измерения тока, напряжения и частоты.

            Оба описанных способа обеспечивают косвенное измерение искомой величины без какого бы то ни было подбора.


            1. haqreu
              06.11.2016 23:35

              > Оба описанных способа обеспечивают косвенное измерение искомой величины без какого бы то ни было подбора.

              Вот тут позвольте не согласиться. Уже выбирая режим на омметре, у вас есть подбор. И то, что вы, выбрав режим на омметре, дальше читаете значение на дисплее, не говорит, что омметр не производит подбора. Он просто скрытый и аппаратно реализованный.


              1. Vcoderlab
                06.11.2016 23:42

                Выбирая режим на омметре, я выбираю режим работы прибора в соответствии с его руководством по эксплуатации. И мне не важно, как он работает. Мне важно, что он 1) обеспечивает измерение сопротивлений в заданном диапазоне; 2) делает это с достаточной точностью. Точность эта обеспечена самим прибором и подтверждена при его поверке. А чем обеспечена точность вашего способа нахождения (специально не говорю «измерения») R и L?

                И вообще, измерительные приборы бывают аналоговые (стрелочные). Их точность бывает гораздо лучше 1%. Пользовался вольтамперметром постоянного тока класса 0,2. Замечательный прибор. Какой может быть подбор в магнитоэлектрическом например механизме?


                1. haqreu
                  06.11.2016 23:47

                  Ну а у меня точность ограничена качеством АЦП в моей системе. И да, она гораздо ниже одного процента, но достаточна для моих целей. А давайте спорить, что ваш омметр всё равно не покажет два раза одного и того же сопротивления на клеммах двигателя? Разброс будет существенно большое 1%.


                  1. Lucidus
                    07.11.2016 15:00

                    haqreu,Vcoderlab предлагает вам воспользоваться «готовым велосипедом». Это самый простейший способ нахождения параметров ДПТ с постоянными магнитами, если не считать данные из техпаспорта двигателя от производителя (если таковой есть). Этот способ не требует наличия какого-то навороченного измерительного оборудования. И это будут реальные данные.
                    По точности ваших измерений. Fpwm в вашем проекте 7,8кГц, а Fadc_conv — 9,6кГц. Может быть проблема с точностью измерения, т.к. частота дискретизации сопоставима с частотой измеряемого сигнала (Fadc_conv / Fpwm = 1,23). Я бы порекомендовал увеличить до Fadc_conv = 3...5 * Fpwm. Ну, или снизить Fpwm.
                    https://ru.wikipedia.org/wiki/Теорема_Котельникова


                    1. haqreu
                      07.11.2016 15:05

                      Простите, но если я не путаю педали, то теорема Котельникова здесь совершенно ни при чём. Давайте для простоты предположим, что Fpwm = Fadc_conv = 7.8кГц. Так вот, ацп в течение 128 микросекунд усредняет сигнал, измерив его примерно 13 раз, и посчитав среднее. Ну а затем мы этот усреднённый сигнал выводим наружу.

                      Способ с лампочками меня не устраивает, т.к. мне для контура тока неплохо бы иметь в сборе всю систему, включая и датчик тока, который может не соответствовать даташиту (мне повезло, один нашёлся хороший), и вносящий искажения драйвер.


                      1. Lucidus
                        07.11.2016 16:33

                        АЦП в вашем МК типа SAR (последовательного приближения). В указанном вами даташите на рис. 24.5 (стр. 241) приведена диаграмма «боевого» режима: 1,5 такта — выборка канала и обновление опоры -> захват -> остальные такты — последовательное приближение и сохранение в буфер. Где тут 13 измерений и усреднение?
                        Для качественного регулирования вам нужно получить N выборок/измерений и выполнить расчет Irms, таким образом устраняем помехи. А ДПТ может ой как шуметь.
                        Вот с этим самым N нужно определиться, учесть характер нагрузки и возможности аппаратуры СУ.

                        Касаемо лампочек, Vcoderlab утрировал, тут главное принцип. Подавать 220В на ДПТ рабочим напряжением 24В опасно. Изоляция может не выдержать, с последствиями. А вот подать напряжение частотой 50Гц через трансформатор 220/24 (220/15), не имея лабораторного генератора, можно.

                        Датчик тока откалибруйте посредством ПО, введите юстировочные числа.


            1. Arastas
              07.11.2016 13:04
              +1

              А скажите, пожалуйста, когда Вы проводите серию тестов, получаете набор измерений, а потом сводите этот набор к единственному значению, это не является некоторым подбором?


  1. HOMPAIN
    06.11.2016 21:39

    В разделах где даётся математика у вас полная каша. Куча смысловых ошибок, невнятные/непонятные определения. Очень сложно вас понять в этих абзацах.


    1. haqreu
      06.11.2016 21:40

      Не могли бы вы быть более конкретным? Приведите, пожалуйста, список ошибок с исправлениями? Иначе ваш комментарий бесполезен.


      1. HOMPAIN
        06.11.2016 22:14
        +1

        1)В начале раздела «Преобразование Фурье» вы начинаете говорить о каких-то функция, но о каких не понятно. Что функции принимают, что возвращают? Если они работают с векторами, то в каком пространстве?

        >я считаю, что функция и вектор — это одно и то же.
        >Ровно так же можно считать этот вектор значениями функции в точках 0, 1, 2, 3,
        Это вообще не понятно что значит? Фракталы или какое-то особое пространство?

        2)>В нашем случае преобразование Фурье — это функция из вещественных чисел в комплексные:
        Обычно это преобразование переводит вещественное число в вещественное и из ваших дальнейших слов совершенно непонятно что это за преобразование и от куда появляется комплексная часть. Я так понял что вы разлагаете в ряд через экспоненты с мнимой степенью и применяете формулу Эйлера?

        3)>Аргумент функции (вещественное число) — это просто номер базисной функции или вектора (на самом деле, пары базисных функций)
        Опять непонятно в каком пространстве мы работаем? Что такое базисная функция и её номер? Вектор в начале у вас 4D, преобразование фурье делаете в 1D, а говорите о пространстве функциональном.

        4)>Как вариант, в лоб: сначала посчитать производную, а затем посчитать преобразование Фурье:
        -----формула-----
        производная у вас посчитана неправильно

        дальше не осилил


        1. haqreu
          06.11.2016 22:19

          Давайте по порядку, начиная с простого. В производной да, моя ошибка, разумеется, 90° не умножается на t, это опечатка. Спасибо за замечание, сейчас поправлю.


        1. haqreu
          06.11.2016 22:26

          Так, поправил производную. Давайте дальше.

          >Это вообще не понятно что значит? Фракталы или какое-то особое пространство?

          Ни о каких фракталах речи не идёт. Простое сэмплирование функции. Если у вас четыре сэмпла, то это «проекция» изначальной функции из |R в |R на базис (1,0,0,0), (0,1,0,0), (0,0,1,0), (0,0,0,1). Каждый из базисный векторов под номером i может рассматриваться как сдвиг единичного всплеска ?(x-i).


        1. haqreu
          06.11.2016 22:29

          >Обычно это преобразование переводит вещественное число в вещественное и из ваших дальнейших слов
          >совершенно непонятно что это за преобразование и от куда появляется комплексная часть. Я так понял
          >что вы разлагаете в ряд через экспоненты с мнимой степенью и применяете формулу Эйлера?

          Вот тут, возможно, я чего-то подзабыл, но мне казалось, что Фурье вещественен для чистых косинусов, без сдвига по фазе. Как только появляется фазовый сдвиг, появляются синусные координаты, то есть, комплексная часть. Так что да, формула Эйлера.


        1. haqreu
          06.11.2016 22:38

          >Опять непонятно в каком пространстве мы работаем? Что такое базисная функция и её номер?
          >Вектор в начале у вас 4D, преобразование фурье делаете в 1D, а говорите о пространстве функциональном.

          Так. Берём входную функцию f из |R в |R. Чтобы её представить, нам нужно очень большое количество сэмплов (вообще бесконечное). Каждый из сэмплов получается сдвигом единичного всплеска (в нуле) на заданную величину. Таким образом, сдвиг, по факту, даёт нам индекс базисной функции (всплеска) из |R в |R.

          Преобразование Фурье берёт эту функцию f на вход, и сопоставляет ей другую функцию F: |R -> (C. Другими словами, F — это разложение функции f в (бесконечный) базис синусов и косинусов. F отображает множество частот |R в множество пар коэффициентов |R^2 [ну или (C ].
          Когда F(w) = a + bi, то это значит, что функция f имеет ненулевую проекцию на функцию sin(wt) и ненулевую проекцию на cos(wt). Иначе говоря, сэмплируем c огромным количеством sin(wt) и cos(wt), получим два вектора. Сэмплируем вектор f(t) в тех же точках. Проекция вектора f(t) на вектор sin(wt) будет равна b, проекция вектора f(t) на вектор cos(wt) будет равна a.


          1. HOMPAIN
            06.11.2016 23:06

            Не могу понять что такое у вас всплеск ?(x-i)? Это дельта функция?


            1. haqreu
              06.11.2016 23:07

              Я вообще говорил про её дискретную версию, но вообще да, она.


              1. HOMPAIN
                06.11.2016 23:28

                Это плохое разложение, у вас при нём не будет работать производная, а вы её используете в статье.


                1. haqreu
                  06.11.2016 23:30

                  Я его не использую вообще. Собственно, это разложение — это стандартное представление функций через сэмплирование. Я только пытался донести до людей, кто не работал с таким матаппаратом, что преобразование Фурье и Лапласа — это просто смена базиса, но мы продолжаем работать с той же самой функцией, это всё.


                  1. HOMPAIN
                    06.11.2016 23:39

                    Я про производную. Её от этой функции брали и от новой функции после разложения Фурье.

                    У вас проблема с подачей. Одновременно и запутанно и избыточно, так что новичок не поймёт. В тоже время слишком неформально и знающему тоже не понять.

                    Мне вообще было интересно про измерение индуктивности почитать, а я из-за этой штуки завис)


                    1. Vcoderlab
                      06.11.2016 23:45

                      Как я понял, происходит измерение осциллограммы тока при подаче постоянного напряжения, а потом подбор значений R и L, при которых рассчётный график максимально близок к измеренному.


                      1. haqreu
                        06.11.2016 23:48

                        Не уверен про термин осциллограмма, но в целом именно так.


                    1. haqreu
                      06.11.2016 23:50

                      Вообще согласен. Я привык о математике устно разговаривать, там всё проще. Вообще раздел «ликбез» можно из данной статьи опустить, но он мне там нравится, поскольку если и плохо объясняет, то, по меньшей мере, даёт ключевые слова для понимания базы.


  1. Lucidus
    07.11.2016 15:56

    Далее, параметры, найденные при высокой амплитуде сигнала, не совсем совпадают с тем, что получается при низких напряжениях. Может быть интересно (тут не рассмотрено) делать модель не только двигателя, а всей системы в целом, включая нелинейность ШИМ-драйвера.

    Т.к. используется ДПТ, то есть падение напряжения на щетках коллектора, отсюда отличие на малых напряжениях.

    Вы же разрабатываете систему позиционирования (удержание обратного маятника)? Т.е., скорости почти нулевые, но ускорения могут принимать большие значения. Поправьте, если не правильно понял.

    Корректно было б рассматривать систему в целом, учесть механическую часть (массы, моменты инерции, лин./угл. скорости, ускорения) и привести все это к валу двигателя. Несмотря на кажущуюся простоту, там есть где «забуксовать» и не единожды.
    Нашел у себя в остатках восстановленного методичку ХАИ по системам позиционирования:
    https://yadi.sk/d/dgfiDOr4yDLx5


    1. haqreu
      07.11.2016 18:04

      Да, мне нужно управлять чем-нибудь вроде маятника. Реально мне нужно управлять силой, приложенной к ремню, а это ток, протекающий через обмотки. Массы-моменты-инерции это уже будет уровнем выше. Спасибо за методичку, полистаю.


      1. Vcoderlab
        07.11.2016 20:39

        Если в вашей конструкции сила будет прикладываться без движения, я бы на вашем месте беспокоился о перегреве двигателя. Моторы обычно рассчитаны на охлаждение воздухом, гонимым якорем / ротором на номинальных оборотах. Протекание близкого к номинальному тока без вращения или на сильно заниженных оборотах может привести к перегреву.


  1. Gryphon88
    07.11.2016 23:41

    Извините, ниже немного оффтопик.
    Правильно ли я понимаю, что с помощью предложенной схемы можно менять усилие на валу и одновременно понимать, что двигатель застопорился (достиг упора или перегружен)? У меня сейчас похожая задача, а в голове только решения в стиле орков из Wh40k:
    имеется магазинный ченджер светофильтров, ёмкостью в 4 штуки. Его видно на этом фото, между предметным столом и станиной, с жёлтой наклейкой. В каждой из 4 позиций ченджер фиксируется с помощью классического подпружиненного шарика. Положения меняются вручную, перемещением ручки.
    Я хотел бы добавить возможность переключать светофильтры с компьютера, не теряя возможности переключать вручную.
    Реализовать я хотел с помощью абсолютного энкодера и простенького ШД немного избыточной мощности, у которого по достижении нужного положения просто снимался ток с обмоток, чтобы он свободно прокручивался рукой. Если я правильно понял посыл статьи, то можно будет выкинуть энкодер и позиционироваться по точкам механической фиксации, и взять маломощный асинхронник, из точек фиксации выходить рывком через повышение тока, а потом ток снижать.


    1. Lucidus
      08.11.2016 12:10

      Остановитесь на ШД, думаю, это значительно проще будет.


      1. user343
        08.11.2016 14:15

        Мне почему-то думается, что если в авторской задаче период колебаний маятника около секунды, то для его стабилизации хватит и обычного коллекторного ДПТ без ШИМ управления. Даём ему 2 дозированных по времени разнонаправленных импульса за цикл работы. Полностью включаем ток на несколько сотен мс, пока маятник не долетит до следующей контр. точки. Потом в другую сторону подталкиваем и всё.
        Главное датчики положения маятника и ускорения тележки правильно расставить и ардуину обучить слать сигналы вовремя.


        1. Lucidus
          08.11.2016 20:52

          Мне кажется, поставлена задача — реализовать DTC, баста. ВУЗ… не ищите логику


          1. Gryphon88
            08.11.2016 21:42

            что такое DTC? в гугле какая-то ерунда возвращается, самое «техническое» — про БМВ.


            1. Lucidus
              08.11.2016 22:39

              Direct torque control
              https://en.wikipedia.org/wiki/Direct_torque_control


              1. Gryphon88
                08.11.2016 23:17

                Спасибо. Это то, чего бы мне хотелось, но, судя по статье на вики, это дикий оверкилл.


            1. Lucidus
              08.11.2016 23:20

              Прошу извинить, сам ошибся и вас ввел в заблуждение. Аббревиатура DTC из управления 3-фазными двигателями. В задаче автора ДПТ.


  1. point212
    07.11.2016 23:56

    Подскажите пожалуйста ссылочку, на платку, которая у вас питает макетку.
    У меня сейчас это основная головная боль — приделать к макету вменяемое питание.