ЕСТЬ ИДЕЯ Стабилизация оборотов шпинделя

Earnest

ЗНАЕТ ЧТО ГОВОРИТ
ПРОВЕРЕННЫЙ
Регистрация
10.02.2025
Сообщения
203
Реакции
219
Баллы
58
Возраст
67
Город
Донецк
Имя
Алексей
Отчество
Леонидович
Станок
cnc3018pro
Плата
Camxtool v35, самоделка
Прошивка
1.1h
Стабилизация оборотов шпинделя

Посмотрел я это видео и мне очень понравилась идея. Попробую сделать что-то подобное. Тем более, что с ПИД-регуляторами я когда-то возился, на Ассемблере, для STM8. Только для измерений останавливать ШИМ я не буду, буду мерять в паузах между импульсами. Но это значит что стопроцентную скорость, когда импульсы сливаются, устанавливать нельзя – обязательно должны быть паузы. Поэтому для сохранения оборотов напряжение питания надо будет приподнять, скажем, до 36 Вольт. А регулировку ШИМ-а ограничить значениями 0..127.

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

tachometer.png

tacho_3D.pngtacho_pcb.pngtacho_pcb.jpg

Результат измерений вывожу через UART на внешний дисплей. У меня для этого служит универсальная приблуда, но, в принципе, можно подключить к PC и запустить там какой-либо терминал. Разумеется подключать надо через преобразователь TTL-RS232.

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

50 секунд видео работающего тахометра.

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

Завтра напишу про собственно регулятор.
 
Ну, тахометр, сам по себе можно и на Тиньке13 сделать, но разговор то про регулятор с ПИ. Там и задание и опорник и еще вращение и все связано
 
Ну, тахометр, сам по себе можно и на Тиньке13 сделать, но разговор то про регулятор с ПИ.
Ну, тринадцатая тайни помощнее будет чем 1200-й контроллер. У него, даже SRAM нет от слова совсем. Только регистры. Так что вы правы, тахометр можно и на ней. А про ПИД -- завтра, пока ещё не дописал.
 
Последнее редактирование:
Про железо

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

Clipboard_10-21-2025_01.jpg

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

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

pwm_times.png

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

Clipboard_10-25-2025_01.png

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

ПИД-макет.png

Выше схема моего макета. Работает. На видео я на малых оборотах пытаюсь остановить вращение, а шпиндель сопротивляется. Видно как растёт управляющее воздействие (его показывает цифровой индикатор). Да и слышно это по звуку моторчика. Без ПИД-а на этой скорости шпиндель останавливался просто от касания пальцем. Да, после отпускания есть выбег и скорость на некоторое время немного повышается. Надо точнее подбирать коэффициенты. Буду заниматься когда перенесу на плату. Посмотрел сейчас что наснимал. Да, оператор из меня так себе…

Завтра напишу как всё это работает.
 
ПИД это очень просто

Про то, что такое Пропорционально-Интегрально-Дифференциальное управление можно почитать где угодно, хотя бы в Википедии. Но пусть нас не пугают страшные интегралы в формуле, считать будем дискретным численным методом. Т.е. каждые N миллисекунд (у меня N=10) будем вычислять функцию:

u(t) = P (t) + I (t) + D (t);
P (t) = Kp * e (t);
I (t) = I (t — 1) + Ki * e (t);
D (t) = Kd * {e (t) — e (t — 1)}.


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

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

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

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

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

Затем производим нормализацию управляющего воздействия (приводим к значению от 0 до 127) и забрасываем в регистр сравнения ШИМ. Как видите, ничего сложного.

Я даже не использую арифметику с плавающей точкой. Просто, по-крестьянски, беру коэффициенты, умноженные на 65536 (2^16), а потом, после операции умножения, отбрасываю два младших байта. Это эквивалентно делению на 65536. Зато вычисление функции ПИД у меня занимает всего 21 мкс при тактовой 16 МГц.

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

Макетировал я всё это на Ардуинке уно, освободившейся после переноса grbl-контроллера на плату. Я, вроде, говорил что люблю использовать платы Arduino при макетировании прототипов. Но в конечном изделии ATMega328 сильно избыточна. 99 процентов времени программа крутится в холостом цикле, занимаясь только регенерацией дисплея. И память программ занята всего на 3 процента. При таких смешных требованиях подойдёт любая AVR-ка, лишь бы у неё было два таймера, АЦП и, желательно, аппаратное умножение. Как вариант, присмотрел ATtiny412. Маленькая, восьминогая, и подходит по всем параметрам. Правда, программируется через UPDI одним проводом. Но это даже хорошо, будет повод разобраться с этим интерфейсом.

Заказал парочку в Китае, как приедут, будет продолжение.

Извините, сегодня "многа букаф" и ни одной картинки. В следующем посте исправлюсь...
 
Сверху Снизу
Обнаружен блокировщик рекламы AdBlock

МЫ ДОГАДЫВАЕМСЯ, ЧТО РЕКЛАМА ВАС РАЗДРАЖАЕТ!

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

Спасибо за Ваше понимание!

Я отключил свой AdBlock    Нет, я не буду ничего отключать