Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Зазеркалье – это погружение в глубины мифов, магии и странствий. Вас ждут сражения на дорогах удивительных миров, соединенных порталами. Сочная графика и потрясающий сюжет, множество героев, общение с игроками. Без рекламы и любых назойливых ограничений.

Зазеркалье – фэнтези MMORPG

Мультиплеер, Ролевые, Приключения

Играть

Топ прошлой недели

  • cristall75 cristall75 6 постов
  • 1506DyDyKa 1506DyDyKa 2 поста
  • Animalrescueed Animalrescueed 35 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
3
propropolis

Шнайдер Электрик в АПТ. Программирование⁠⁠

5 месяцев назад

Кто нибудь занимался программированием контроллера Шнайдер Электрик? Контроллер в управлении автоматикой пожаротушения. Нужно добавить Auma по управлению через интерфейс RS 485.
Консультировался с одним человеком. Он когда то сталкивался с таким. Говорит, что после подключения и попытки слить программу, контроллер слетел на заводские настройки, и влетели на лям. Нужен ноутбук с оригинальной программой, который дают немцы вместе с контроллером.
Может у кого был опыт, стоит экспериментировать?

[моё] Контроллер Шнайдер Программирование Апт КИПиА Пожарная сигнализация Помощь Спроси Пикабу Текст
2
4
Zeleboba36

Ответ konstantin.wolf в «Творю. Очередная выходка»⁠⁠

1 год назад

Не ожидал, аж целого ответного поста критики моей работы. А вы сударь, видимо кто-то из ОТ, ПБ, ТБ. Или не так? Раз уж вы так распереживались, то я вам отвечу. Что бы попытаться успокоить.

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

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

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

Я в своей версии эту функцию немного поменял. у меня прописана система ошибок. Нет воды, нет показаний датчика температуры и прочие мелочи процесса. А с положением нуля, я поступил следующим образом. При запуске машина считывает всё датчики и определяет своё состояние. Если единственное что остаётся - привод не в 0 то на экране горит "- -" И для оператора это означает, что надо нажать конку включения привода. И тогда он едет до нулевой точки. Параллельно с ним запускается таймер. Таймер считает время чуть большее чем необходимо приводу до полного цикла. И если привод, по сути сделал оборот, и не нашёл нулевую точку то он останавливается. А контроллер вешает ошибку Е4 и больше делать ничего не даёт.

Что касается доработок. Была идея сделать автомат. По времени. Но не стал. Машина задумана как полуавтомат. Единственное, может быть, добавлю педаль для работы оператора, что бы он руками мог с продуктом работать свободнее. Поэтому не переживайте.

И что меня записали в 40 летние, даже не знаю.... Обидно что состарили. Но с другой комплимент. Всём добра, мира и печенек)

Показать полностью
Самоделки Контроллер Программирование Я это сделал YouTube Текст Ответ на пост
0
konstantin.wolf

Ответ на пост «Творю. Очередная выходка»⁠⁠1

1 год назад

Автор сделал хрень на коленке и выдает это как достижение. Мол, смотрите, какой я молодец.

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

Во-вторых - будет ли автор "сего творения" отвечать, если это ардуино-подобный самодельный контроллер при глюке намотает оператора?

Просто в жизни к своим 40 годам пора понять что такие вещи немного сложнее чем кажутся. Я, конечно, понимаю, что ардуина подарила нам много мамкиных инженеров считающих что они научились делать серьезные вещи. Но эти же люди не понимают как все работает. Все их познания подключить библиотеку и моргать светодиодиком. А если вместо светодиода подключить контактор... А это еще поощряется. Ладно вы там занимаетесь какими поделками для себя - пожалуйста. Но отвалите от промышленного оборудования в котором нихера не понимаете. Пока никого не унесли на тот свет.

Самоделки Контроллер Программирование Я это сделал Видео YouTube Длиннопост Ответ на пост Текст
12
32
Zeleboba36

Творю. Очередная выходка⁠⁠1

1 год назад

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

Самогонные шланги в пароконвектомате тому пример. Но до сих пор работают. Родные уже пришли. Ждут своей очереди на установку.

Возникла у нас на производстве очередная проблема. Сломался термоусадочный танк. Это машинка для термоусадки вакумной упаковки на продукте.

Видео для тех кому интересно что это такое.

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

Отваливаются дорожки, лопаются дорожки. Обрываются сквозные переходы между сторонами платы. В общем латалась плата долго, часто и регулярно. Пока не озябла вовсе. Начали искать плату. Нашли поставшика. Срок поставки вечность. Цена конь. И из-за санкций гарантий доставки никаких. Руководством было принято решение отправить машину в "зал славы" до лучших времен. А продукт делать без термоусадки.

Но я был бы не я. Где то, что то стоит сломаное. И не работатет. Руки чешутся. Да и хочется для собственного удовлетворения что-то сделать хорошее, приятное и что бы результат был виден и ощутим, так сказать физически.

Сел ковырять плату. На борту, в самом центре сей системы, находится Atmel Mega 64. Что то знакомое подумал я. И принялся за работу.

Расписывать весь путь от идеи до воплощения не буду. Как говорят местные это место для морального разложения :-)

Результатом сего рукоблудия стал новый контроллер. Изготовленый по физическим размерам предыдущей платы. Но уже на базе Atmega16a.

Функционал реализовал программно. Писал на СИ. Пришлось немного повозиться. Основная беда не хватает времени нормально погрузиться в процесс. Но я собрался и я смог.
И машина заработала.
И я рад.
И в цеху рады.
И все рады.
И моя душенька довольна.
Может и из вас кто- нибудь тоже порадуется.

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

Показать полностью 3
[моё] Самоделки Контроллер Программирование Я это сделал Видео YouTube Длиннопост
10
4
SergioAli

Siemens S7-300/S7-1200 и весы МАССА-К⁠⁠

1 год назад

Ребята помогите, пожалуйста, тупому.

Есть весовой терминал МАССА-К AB(RUEW) с вайфаем, эзернетом и прочими RS-232.

Есть PLC Siemens S-7 300 и S-7 1200 + HMI панель от сименса. Нужно получить в ПЛК текущий вес с терминала и загнать его в панель ЧМИ, точнее загнать его в дата блок и оттуда забрать в панель. Проблема в том, что я не знаю как организовать запрос из плк в весовой терминал и получить их в блок DB на плк.

Через PowerShell всё получаю таким вот кодом:

$client = new-object net.sockets.udpclient(0)

$peerIP = "10.10.70.136"

$peerPort = "5001"

[Byte[]] $send = 0xF8,0x55,0xCE,0x01,0x00,0x23,0x23,0x00

[void] $client.send($send, $send.length, $peerIP, $peerPort)

$ipep = new-object net.ipendpoint([net.ipaddress]::any, 0)

$receive = $client.receive([ref]$ipep)

echo ($receive|ForEach-Object ToString X2)

$client.close()

Первая строка – создали объект для отправки в сеть.

Вторая и третья – задали адрес и порт

Четвёртая – шестнадцатеричная строка запроса веса (из руководства, CRC там заранее рассчитана)

Пятая – отправили запрос

Шестая – создали объект для приёма из сети.

Седьмая – приняли ответ

Восьмая – вывели побайтно в виде кодов (иначе смайликами всё нарисует)

Девятая – закрыли соединение.

Ниже снимок экрана, на весах стоит груз на 114,7 кг. В руководстве опечатка, длина сообщения 13 символов 0x0D

0x47b – 1147  и множитель 100г (цифра 3 как цена деления)

цветом выделена масса в ответе терминала в шестнадцатеричной системе счисления

цветом выделена масса в ответе терминала в шестнадцатеричной системе счисления

Помогите, если можете. Очень надо.

Комменты для минусов внутри.

Показать полностью 1
АСУ ТП Асушник Отдел АСУ КИПиА Автоматизация Программирование Программирование ПЛК ПЛК Контроллер Программирование Siemens Siemens Весовой контроль Помощь Программист IT
37
73
alldendy
alldendy
Рукодельники

Космический корабль своими руками (A Hande-made spaceship) Часть 1⁠⁠

4 года назад

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

Сначала эскиз и ТЗ:

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

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

3. В нем должна быть огромная панель с множеством кнопок управления. Было бы интересно эти кнопки завязать с контроллером (например Ардуино) и чтобы будущие капитаны корабля проходили задание по заранее написанному алгоритму – например взлет корабля или заход на посадку. Данные задания можно сопровождать комментариями диспетчера с земли.

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

5. В корабле должно быть много разного света. И так чтобы этот свет можно было включать, отключать в зависимости от происходящего.

Ну как? Посмотрим, что у нас получится.

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

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

Долго я размышлял из какого материала делать корпус, а точнее скелет. Я искал легкий и прочным материал, такой чтобы был уже полуфабрикатом – взял, отрезал, прикрутил и готово.  Выход нашел мой коллега по работе Евгений, он мне подсказал использовать профили для ГКЛ. Благо их в строительном магазине в достаточном разнообразии.

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

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

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

К моему удивлению микросхемы просто идеально распиливаются ножовкой по металлу.  Распиливая схемы я набрал один сплошной ковер микросхем.

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

Поэтому я отпаял ножки лампы от платы и припаял к ним провода, сделав удлинитель.

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

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

Показать полностью 10
[моё] Космос Микроконтроллеры Контроллер Программирование Своими руками Гараж Видео Длиннопост Рукоделие с процессом
7
3
ITslesar
ITslesar

Ответ на пост «Когда попытался исправить провалы в образовании...⁠⁠

4 года назад

Проект FLProg Сергей Глушенко и группа разработчиков https://flprog.ru/

Ответ на пост «Когда попытался исправить провалы в образовании...

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

Видео о истории создания, цели и задачи проекта. https://youtu.be/RYqFdoChV58

Показать полностью 1
Flprog Программирование Контроллер Видео
1
471
Hyperspacewind
Лига Радиолюбителей

Проект «Качок»⁠⁠

5 лет назад

Поступил от одной фирмы заказ. Нужно было разработать мозги для электрической помпы, которую они проектировали. Предназначалась эта штука для проверки датчиков давления в полевых условиях. Собственно, помпа уже была. Ручная. Но, оказалось, что, для того, чтобы накачать 40 атмосфер вручную, нужно быть качком. Качки среди тетенек-метрологов — редкость. Следовательно, ручной труд нужно было срочно механизировать!


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

А вот с электронной начинкой что-то пошло не так. Инженеры заказчика сначала попытались сделать все сами. Конечно же на ардуино. Прицепили к ней силовую часть на реле, кнопки, токовый датчик… И, получили что-то очень грустное, и упорно не желающее работать как надо. Но общий принцип и бета версия прототипа у меня была. Осталось все воплотить на более достойном уровне.


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


Плату буду делать в EagleCAD.


Платка была мелкая, в ограничение демоверсии влезала легко. Первым делом, решил нарисовать цепь питания. Контроллер потребляет мало. Значит, хватит обычного линейного стабилизатора. Делаем ему обвязку из конденсаторов на входе и выходе. Не забываем зашунтировать электролиты керамикой, а то у них огромная индуктивность, и наносекундные импульсы они почти не фильтруют.Так… А чем включать? Актуатор жрёт довольно неслабый ток. А заказчик дал нам гламурную кнопочку, чтоб было красиво. Что делать? Будем усиливать. В разрыв цепи ставится Р-канальный мосфет, который открывается кнопкой. Современные транзисторы могут схавать дикие токи при очень мелких габаритах. Заодно, получаем халявную защиту от переполюсовки.

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

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


Перехожу обратно к схеме. Впихиваю контроллер. И сразу разъем для программирования. Надо, чтобы чип прошивался прямо на плате. Шить их перед запайкой было бы ни разу не технологично. Рисуем разъемы под кнопки и светодиод индикации. Добавляем делитель напряжения, чтобы измерять, что у нас там по питанию. И, обязательно, гнусную пищалку!

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

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


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

Разумеется, модуля в библиотеке EagleCAD нет. Придется рисовать.


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


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


Еще несколько штрихов. Разглядываю плату. Правлю мелкие косяки. Кажись, можно воплощать в железе.

жЫрно печатаю маску с дорожками на бумаге. Через неё мы будем засвечивать фоторезист!

Если посмотреть бумагу на просвет, видно, что тонер закрашивает её недостаточно плотно. Это плохо. Скорее всего, через такую маску засветится что не надо, и будет брак. На этот случай есть специальная жижа, которая вызывает набухание тонера и его уплотнение. Зовется она Density Toner и купить ее можно в фирмах продающи расходники для типографий. Рублей 400 за баллон стоит, хватает очень надолго. Еще можно шаблон подержать в парах ацетона, от них тонер тоже набухает знатно.

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


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

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

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

Шел второй час кодинга. Устремив взор в белое безмолвие монитора я пытался разобраться с регистрами незнакомого мне ранее контроллера. В какой-то момент мне захотелось бросить всё, и написать программу на Ардуино… Я обернулся. Ди Хальт смотрел на меня, и с укоризной во взгляде правил лезвие своего кукри, как бы намекая, что не стоит его разочаровывать.


Главная проблема устройства в том, что все надо делать быстро. Помпа давит гидравлику и там, за считанные доли секунды, может накачать огромное давление и все поломать. И надо одновременно и интерфейс обрабатывать и замерять давление. Датчика давления там нет, но косвенно его можно понять по току двигателя. Он ведь напрямую зависит от момента, а момент от сопротивления.


У контроллера нет никакой многозадачности. По кругу выполняется одна единственная программа, в которой и происходит всё интересное. Чтобы многозадачности, все таки, добиться, есть особые приемы. В первую очередь, прерывания.


Прерывания — это особые события, на которые контроллер отвлекается и быстро выполняет куски кода, возвращаясь потом к основной программе. Допустим, прилетел байт в UART. Надо скопировать его в какой-нибудь буфер. Ждать нельзя, а то прилетит следующий, вытолкает из регистра тот, что был, и мы его потеряем. А вот если вынести код, пихающий байты в буфер, в прерывание, то в момент прихода байта контроллер будет его быстренько сохранять, почти не тормозя выполнение основной программы.


Так вот. Я благодарен Ди Хальту, за то, что он сразу заставил меня писать на чистом Си. Начинающие ардуинщики обычно не умеют в прерывания. Так и случилось. В той проге, что написали заказчики, крутился основной цикл. В нем была куча задержек. Они нужны, так как, контроллер тикает миллионы раз в секунду, а переходные процессы в кнопках и датчиках происходят намного медленнее, и на полной скорости он будет ловить кучу ошибок.


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


Пока программа прокручивала цикл с задержками, контроллер безответственно профукивал бросок тока. Уменьшить задержки? Тоже плохо.


Вообще, ардуино не запрещает делать все на прерываниях. Проблем тут две.


Первая — обычно, те, кто учится прогать на ардуино, не копают глубоко. Они просто не знают, что вообще бывают прерывания, регистры, и все такое. Бабуино — это такой особый путь.


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


(Ну ну, я тут расхвастался зря. Я очень начинающий разработчик, и нифига не умею. Проект то простой. В то время, как есть те, кто делает на ардуино вещи гораздо более крутые. Но, это как раз люди, знающие архитектуру контроллера и копающие глубоко. Ну, или грамотное использование библиотек, написанных такими людьми.)


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


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


АЦП контроллера тикает с определенной частотой. Как только он померял, что на него приходит, он выдает прерывание. Вот в это прерывание я и засунул кусок кода, отвечающий за измерение тока. Туда же засунул измерение напряжения питания. Сварганив простенький конечный автомат. Пригодится.


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

Теперь нужно было разобраться с кнопками. У нас целых три таймера. Их можно заставить выполнять что-то в прерывании, в то время, как основной цикл занят своими делами.


Заказчик хотел две сенсорные кнопки. Одна должна включать привод, пока на нее давишь. Вторая включать и выключать.


С первой все совсем просто. Кнопка нажата — есть флаг разрешения работать. Основной цикл врубает движок. Нет — вырубает.


Со второй все чуть сложнее. Простейшее решение, сделать так, чтобы нажатие кнопки инвертировало какой-то флаг. Тычешь один раз — он сменяется с «выкл» на «вкл». Еще раз — наоборот.


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


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

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


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


Загружаем код в контроллер. Подаем питание. РАБОТАЕТ!!!

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


Настало время допиливания. Первым делом надо было как то нагрузить актуатор, чтобы понять насколько адекватно у нас идет измерение тока. Ведь от тока зависел и момент. Ага, легко сказать. У него усилие в несколько сот килограмм. И я, даже навалившись на него всем весом, не смог бы создать сколь-нибудь ощутимой нагрузки. Ди посмотрел на это, схватил нож и куда то убежал. Вернулся через пять минут с обрезком толстого резиного шланга, сантиметров на 10. Я даже думать не хочу у кого он его отрезал. Натянули шланг на шток актуатора, на манер крайней плоти. Осталось только воткнуть отвертку в отверстие на конце штока, чтобы шлангу не куда было деваться и попробовать его сжать. Сопротивление кусок резины оказал достойное, удалось даже заклинить актуатор, выведя его на максимальную нагрузку.


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


Оказалось, что сигнал довольно зашумлен. График слегка колбасило.


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


Шумы исчезли, осталась только плавная линия, рисующая график того, как мы нагрузили двигло.


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


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


Настало время суровых испытаний.


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


Оно заработало.


И тут выяснилось, что есть одна проблема. Помпа работает как с воздухом, так и с жидкостью. Воздух сжимается. Качать его нужно долго. Жидкость же накачивается до нужного давления буквально мгновенно.


Так вот. Движок давит со всей дури. И пока сработает защита по току (у нас же кольцевой буфер с интеграцией, и заполняется он не сразу), он успевает накачать слишком много.

Уменьшить буфер? Система начинает реагировать на пусковой ток, как на превышение нагрузки.

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


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


Мне представилась пирамида из костылей. Ага. Нужно построить зиккурат.


И тут…


Это похоже на луч света, внезапно озаривший пасмурное небо. Инсайт! Я дописал одну… Всего одну строчку кода! И двигатель стал плавно разгоняться ШИМом, и развивать строго определенное усилие.


При этом, в программе никакой плавной регуляции не было. Никаких таймеров с ШИМ выходом. Никаких циклов, медленно добавляющих ток двигателю. Ничего.


Просто, в прерывание АЦП я добавил строку, которая, если ток становился больше определенного, отключала его до следующей итерации. И этого оказалось достаточно. АЦП тикает с довольно высокой частотой. Значит, он, совершенно естественным образом будет обрезать большой пусковой ток, автоматически создавая ШИМ с нужной скважностью. А индуктивность двигателя его сгладит. Если же движок упрется в препятствие, его усилие, так же, будет ограниченно заданным током.


А что с реверсом по превышению тока? А он никуда не делся. Пока ШИМ ограничивает пиковый ток, кольцевой буфер заполняется его значениями. И, как только, среднее арифметическое станет больше заданной величины, сработает реверс.


Решение оказалось настолько простым и изящным, что я не мог поверить. А что, так можно было?!


Оказалось, да.


Устройство уехало на выставку.


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


Источник

Показать полностью 12
[моё] Разработка Контроллер Компрессор Длиннопост Программирование
101
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии