1. Друзья, "лихорадка" вокруг тем об альтернативной энергии заставила возбудиться и мошенников! Будьте бдительны и не ведитесь на дешевые разводы. Помните, что если Вам предлагают купить рабочий БТГ по цене дешевле миллиона долларов, то на 99% это развод Вас на деньги. Если же Вам предлагают купить БТГ дороже миллиона долларов, то это развод на 100%. Увы чудес и исключений пока нет, хотя Вы всегда можете это проверить самостоятельно... :-)
    Скрыть объявление

Двигатель с програмным управлением

Тема в разделе "Прочие устройства, решения и технологии", создана пользователем RDLNEO, 18 Март 2022.

  1. RDLNEO

    RDLNEO Пацак

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


    За основу был взят принцип притягивания неодимового магнита к электромагнитному сердечнику, который находится в данный момент в активном состоянии. Смысл в том, что в данном двигателе соленоидные катушки с сердечником (т.е. электромагниты) активируются программно, т.е. в соленоидный порт отправляется число, которое в двоичном формате содержит в себе логическое состояние сразу всех катушек с железными сердечниками.


    Пример:

    У нас двигатель из 24 катушек с сердечниками (из 24-х соленоидов), и соответственно, от такого двигателя отходят 48 проводов. Почему 48, а не 25? - да потому, что если сделать 24 плюса и один общий минус, то мощности не хватит для активации сразу 12 соленоидов, т.к. ток потечёт по наименьшему сопротивлению и соседние (/запаралеленные) катушки (/соленоиды) будут шунтировать друг друга. К сожалению метод с общим минусом не сработает, но если к каждому активному на данный момент соленоиду подавать индивидуальное напряжение (т.е. с очередной обмотки трансформатора выпрямлять ток), то мощности должно хватить.


    NEO_ENGINE.jpg

    И вот эти самые 48 проводов подключены к контроллеру, который управляется от компьютера, например, если нам нужно прокрутить двигатель на 2 соленоида вперёд, то необходимо подать в порт контроллера следующую команду:

    (допустим, что адрес порта времени активного состояния всех активных соленоидов в миллисекундах=2000)
    poke 2000, 500;


    (допустим, что адрес соленоидного порта=1000)
    poke 1000, 9586980;


    при условии, что вышеуказанное значение (9586980) в двоичном формате составляет: 100100100100100100100100 (24 разряда), то после получения контроллером этого значения типа DWORD, внутри схемы произойдёт моментальная активация соответствующих катушек (т.е. там, где "1" происходит активация очередного соленоида) и это состояние будет до тех пор, пока не исчерпается время жизни для всех активных соленоидов (т.е. в нашем примере это 500 миллисекунд или 0.5 секунды). После прошествия пол секунды, произойдёт одновременное отключение всех активных катушек (переход активных соленоидов в пассивное состояние).

    Т.е. двумя вышеописанными командами, мы установили ротор двигателя в стартовое состояние, т.е. на очередном соленоиде, который попадает на "1", будет присутствовать напряжение от контроллера ровно пол секунды. Причём, нужно отметить, что контроллер настолько крутой (он подобен процессору, который может обработать 32 бита за 1 такт), что все соленоиды активируются одновременно (ни на 1 Мс позже и ни на 1 Мс раньше) с помощью терристоров с радиаторами.

    вопрос:
    - что дальше делать, т.к. наш электродвигатель дёрнулся и остановился?

    ответ:
    - активировать соленоиды, которые находятся возле только-что активных для вращения ротора на расстояние в 1 соленоид


    вопрос:
    - и как же это сделать?

    ответ:
    - необходимо выполнить команду языка Ассемблер shr или shl, что на обычном языке означает циклический сдвиг в двоичном представлении, и если вы не знаете этих команд (/этот язык), то это не страшно, т.к. обычный калькулятор в операционной системе может вам помочь!

    Исходя из вышеизложенного, нетрудно определить, что если двигатель вращать против часовой стрелки, то в порт управления соленоидами необходимо отправить число 2396745 (это 001001001001001001001001), т.е.:

    poke 1000, 2396745;

    посмотрите состояние переключения всех соленоидов двигателя (предыдущее "A" / текущее "B")
    A. 100100100100100100100100
    B. 001001001001001001001001


    При исполнении контроллером вышеописанных команд (смотреть с самого начала), наш электродвигатель произвёл вращение против часовой стрелки всего на 1 соленоид.

    Ясно, что для полноценного вращения этого недостаточно и поэтому мы отправляем в порт управления соленоидами значение 4793490:
    poke 1000, 4793490;

    - это в двоичном формате составляет: 010010010010010010010010

    а теперь посмотрим всю фазу вращения, состоящую из 3-х команд:

    100100100100100100100100 (стартовое состояние ротора)
    001001001001001001001001 (против часовой стрелки на 1 соленоид)
    010010010010010010010010 (против часовой стрелки на 1 соленоид)


    вопрос:
    - что дальше делать?

    ответ:
    - поскольку электромагниты передвинули ротор на 2 соленоида, то можно начать всё заново, т.к. ротор теперь должен находится в "первоначальном" состоянии (ротор - это неодимовый магнит (рис.8. точка.10), которые притягиваются электромагнитами (рис.9), и располагаются эти самые магниты в три раза реже расположения соленоидных катушек, т.е. рис.8. не содержит точной информации о расположении деталей, но лишь схематично отображает принцип взаимодействия катушек с магнитами). Более понятное расположение катушек статора и магнитов ротора можно представить у себя в уме в момент анализа 3-х строк програмного хода ротора в двоичном формате (см.выше).

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


    poke 1000, 9586980;
    poke 1000, 2396745;
    poke 1000, 4793490;

    или то же самое, но только в двоичном формате 2 раза подряд (наблюдайте за одной двоичной единицей "1" и вы увидете постоянное вращение):

    100100100100100100100100 (стартовое состояние ротора)
    001001001001001001001001 (на 1 соленоид - вращение против часовой стрелки)
    010010010010010010010010 (на 1 соленоид - вращение против часовой стрелки)
    100100100100100100100100 (на 1 соленоид - вращение против часовой стрелки)
    001001001001001001001001 (на 1 соленоид - вращение против часовой стрелки)
    010010010010010010010010 (на 1 соленоид - вращение против часовой стрелки)

    Анализируя вышеизложенное (т.е. двоичные команды вращения), можно определить что ротор двигателя прокрутился против часовой стрелки всего на 5 соленоидов, и если учесть, что наш двигатель состоит из 24-х соленоидов, то полный оборот двигателя будет соответствовать 8-ми кратному повторению вышеуказанных команд, а именно:

    for (i=0; i<8; i++) // цикл для полного оборота двигателя против часовой стрелки на полной скорости
    {
    poke 1000, 9586980; // при первом исполнении вышеуказанной команды происходит первоначальное позиционирование ротора при условии, что соленоид сможет его зацепить (т.е. ротор), и возможно, что "зацепить" получиться только на следующем шаге
    poke 1000, 2396745;
    poke 1000, 4793490;
    }

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

    вопрос:
    - как увеличить скорость вращения такого двигателя?

    ответ:
    1. сменить устройство, которое отправляет команды вращения контроллеру в порт управления соленоидами по причине несоответствия частоты отправки данных от внешнего устройства с частотой приёма команд контроллера (т.е. если максимальная частота передачи данных от внешнего устройства {на данный момент - компьютера} меньше частоты приёма данных порта контроллера), который непосредственно включает/выключает электромагниты;
    2. сменить схему контроллера по причине не успевания приёма команд от внешнего устройства;

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


    вопрос:
    - как уменьшить скорость вращения такого двигателя?

    ответ:
    - необходимо в коде программы поставить холостой цикл:

    t=900;
    for (i=0; i<8; i++)
    {
    poke 1000, 9586980;
    poke 1000, 2396745;
    poke 1000, 4793490;
    for (z=0; z<t; z++) {} // реализация намеренного уменьшения скорости двигателя на значение t, - один оборот с меньшей скоростью
    }


    А теперь можно рассказать про схематичные чертежи, которые были приложены в этом посте:
    На рисунке 7 изображён барабан (ротор) без соленоидов (точка 9 рис.8), который состоит из 2-х железных дисков (рис.4) приваренных к роторной оси в точке 6 рисунка 4, между которыми болтами (точки 2 рис.1) через прорезь (точка 5 рис.4) закреплены магниты (рис.3, точка 10 рис.8) для ротора.

    Примечание: иагнит (рис.3) крепится к базовому основанию (рис.1) по причине того, что первоначально планировалось использовать неодимовые магниты в рис.3, но учитывая тот факт, что такие магниты залипают даже на отключенном электромагнитном сердечнике, было принято решение по замене данных магнитов на обычный металл, выигрывающем по сплаву в максимальном примагничивании к электромагниту (соленоиду) в активном состоянии (="1")


    вопрос:
    - как увеличить мощность такого двигателя?

    ответ:
    1. необходимо увеличить диаметр барабана (рис.7, рис.4, рис.8)
    2. необходимо увеличить длину магнитов (и соответственно - длину соленоидов): рис.1, рис.3, рис.9, рис.10

    Пример финального исходного кода для полноценного управления вышеописанным двигателем:

    считается, что компьютер, который управляет контроллером транспортного средства включается только при активации специального тумблера и при старте данного компьютера сразу начинает исполняться нижеуказанный код:
    (примечание: символы "//" - это комментарии)

    // *** начало кода программы ***
    //----------------------------------------- начало описания переменных ------------------------------------------------------------------
    bool power_is_on, break_ID, rear_ID; // логическая переменная
    int Active_time, Speed, z; // 4-х байтовая переменная
    unsigned __int8 break_level; // 1-байтовая переменная [0...255]
    //----------------------------------------- конец описания переменных ------------------------------------------------------------------

    rear_ID=peek(7000); // воображаемый адрес состояния тумблера "задний ход" (возможные значения: 0/1)

    Active_time=peek(3000); // воображаемый адрес состояния внешнего переменного резистора (например: джойстик и т.п.),
    // отвечающего за максимальное время действия всех активных на данный момент соленоидов в Мс (если ="1")

    poke 2000, Active_time; // инициализировать соответствующий порт


    power_is_on=peek(4000); // воображаемый адрес состояния тумблера / ключа "зажигание" на приборной панели (возможные значения: 0/1)

    Speed=peek(5000); // воображаемый адрес состояния переменного резистора, отвечающего за скорость (например: джойстик и т.п.)
    // примечание: чем больше это значение, тем меньше скорость (обратная зависимость: 0 - максимальная скорость)

    break_level=peek(6000); // воображаемый адрес состояния переменного резистора, отвечающего за глубину нажатия педали "тормоз" [0...255]
    // значение "0" означает, что педаль тормоза находится в "отжатом" состоянии

    //-------------------------------------------------------------------------------------------
    while (true) // вечный цикл - пока включено питание компьютера транспортного средства
    {
    z=peek(3000);
    if (z!=Active_time) // если изменилось состояние внешнего источника управления
    {
    poke 2000, z;
    Active_time=z;
    }
    //------------------------------------------------------------------------------------
    break_level=peek(6000); // постоянный опрос состояния педали "тормоз"
    if (break_level<3) // попоравка на большую чувствительность педали тормоза
    {
    if (power_is_on) // если включено питание транспортного средства
    {
    if (rear_ID)
    {
    poke 1000, 9586980; // вращение колёс назад
    poke 1000, 2396745; // --/--/--
    poke 1000, 4793490; // --/--/--
    }
    else
    {
    poke 1000, 9586980; // вращение колёс вперёд
    poke 1000, 4793490; // --/--/--
    poke 1000, 2396745; // --/--/--
    }
    }
    else poke 1000, 0; // иначе транспортное средство в этой точке кода едет "под горку" без торможения
    //----------------------------
    Speed=peek(5000);
    break_ID=false;
    }
    else
    {
    if (Speed==0) Speed++; // для того, чтобы обязательно зайти в цикл ниже по причине обработки нажатия педали тормоза
    break_ID=true;
    }
    //----------------------------------------------
    for (z=0; z<Speed; z++) // цикл задержки во избежания максимальной скорости
    {
    while (break_ID) // если был нажат тормоз
    {
    Active_time=break_level*10; // увеличить время действия активных соленоидов (от 0.01 до 2.55 секунды)
    poke 2000, Active_time;
    if (break_level<15) poke 1000, 1065220; // слабое торможение (000100000100000100000100)
    if (break_level>14 && break_level<41) poke 1000, 9586980; // обычное торможение (100100100100100100100100)
    if (break_level>40) poke 1000, 14380470; // сильное торможение (110110110110110110110110)
    Sleep (Active_time); // пауза в миллисекундах в течении реализации торможения (от 0.01 до 2.55 секунды)
    break_level=peek(6000); // постоянно опрашиваем педаль тормоза
    if (break_level>2) break_ID=true; else break_ID=false; // поправка на чувствительность педали тормоза
    }
    }//for
    //----------------------------------------------
    power_is_on=peek(3000); // постоянный опрос тумблера / стостояния ключа "зажигание"
    rear_ID=peek(7000); // постоянный опрос тумблера "задний ход"
    }//while (true)
    //----------------------------------------------------------------------------------------------------------------------------------------
    // *** конец кода программы ***
    P.S.: перед эксплуатацией в реальной среде, двигатель зачехлить целофаном или пластиком во избежание попадания мусора в барабан, который может вызвать произвольное торможение транспортного средства

    P.S.: также можно использовать ток от соленоида в режиме рекуперации (т.е. контроллер временно работает в другом режиме выпрямления и зарядки аккумулятора через диод)


    вопрос:
    - что представляет собой контроллер для управления соленоидами двигателя?

    ответ:
    - схема, которую придётся придумать самому, либо взять уже готовую где-нибудь
    - например можно попробывать утащить из учебного заведения школьный генератор с крутилками для создания любого импульса любой частоты, и применить его в комплексе с этой схемой, например для использования совместно с инвертором для умножения напряжения виртуального синуса с 3-х вольт до 50-100 вольт, которые сильно полюбят каонденсаторы, которые, в свою очередь смогут разряжаться через соленоиды (аналог пушки Гаусса). Т.е. понадобится схема, проверяющая заряд любого конденсатора (их будет много - аналог приготовления пирожков, если за ними образовалась большая очередь), и если он заряжен, то этот заряд умело можно направить с помощью тиристроных цепей на очередной соленоид, который в данный момент нуждается в срабатывании (думаю, что такого импульса должно хватить). И нтернете полно бесплатных программ по виртуальной симуляции самодельных электрических схем с логическими элементами (минус состоит только в том, что маркировка радиодеталей там иностранная). Могу посоветовать программу, которой пользуюсь я сам:
    TINA for Windows ver.9.3.50.40 SF-TI которая весит 93 Мб - её можно свободно скачать пользуясь поисковиком Yandex.


    вопрос:
    - про барабан с магнитами вроде всё понятно, а вот про корпус на котором будут закреплены соленоиды?

    ответ:
    - представьте себе, что на рис.7 в отверстие барабана вставлена ось, которая проходит его насквозь (т.е. барабан) и выходит из отверстия с противоположной стороны, причём места пересечения оси с отверстиями по краям барабана привариваются сваркой.

    А теперь воображайте по пунктам далее:

    1. представьте, что с обеих сторон на эту ось посажены подшипники;
    2. на каждый подшипник приварен диск подобный диску из рис.4 в точке 6., после чего эти 2 диска могут свободно вращаться относительно барабана в одинаковых плоскостях (диаметр 2-х дисков должен быть больше диаметра боковых дисков барабана);
    3. стержнями или рейками параллельно соединить оба диска между собой для создания каркаса двигателя (соединение производить болтами или сваркой). При соединении необходимо оставить место для установки соленоидов, которые должны находиться параллельно магнитам барабана и чем плотнее друг к другу они будут размещены (т.е. чем больше соленоидов), тем мощнее будет двигатель;
    4. Перед установкой очередного соленоида необходимо скрутить 2 отходящих от него провода (2 провода длиной не менее 50 см.), затем ножницами отрезать кусок бумажки размером 2 на 2 см., ручкой на бумажке написать порядковый номер соленоида (нумерация от 1 и далее... до последнего соленоида) и с помощью скотча приклеить эту бумажку к концам 2-х скрученных проводов для того, чтобы в момент подключения двигателя к контроллеру не возникло проблем с последовательностью соленоидных контактов;
    5. на данном этапе барабан свободно вращается внутри каркаса с соленоидами, и чем меньше расстояние между магнитами и соленоидами, тем мощнее двигатель, но не следует забывать о погрешности подшипников, которая приводит к нестабильности вращения оси, поэтому следующий выбор остаётся за вами:
    A. хорошие подшипники + минимальное расстояние между магнитами и соленоидами;
    B. обычные подшипники + безопасное расстояние между магнитами и соленоидами (для предотвращения их будущего соприкосновения);
    6. привариваем места крепления к каркасу двигателя (т.е. места, на которых можно будет закреплять двигатель);
    7. герметизируем/изолируем двигатель от попадания в него пыли и мусора с помощью плотного целофана или пластика.


    вопрос:
    - у меня уже есть такой двигатель, но на проводах не написано - какая пара проводов к какому соленоиду принадлежит, что делать?

    ответ:
    - тестером найти 2 провода к каждому соленоиду


    вопрос:
    - 2 провода для каждого отдельного соленоида были определены и скручены между собой (/обмотаны скотчем), но не ясно - какому именно соленоиду принадлежит любая пара проводов, что делать?

    ответ:
    1. выбрать любые 2 провода, принадлежащих одному соленоиду (/электромагниту);
    2. подавать на эту пару колебания тока переменной частоты и амплитуды (частота и амплитуда должны быть определены экспериментально на предмет распространения электромагнитных волн не дальше соседнего соленоида);
    3. вышеописанным способом (из п.2) определить 2 соседних соленоида (левый/правый определяется путём анализа направления вращения оси двигателя);
    4. на основании вышеизложенного, подписать каждую пару проводов в соответствии с порядковым номером соленоида [1...24 или более];
    5. подключить в правильной последовательности все провода данного мотора к контроллеру программного управления соленоидами.


    //-------------------------------------------------------------------------------------------------------------------------------------------

    А теперь другая возможная реализация двигателя на неодимовых магнитах (рисунок также к этой теме другой).

    На нижеприведённом рисунке указан неподвижный барабан (рис.2) с катушками (1) с отверстием для оси (3), на которой по обе стороны закреплены колёса. Причём, сам барабан прикреплён к корпусу автомобиля, а отверстие позволяет вращаться оси с колёсами (3) даже не касаясь барабана. На ось с колесами также одеваются диски (рис.5, рис.6) с неодимовыми продольными пластинами (4) - одеваются с лева и справа от барабана путём мёртвой посадки (без прокручивания) на ось (3) при условии, что максимальное расстояние от дисков (рис.5, рис.6) до барабана (рис.2) не должно превышать 1 см (причина: магнитное поле катушек ослабевает с увеличением расстояния).

    Принцип такой-же, как у предыдущего двигателя. Но здесь сам механик должен определить для себя, какими должны быть катушки:
    A. катушки без металлических сердечников - ось с дисками приводится в движение с помощью отталкивания неодимовых пластин от катушек барабана магнитным полем (аналог паровой турбины);
    B. катушки с металлическими сердечниками - ось с дисками приводится в движение с помощью притягивания неодимовых пластин к сердечникам (соленоидам) барабана;


    вопрос:
    - как увеличить мощность такого двигателя?

    ответ:
    - необходимо увеличить диаметр барабана (рис.2), а также параллельно с этим, увеличить диаметр двух от дисков (рис.5, рис.6) до размера диаметра барабана.

    NEO_ENGINE2.jpg
     
    Mouselab нравится это.

Поделиться этой страницей