Микроконтроллер для двигателя своими руками

Сайт про изобретения своими руками

МозгоЧины

Сайт про изобретения своими руками

Как сделать контроллер мотора на основе МОП-транзистора

Как сделать контроллер мотора на основе МОП-транзистора

Приветствую, мозгоизобретатели! Сегодня собираем своими руками полезную вещь — контроллер мотора, который может пригодиться при создании множества самоделок, использующих двигатель под управлением микроконтроллера.

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

Поделка-контроллер состоит из минимума деталей и миниатюрна по размерам, что дает ей возможность легко помещаться в ваши мозгопроекты. Схема контроллера основана на схеме «управления большими нагрузками» из моих предыдущих проектов и содержит только один МОП-транзистор и диод. Это позволяет микроконтроллеру управлять скоростью мотора. А для возможности обратного управления я добавил DPDT реле, еще один МОП-транзистор и диодную пару для контроля смены полярности.

Думаю, что это мозгоруководство будет вам интересно!

Шаг 1: Инструменты и материалы

Как говорилось, эта поделка проста и использует минимум деталей:

  • макетная плата — используйте любую вам доступную
  • тонкий провод — я взял одиночный 24 калибра
  • МОП-ранзистор — 2шт.- я использовал IRF510, но сгодится и любой эквивалентный, например, NTE2382
  • DPDT реле 30В — на фото показана не та реле
  • выпрямляющий диод — 2шт.
  • штырьковые разъемы — лучше взять те, которые можно «отломать» на нужное количество штырьков.

А еще понадобятся некоторые инструменты:

  • паяльник и припой
  • клеевой пистолет
  • изоляционные кусачки
  • дремель или что-то подобное для обрезки макетной платы

Шаг 2: Компоновка деталей

На макетную плату помещаем все мозгодетали, причем таким образом, чтобы можно было легко их спаять согласно схеме при наименьших габаритах. От штырьковой полосы отделяем кусочек с 2-мя контактами и кусок с 4-мя контактами (если вы планируете припаять контакты двигателя непосредственно к плате, то 2-х штырьковый разъем не понадобится). На 2-х контактном отрезке укорачиваем штырьки с обоих сторон, а на 4-х контактном загибаем под углом 90 градусов штырьки одной стороны с помощью изоляционных кусачек, либо другого подходящего инструмента.

Шаг 3: Пайка

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

Шаг 4:Обрезка платы

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

Шаг 5: Доработка

Осталось добавить несколько штрихов и «защитить» мозгоподелку. Изоляционными кусачками обрезаем торчащие концы проводков, при этом не повреждая целостность схемы. Можно использовать для этих целей и плоскогубцы, раскачивая в стороны проводки пока они не обломятся. Затем зигзагообразными покрываем плату горячим клеем, тем самым защищаем ее от возможного замыкания и повреждений, получится должно примерно как на фото.

Шаг 6: Контроллер готов, используем его!

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

Подключение к микроконтроллеру:

  • Подключаем мотор к контроллеру мотора через соответствующий разъем.
  • Вставляем контроллер мотора в макетную плату.
  • С помощью разноцветных проводов соединяем Vin поделки с Vin микроконтроллера, GND с GND микроконтроллера.
  • Используя еще два провода соединяем контакты «speed» и «reverse» контроллера мотора с двумя контактами микроконтроллера по вашему усмотрению.
  • Запрограммируйте микроконтроллер.
  • Не превышайте напряжение 30В на Vin.
  • Не путайте контакты.
  • Если вы используете напряжение выше 15В на Vin, то подключите Vin и GND непосредственно к источнику питания, и заземлите микроконтроллер, соединив его GND и GND источника питания.
  • При работе с большими мощностями на МОП-транзистор установите радиатор.
  • Применяйте только двухконтактые моторы постоянного тока.На этом все, благодарю за мозговнимание!
Читайте также:  Качели для беби бон своими руками

( Специально для МозгоЧинов #DIY-MOSFET-Motor-Controller

Источник

Как начать делать блок управления автодвигателем с нуля

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

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

Нас для начала интересуют датчики положения вала. Если мы начнём этот распределитель немного разбирать, внутри мы увидим:

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

Эти два жестяных колеса сидят на валу, вращаются вместе с ним — и, о чудо, формируют в двух торчащих наружу проводах вот такой очень простой сигнал:

На этом наше везение не заканчивается: хотя мы и знаем, что аккумулятор в автомобиле обычно двенадцативольтовый — сигнальная электроника работает обычно на пяти вольтах! А это значит, что этот сигнал можно вот абсолютно как он есть подключить к например stm32f4discovery — это такая плата с микроконтроллером, в которой цена менее тысячи рублей сочетается с 32ых битным процессором частотой 168 МГц и даже арифметическим сопроцессором.

Если решить программировать это чудо с использованием ChibiOS/RT, хотя бы для упрощения интерфейсов работы с периферией, то вот таким несложным кодом мы получим в консоль работающий тахометр.

По-моему, достаточно просто. Но, всё-таки одно дело — считать что-то с датчиков, и совсем другое дело — сгенерировать какой-то управляющий сигнал.
Давайте разберёмся, как же управляются форсунки?

Чтоб не экспериментировать сразу же с большим и железным двигателем, продолжим пока только с оригинальным блоком управления — даже если мы его хотим заменить на свою плату со своим кодом, всё равно будет полезно собрать побольше информации. Например, будет полезно
собрать информацию о ширине управляющего форсунками сигнала в зависимости от оборотов двигателя.

Итак, берём блок управления и кладём его на стол.

Аккумулятор у нас в машине на 12 вольт? так и старый ATX блок питания — тоже на 12 вольт, его и используем для питания блока управления на время экспериментов.

Когда мы подключались к автомобильной проводке, мы видели там пятивольтовый сигнал — но сам датчик положения коленвала работает как открытый коллектор — т.е. провод датчика либо заземлён, либо ни к чему не подключён. Чтоб эмулировать такой датчик, нам будет нужен транзистор.

И немного кода для генерации сигнала.

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

Соберём это всё и запустим. И, опять чудо! Стандартный блок управления нам поверил, и на основании всего лишь одного эмулированного датчика — датчика положения распредвала — начал пытаться управлять форсунками!

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

Источник

Микроконтроллер своими руками

Пытаясь освоить контроллеры и уже владея навыками программирования ПЛИС, мне пришла в голову дурная мысль. Пришла, постучала и вошла. Всем тем, к кому приходят дурные мысли, и кому интересно как с этим явлением справляются другие, посвящается.

Возникла идея нарисовать свой контроллер, не ограниченный по количеству периферии, ОЗУ и другим параметрам, кроме ёмкости ПЛИС. Скажем контроллер содержит 5 UARTов, а позарез нужен шестой, придётся изворачиваться. А зачем, если можно просто щёлкнуть мышкой и добавить необходимое? Или наоборот, задачка хорошо решается на пяти контроллерах с разрядностью 5, 32, 20, 32 и 20 с непредсказуемым количеством линий связи между ними. Жалко использовать пять 32 разрядников, ресурс всегда жалко, а совмещать две подзадачи на одно ядро – некрасиво, что ли.

Читайте также:  Облицовочный забор своими руками

Время отклика на прерывание в контроллерах достаточно велико. Да, контроллер прерываний мониторит входы (почему-то ограниченные по количеству) независимо от ядра. Но прежде чем начать выполнение кода программы по обработке прерывания, скажем, читать порт, требуется сохранить регистры общего назначения, а затем их ещё и восстановить. А это не один такт на пустое с точки зрения логики программы переписывание регистров в стек и возврат этих же значений обратно. Оно конечно вписывается в понятие реального времени, но ведь можно же делать это мгновенно: выполнялся код с низким приоритетом, на следующем же такте по причине резкой необходимости начинает выполнятся высокоприоритетное прерывание по таймеру, а через такт выполняется код по обработке внешнего потока данных, ибо там совсем всё быстро надо.

Конечно, все эти проблемы надуманы и решаются и легко и просто. Но дурная мысль не ищет таких решений, она просто бродит в переполненном пространстве сознания и подталкивает сделать нестандарт. А, если у молодого инженера отпуск, то прости жена и дети, но папа не «опять сидит за компьютером», а профессионально растёт. Тем более иногда хочется выполнять не кем-то придуманные задачки, а свои, полностью свои.

Рис. 1. Таймеры. Добавляй сколько хочешь. Обратите внимание на грамматическую ошибку. Стыдно, но не хочется Builder устанавливать для перекомпиляции.

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

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

— Разрядность контроллера от 1 до 32, со знаком или без оного. (Не помню проверял ли я работу на малых разрядностях). Используется дополнительный код.
— Количество портов ввода/вывода ни чем не ограничена, разрядность ограничена разрядностью ядра.
— Количество таймеров так же не ограничено. На каждый таймер можно установить свой обработчик прерывания.
— Обработчик прерываний с бесконечным количеством входов, каждый вход имеет приоритет от 0 до 99 (ограничение по причине «и так большого числа»). Возможность запрещать все прерывания или низкоприоритетные только.
— Количество последовательных портов типа UART неограниченно, разрядность ограничена разрядностью ядра.
— Делитель частоты сделан плохо и неправильно, но исправно выдаёт любую частоту для любой периферии или просто наружу контроллера.
— Сопроцессор. О нём ниже.

То есть мы имеем контроллер, поддерживающий основные операции арифметики и прочего изменения битов в словах (плюс, минус, сдвиг, побитовая логика. ). Так же он обращается к внутренней памяти и хранит код программы так же внутри себя. Память используется блочная, именно она является платформозависимой и в настройках программы обязательно нужно указать какая микросхема будет носителем контроллера. Все операции по любому направлению действий выполняются за один такт, это может и не всегда хорошо, но упростило проектирование архитектуры. Исключением является целочисленный делитель, функции которого реализованы в сопроцессоре, деление выполняется медленно, но уверенно. Алгоритм деления был выбран самый простой – побитный.

Хотелось бы рассказать про код команд, но сам не помню из чего он состоит. Исходя из принципа «не использовать то, что не используется» даже длинна кода команды является величиной не константной, тем более его содержимое. Скажем, если в компилируемой программе встречается 14 команд, то каждая команда кодируется 4 битами, если используется 18 команд – выделяется пятый бит. Плюс к каждой команде добавляется бит длинны, если он равен 0, то команда одинарная, если 1 – двойная, или наоборот, это не важно. Двойная команда нужна для операций, содержащих адрес ОЗУ или ПЗУ. Добавим к этому то, что шины адреса так же имеют не константные длины, и получим полный бардак в коде команд, рассматривать его никаким дизассемблером смысла нет, как собственно и ассемблер в этом контроллере.

Читайте также:  Подставка для винных бутылок своими руками

Форт – вот тот язык, который позволил мне реализовать эти странные идеи. Форт прост и низкоуровневый. Писать компилятор данного языка – одно удовольствие. Ну, конечно, все конструкции языка не поддерживаются, только основные по пересылке данных и их изменении.


Рис. 2. Руководство достаточно скромное. Нескромное так и не написано.


Рис. 3. Вторая часть руководства. Не знаю почему, но окно расширить нельзя. Есть ещё и третья часть, но уж совсем скучная.

И, естественно, мы имеем стековый контроллер. То есть Форт функционирует в своей естественно среде – в стеке, в аппаратном стеке, а не медленном программном. «Всё за такт!» — второй девиз проекта. Аппаратный стек позволил при переходе в функции или вызове прерывания сразу приступать к выполнению команд обработки данных, без необходимости сохранять контент прерванного процесса. «Новые» данные просто помещаются в стек сверху, «старые» уходят в глубь и прекрасно там сохраняются. Затем «новые» данные, поучаствовав в разных операциях, благополучно переходят в ОЗУ или другие места, а «старые» выталкиваются на вершину. При возврате в прерванный участок кода никто ничего не заметит. Адрес прерванного кода сохраняется в другом стеке, и максимальное количество прерванных процессов зависит только ото глубины Стека Возвратов. Это величина настраивается при компиляции, хоть бы и «очень большое число». Параметры в функции передаются так же через стек.

Stackcpu – именно так и называется контроллер, почему-то латиницей, хотя писать код можно и кириллицей. Что я и делаю, приведу пример функции «меняем_биты_в_слове»:

Где: «читаем_из_нужного_порта», «меняем_прочитанное_из_нужного_порта», «записываем_в_требуемую_ячейку_памяти» — функции, выполняющие определённые действия.

Ну не псих ли я красиво ли? Приведу ещё доказательства, программа управления светофором:

Ну что, псих красиво? Третий принцип проекта: «Литературный язык в управление электроникой!» Хотя, как показала практика, писать так программы довольно утомительно. Для знатоков Форт сообщу, что точку мой компилятор воспринимает как разделитель, и запятую тоже. Конечно, лучше использовать язык С, но компилятор С мне не по зубам, а использовать сторонние компиляторы архитектура не позволяет.


Рис. 4. Среда разработки с отчётом компилятора и линковщика.

Сколько ёмкости FPGA занимает контроллер? Да кто ж его знает. Всё зависит от разрядности числа, выбранной периферии, ещё чего-то, и от текста программы. В контроллере не будет умножителя, если он не встречается в программном коде, или не будет делителя, если его не использует программист. Под программистом я подразумеваю себя, так как других программистов данного контроллера не существует (принцип «не использовать тем, кто не использует»). По блочной памяти для ОЗУ данных и ПЗУ команд: минимум два блока, максимум вся блочная память кристалла.

Максимальная частота работы высчитывается только опытным путём, под конкретную архитектуру. Один из моих 24 разрядных контроллеров не работал на частоте 48 Mhz в Spartan2, на частоте 40Mhz заработал. В Spartan6 на сотне Mhz работал 32 разрядный. А может и на паре сотен заработает, ничего в нём такого сложного нет.


Рис. 5. Вот такой код увидит процессор. Обратите внимание, одна команда FORTH – это одна команда ядра процессора – один системный такт.

Первый PS: упомяну одну возможность сопроцессора – фильтр. Обычный БИХ фильтр. Но вот, что необычного в нём, так это то, что он использует плавающую точку. Не то что б в этом был какой-то смысл, просто прочитал какую-то книжку про форму представления чисел, и решил: ерунда интересна эта ваша плавающая точка, сделаем.


Рис. 6. Моделирование результатов работы фильтра. Высчитывается логика кода VHDL с точностью до битика.

Так же были планы по превращения проекта в систему на кристалле: добавление различных, писанных на VHDL блоков в периферию контроллера. И вроде не так уж и сложно, но запал иссяк. Дурные мысли меня покинули, и бродят где-то между программистами и электронщиками. И зовут их теперь Стартапами.
Так что, если к вам кто-то придёт и представится Стартапом, подумайте, а не скрывается ли под ним какой-нибудь Времяубиватель.
И ещё одно PS: С другой стороны, за время работы над проектом Stackcpu я неплохо подучил три два языка программирования:
1. FORTH, точнее некое его подмножество, необходимое для проверки работоспособности контроллера.
2. С++, на чистом С было бы тяжело написать среду разработки и компилятор.
3. VHDL, именно буквы этого языка и есть контроллер.

Источник

Оцените статью
Своими руками