Arskama.ru

Автомобильный журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Что нужно чтобы запустить шаговый двигатель

Как вырабатывать цифровые импульсы, используя 555 таймер IC для шагового двигателя? [закрыто]

Виджей

Мне нужно запустить биполярный шаговый двигатель с 555 таймером IC.

Существует ли какая-либо простая схема для генерации импульсов для вращения шагового двигателя по часовой стрелке, против часовой стрелки с желаемой скоростью?

Если имеется много моделей 555 микросхем, укажите также тип или номер модели.

И я также хочу знать, что внутри IC и как она работает.

Могу ли я использовать вышеуказанную схему?

Крис Страттон

Олин Латроп

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

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

Виджей

Дэйв Твид

TE555-1 — это не аналоговый чип таймера, с которым все знакомы; это на самом деле запрограммированный 8-контактный MCU от Talking Electronics

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

Крис Страттон

Вы должны быть в состоянии использовать 555 в сочетании с L297 и L298 для привода небольших (размером с дисковод гибких дисков и немного больше) шаговых двигателей.

Несмотря на то, что Олин прав в отношении ускорения в случаях средней и высокой производительности, для сравнительно медленных скоростей и небольших нагрузок вы можете просто начать выдавать шаговые импульсы с 555. Решения с микроконтроллером секвенсора действительно имеют много преимуществ: по стоимости, пространству на плате, профилированию движения, и гибкость, однако некоторые микросхемы могут быть полезны для их способности модулировать потенциально сложные части проблемы, такие как ШИМ (прерывистое) текущее регулирование — то, что может быть сделано в программном обеспечении, но может добавить много сложностей в учебный проект ,

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

Запуск шагового двигателя без электроники

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

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

Для эксперимента использовался вот такой шаговый двигатель:

Обычно у них четыре вывода и две обмотки, в большинстве случаев, но есть и другие конечно. В данном случае будет рассмотрен самый ходовой двигатель.

Схема шагового двигателя

Схема обмоток данного двигателя выглядит вот так:

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

Для запуска двигателя понадобится:

  • Электролитический конденсатор 470-3300 мкФ.
  • Источник переменного тока 12 Вольт.

Замыкаем обмотки последовательно, как на схеме ниже.

Середину проводов нужно скрутить и спаять.

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

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

Если перекинуть вывод конденсатора с одного выхода питания на другой, то вал двигателя начнет вращаться в другую сторону.

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

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

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

Сморите видео

Управление шаговым двигателем с помощью Arduino и потенциометра

Шаговые двигатели с каждым годом приобретают все большую популярность в мире электроники поскольку именно они обеспечивают превосходную точность позиционирования различных механизмов. В этой статье мы рассмотрим подключение одного из самых распространенных шаговых двигателей 28-BYJ48 к плате Arduino при помощи модуля ULN2003 и управление им с помощью потенциометра.

В нашей предыдущей статье про подключение шагового двигателя к плате Arduino мы управляли углом его поворота из она монитора последовательной связи, в этом же проекте мы будем управлять поворотом шагового двигателя вращая ручку потенциометра. Если мы будем вращать ручку потенциометра по часовой стрелке, то и шаговый двигатель будет поворачиваться по часовой стрелке, а если мы ручку потенциометра будем поворачивать против часовой стрелки – то и шаговый двигатель будет вращаться против часовой стрелки.

Читать еще:  Датчик контроля температуры двигателя автомобиля

Общие принципы работы шаговых двигателей

Внешний вид шагового двигателя 28-BYJ48 (купить на AliExpress) представлен на следующем рисунке:

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

Начнем с того, что шаговые двигатели не вращаются, а “шагают”, поэтому они и называются шаговыми двигателями. То есть в один момент времени они будут передвигаться только на один шаг. Чтобы добиться этого в устройстве шаговых двигателей присутствует несколько катушек и на эти катушки нужно подавать питание в определенной последовательности чтобы двигатель вращался (шагал). При подаче питания на каждую катушку двигатель делает один шаг, при последовательной подаче питания на катушки двигатель будет совершать непрерывные шаги, то есть вращаться. Давайте более подробно рассмотрим катушки, присутствующие внутри шагового двигателя.

Как можно видеть из рисунка, двигатель имеет однополярную катушку с 5 выводами. Но фактически это 4 катушки, на которые нужно подавать питание в определенной последовательности. На красные провода необходимо подать +5V, на остальные 4 провода необходимо подать землю чтобы запустить в работу соответствующую катушку. Мы будем использовать плату Arduino чтобы подавать питание на эти катушки в определенной последовательности и тем самым заставлять двигатель вращаться. Более подробно ознакомиться с принципами работы шаговых двигателей можно в статье про подключение шагового двигателя к микроконтроллеру AVR.

Так почему же этот двигатель называется 28-BYJ48? Честно говоря, мы не знаем точного ответа на этот вопрос. Некоторые наиболее важные технические характеристики этого шагового двигателя приведены на следующем рисунке.

На первый взгляд от такого количества характеристик может закружиться голова, но давайте попробуем выделить из них самые важные, те, которые нам понадобятся для дальнейшей работы. Во-первых, мы знаем, что это шаговый двигатель 5V, поэтому необходимо подавать на красный провод 5V. Также мы знаем что это четырехфазный шаговый двигатель поскольку в нем четыре катушки. Передаточное число этого двигателя — 1: 64. Это означает, что вал, который вы видите снаружи, сделает одно полное вращение в том случае, когда двигатель внутри сделает 64 оборота. Это происходит благодаря шестерням, которые включены между двигателем и выходным валом. Эти шестерни помогают в увеличении крутящего момента.

Еще одним важным показателем, который нам следует знать, является угол шага: 5.625°/64. Это значит что когда двигатель сделает последовательность в 8 шагов он будет поворачиваться на 5.625° при каждом шаге и за один полный оборот он сделает 64 шага (5.625*64=360).

Расчет шагов на оборот для шагового двигателя

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

В Arduino для управления двигателем мы будем использовать 4-шаговую последовательность, поэтому угол шага будет составлять 11.25°. Поскольку изначально он равен 5.625°(приведен в даташите), то для 8 шаговой последовательности получим 11.25° (5.625*2=11.25).

Справедлива следующая формула:

Количество шагов за оборот = 360 / угол шага.

В нашем случае 360/11.25 = 32 шага за оборот.

Зачем нужен драйвер мотора для управления шаговым двигателем

Большинство шаговых двигателей будут работать только с помощью модуля драйвера мотора. Это связано с тем, что микроконтроллер (в нашем случае плата Arduino) не может обеспечить достаточный ток на своих контактах ввода/вывода для работы двигателя. Поэтому мы будем использовать внешний драйвер мотора для управления нашим шаговым двигателем — модуль ULN2003 (купить на AliExpress). В сети интернет можно найти рейтинги эффективности различных драйверов мотора, но эти рейтинги будут меняться в зависимости от типа используемого шагового двигателя. Основной принцип, которого следует придерживаться при выборе драйвера мотора – он должен обеспечивать достаточный ток для управления шаговым двигателем.

Работа схемы

Схема устройства представлена на следующем рисунке.

Чтобы подавать питание на соответствующие катушки шагового двигателя мы будем использовать цифровые контакты 8, 9, 10 и 11 платы Arduino, к которым подключены соответствующие контакты драйвера двигателей ULN2003. Потенциометр, с помощью которого мы будем управлять вращением шагового двигателя, подключен к аналоговому контакту A0 платы Arduino.

Драйвер мотора запитывается от контакта 5V платы Arduino. Но если вы будете подсоединять какую-нибудь нагрузку к шаговому двигателю, то вам потребуется внешний источник питания для драйвера мотора. Мы в нашем примере эксплуатируем шаговый двигатель без нагрузки, поэтому нам хватило питания от платы Arduino. И не забудьте соединить землю платы Arduino с землей драйвера мотора.

Объяснение программы для платы Arduino

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

Номер шагаКонтакты, на которое подается питаниеКатушки, на которое подается питание
Шаг 18 и 9A и B
Шаг 29 и 10B и C
Шаг 310 и 11C и D
Шаг 411 и 8D и A

На драйвере мотора есть 4 светодиода, по свечению которых можно судить о том, на какую катушку подается питание в конкретный момент. Более подробно все эти процессы можно посмотреть в видео, приведенном в конце статьи.

Мы напишем программу, в которой необходимое количество шагов для двигателя мы будем вводить в мониторе последовательного порта (serial monitor) платы Arduino. Полный текст программы приведен в конце статьи, здесь же мы рассмотрим наиболее важные его фрагменты.

Как мы рассчитали ранее, полное число шагов для полного оборота нашего шагового двигателя, равно 32, пропишем это в следующей строчке кода:

#define STEPS 32

Далее мы должны сказать плате Arduino через какие ее контакты мы будем управлять шаговым двигателем (то есть к каким ее контактам подключен драйвер мотора).

Читать еще:  Время работы ракетных двигателей

Stepper stepper (STEPS, 8, 10, 9, 11);

Примечание: последовательность номеров контактов, указанная в приведенной команде (8,10,9,11) – специально упорядочена таким образом чтобы подавать питание на катушки шагового двигателя в правильном порядке. Если вы измените номера контактов, к которым подключен шаговый двигатель, то вы соответствующим образом должны их упорядочить для подачи в приведенную команду.

Мы будем использовать специальную библиотеку для работы с шаговыми двигателями, поэтому для задания скорости вращения шагового двигателя мы можем использовать команду вида:

Для двигателя 28-BYJ48 скорость вращения можно установить в диапазоне от 0 до 200.

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

Количество шагов, которое должен сделать двигатель, определяется переменной “val”. Поскольку мы имеем 32 шага (для оборота) и передаточное число 64 мы должны сделать 2048 (32*64=2048) “шагов” в этой команде для совершения одного полного оборота двигателя.

Соответственно, чтобы шаговый двигатель сделал один шаг по часовой стрелке, необходимо использовать команду:

А один шаг против часовой стрелки:

В нашей программе мы будем считывать значение на аналоговом контакте A0 платы Arduino и сравнивать его с предыдущим значением (Pval). Если оно увеличилось, то мы будем делать 5 шагов двигателем по часовой стрелке, а если уменьшилось – то 5 шагов двигателем против часовой стрелки.

potVal = map(analogRead(A0),0,1024,0,500);
if (potVal>Pval)
stepper.step(5);
if (potVal

stepper.step(-5);
Pval = potVal;

Работа проекта

Когда вы сделаете все необходимые соединения в схеме данного проекта у вас должна получиться примерно следующая конструкция:

После этого загрузите программу в плату Arduino и откройте окно монитора последовательной связи (serial monitor). После этого вы можете вращать ручку потенциометра и наблюдать как в соответствии с ее поворотами шаговый двигатель будет вращаться по часовой и против часовой стрелки.

Исходный код программы

Код программы достаточно простой, я надеюсь у вас не вызовет никаких затруднений реализация данного проекта.

Вам не нравятся шаговые моторы, да вы просто не умеете их готовить

  1. Начало изучения
  2. Первая тестовая программа — равномерное вращение
  3. Вторая тестовая программа — разгон
  4. Третья тестовая программа — подбор стартового шага
  5. Четвертая тестовая программа — подбор минимального шага
  6. Пятая тестовая программа — минимальный шаг и торможение
  7. Шестая тестовая программа — равноускоренное движение
  8. Ссылка для скачивания: Программы и схемы для тестов

В рамках проекта «Балансирующий робот» я, с целью изучения возможности использования в качестве ходовых, приобрел пару шаговых двигателей 35HM-0304A4. Планируется использовать их напрямую — без редукторов на колесных осях, что конечно накладывает на двигатели определенные ограничения.

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

Из документации при покупке ясно было только два факта: двигатель имеет активное сопротивление обмотки

26 Ом; шаг двитателя 0.9 градуса. Все остальное требовалось выяснить.

На вал двигателя уже запрессована зубчатая шестерня, мне достался экземпляр с 15 зубами. С боков имеются очень удобные ушки, для крепления к корпусу балансирующего робота, это удачная находка, я уже использовал их в 3D модели нового робота. Масса мотора около 100 гр.

Измеренные значения составили: индуктивность

0.9мГн, активное сопротивление

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

Управлять шаговиком я буду при помощи хорошо зарекомендовавшего себя драйвера DRV8825 на плате китайского производства. Особенностью данного драйвера является поддержка тока до 2,5A, при этом до 1.5A даже не требуется радиатор (в схеме драйвера используются полевые транзисторы).

При использовании платы изображенной ниже, максимальный ток регулируется при помощи подстроечного резистора. Головка вращения резистора металлическая и находится под напряжением (0-1.5V), измерив данное напряжение при помощи мультиметра (Головка резистора — GND) и умножив полученное значение на два, получаем максимальный ток фазы двигателя, т.е. драйвер ограничит ток каждой фазы нашего двигателя именно этим значением.

Выводы на плате драйвера подписаны, но я приведу рисунок и поясню значения тех выводов, которые мы будем использовать.
  • ENABLE — ноль на данной ноге включает двигатель, т.е. если других сигналов не поступило, то вал двигателя будет жестко зафиксирован в положении близком к текущему.
  • M0,M1,M2 — настройка микрошагового режима, драйвер может работать с микрошагом до 1/32 значения от полного шага. По умолчанию, когда данные выводы не подключены, используется полный шаг, для нашего мотора это 0.9 градусов (400 шагов на оботор).
  • RESET — сброс драйвера, вместе с сигналом SLEEP будет подтянут к логической 1 — (5В).
  • SLEEP — сон драйвера, вместе с сигналом RESET будет подтянут к логической 1 — (5В).
  • STEP — по положительному фронту на данном входе (сигнал меняется с 0 на 1) двигатель начинает делать один следующий шаг.
  • DIR — направление вращения, в зависимости от того, какой логический сигнал пришел от контроллера 0 или 1 изменяется направление вращения вала шагового двигателя.
  • VMOT — напряжение питания двигателя.
  • GND — земля.
  • B2-B1, A2-A1 — согласно названию можно, да и нужно сделать вывод, что это выводы на обмотки фаз шаговика.
  • FAULT — сигнал аварии — не используется в нашем случае.
  • GND — еще один вывод земли.

Я применю китайский клон платы Arduino nANO, но не обычный клон, а довольно качественный и брутальный от robotdyn.com. Его особенность в том, что подключается он по кабелю microUSB, а не mini, как подобные. Других отличий, кроме качества изготовления платы, нет.

Для работы драйвера DRV8825 требуеться напряжение от 8.5 до 35 вольт, но два литиевых аккумулятора 18650, подключенные последовательно, не всегда могут обеспечить столь высокое напряжение, поэтому логично с моей стороны было применить повышающий импульсный стабилизатор. Он и повысит напряжение и стабилизирует его на заданном уровне.

Читать еще:  606 двигатель как отключить егр

Такой стабилизатор стоит недорого, и поддеживает до 3А ток. Благодаря своей импульсной природе он слабо греется и имеет хороший до 98% коэффициент полезнго действия (КПД).

В данном экземпляре используется микросхема XL6009.

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

Схема, которую я собрал, изображена ниже. Так как запитываю всю схему от одного источника питания, соединять земли Arduino и DRV8825 не пришлось, но если источники питания разные, то следует соединить GND Arduino и GND DRV8825 отдельным проводником. На питание моторов установлен дополнительный конденсатор, его я поставил по практическим рекомендациям.

Также стоит отметить наличие диода Шоттки на положительном входе питания Arduino NANO, наличие диода защищает схему от провисания питания контроллера Arduino, когда он запитан от USB, а основная схема обесточена.

Для управления используется три сигнала: ENABLE, STEP и DIR. Они подключены к пинам D4, D3, D2 контроллера Arduino. Далее я приведу несколько программы, которые я использовал при тестировании. Пойдем от простого к сложному.

Пример test_step1 позволяет запустить мотор, он будет делать 4 оборота в одну, затем в другую сторону. Программа состоит из 2-х файлов test_step1.ino и step_motor1.h, оба должны быть расположены в каталоге test_step1.

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

test_step1.ino основной файл, а step_motor1.h содержит функции по работе с шаговым мотором и константы описывающие шаговый двигатель (управление и скорость).

Файл «test_step1.ino»

Файл «step_motor1.h»

Пример test_step2 позволяет запустить мотор, он будет делать 40 оборота в одну, затем в другую сторону. Программа состоит из 2-х файлов test_step2.ino и step_motor2.h, оба должны быть расположены в каталоге test_step2.

В программе реализован разгон двигателя, но ускорение не постоянное. Торможение снижением скорости не реализовано.

Отличие от test_step1 в том, что двигатель разгоняется до определенной максимальной скорости постепенно, при остановке мотор обесточивается, что позволяет свободно вращать вал.

Файл «test_step2.ino»

Файл «step_motor2.h»

Пример test_step3 позволяет управлять величиной начального шага мотора. Программа состоит из 2-х файлов test_step3.ino и step_motor3.h, оба должны быть расположены в каталоге test_step3.

В программе реализован ввод значения начального шага через последовательный порт. Скорость соединения по последовательному каналу 115200, но ее можно легко изменить, переписав соответствующую строку в программе.

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

Плавное торможение в программе не реализовано.

Файл «test_step3.ino»

Файл «step_motor3.h»

Пример test_step4 позволяет управлять величиной минимального шага мотора, т.е. фактически регулировать максимальный разгон. Программа состоит из 2-х файлов test_step4.ino и step_motor4.h, оба должны быть расположены в каталоге test_step4.

В программе реализован ввод значения минимального шага через последовательный порт. Скорость соединения по последовательному каналу 115200, но ее можно легко изменить, переписав соответствующую строку в программе.

Следует подключить контроллер arduino к компьютеру, загрузить программу, открыть монитор порта, установить в мониторе порта скорость 115200, в верхней строке для ввода данных ввести число и нажать ввод, это число будет воспринято программой как величина минимального шага. Программа запустит двигатель с величины шага 1500 микросек. (меняется в #define START_STEP_TIME 1500L ), а затем начнет пытаться наростить скорость до введенного значения, если двигатель не застопориться, значит исследуемая скорость подходит, в противном случае шаг стоит увеличить и попробовать вновью.

Плавное торможение в программе не реализовано, по этой причине двигатель может делать лишние шаги при торможении.

Файл «test_step4.ino»

Файл «step_motor4.h»

Пример test_step5 позволяет управлять величиной минимального шага мотора, т.е. фактически регулировать максимальный разгон. Программа состоит из 2-х файлов test_step5.ino и step_motor5.h, оба должны быть расположены в каталоге test_step5.

В программе реализован ввод значения минимального шага через последовательный порт. Скорость соединения по последовательному каналу 115200, но ее можно легко изменить, переписав соответствующую строку в программе.

Следует подключить контроллер arduino к компьютеру, загрузить программу, открыть монитор порта, установить в мониторе порта скорость 115200, в верхней строке для ввода данных ввести число и нажать ввод, это число будет воспринято программой как величина минимального шага. Программа запустит двигатель с величины шага 1500 микросек. (меняется в #define START_STEP_TIME 1500L ), а затем начнет пытаться наростить скорость до введенного значения, если двигатель не застопориться, значит исследуемая скорость подходит, в противном случае шаг стоит увеличить и попробовать вновью.

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

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

Файл «test_step5.ino»

Файл «step_motor5.h»

Ниже приведена диаграмма разгона торможения шагового двигателя по программе test_step5.

После анализа test_step5, я решил попробовать реализовать программу, которая разгоняет двигатель равноускоренно. Это было реализовано в программе test_step6, а вернее в step_motor6.h.

Файл test_step6.ino существенных изменений не получил.

Значительных улучшений при равноускоренном вращении я не получил, усложнился алгоритм расчета, пришлось в связи с влиянием времени расчета на шаг, включить расчет внутрь шага, т.е. расчеты производятся во время шага, а не после. Ускорение можно менять изменяя константу #define ACCELERATION_START 6000 // Стартовое ускорение шаг/Сек2.

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector