реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Плавное ускорение и торможение
gembird
сообщение Apr 21 2012, 14:49
Сообщение #1





Группа: Новичок
Сообщений: 4
Регистрация: 21-04-12
Пользователь №: 71 494



Здравствуйте
имеется привод с ШД, скорость вращения управляется переменным val, значение которого меняется
от 0 до 1023. При val=0 привод остановлен. (val это как бы педаль газа)
нужно осуществить плавное ускорение и плавный останов привода а так же сглаживать движение
когда val будет резко менятся скачкообразно.
подскажите пожалуйста как этот алгоритм реализовать ,
через какую функцию пропустить val прежде чем подать на двигатель ?
спасибо.

P.S. машинные ресурсы для расчетов не велики (МК ATMEL AVR ATmega)

Сообщение отредактировал gembird - Apr 21 2012, 14:52
Go to the top of the page
 
+Quote Post
DVF
сообщение Apr 21 2012, 17:11
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 630
Регистрация: 26-07-06
Из: Саратов
Пользователь №: 19 097



Да, ну, просто увеличивайте/уменьшайте скорость вращения двигателя с выбранной для себя скоростью (плавной) увеличения/уменьшения оборотов, посматривая на переменную val - увеличивая плавно скорость вращения достигли значения val и остановили наращивание, а "увидели" что переменная val меньше текущей скорости, начинайте также со своей скоростью снижать обороты.
Go to the top of the page
 
+Quote Post
Iptash
сообщение Apr 21 2012, 19:10
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 613
Регистрация: 2-09-08
Из: г.Набережные Челны
Пользователь №: 39 936



Цитата(gembird @ Apr 21 2012, 18:49) *
...
через какую функцию пропустить val прежде чем подать на двигатель ?
...

Через ПИ функцию.
Код
    Тело прерывания: допустим время прерывания 1мсек
   PI = PI + val;               // чем больше входное воздействие val, тем больше будет рассогласование
   err = PI - count;           // ошибка рассогласования
   count = count + err;     // чем больше ошибка, тем быстрее заполняется счетчик контура расогласования
   if(count2 > 0) {
     count2 = count2 - err; //чем больше рассогласование, тем быстрее уменьшится count2
     impuls = 0;                //чем быстрее уменьшается count2, тем быстрее шагает ШД
     }
   else {
     count2 = 100;            // Это как бы коэфициент времени интеграции.
     impuls = 1;                // по этому сигналу происходит один шаг ШД
   }

Это допустим для положительного движения.
Здесь я показал сам принцип только(как мне видится), нужно писать программу эксперементировать и симулировать.
Вообще управлением движками и т.п., лучше управлять с помощью CPLD или FPGA. А микропроцессоры должны заниматься различными данными и последовательными вычислениями (это мое мнение).
Go to the top of the page
 
+Quote Post
gembird
сообщение Apr 21 2012, 20:54
Сообщение #4





Группа: Новичок
Сообщений: 4
Регистрация: 21-04-12
Пользователь №: 71 494



Цитата(DVF @ Apr 21 2012, 21:11) *
Да, ну, просто увеличивайте/уменьшайте скорость вращения двигателя с выбранной для себя скоростью

просто линейное увеличение и понижение пробовал, это не катит,
мне нужно что то вроде сигмоида

Цитата(Iptash @ Apr 21 2012, 23:10) *
Через ПИ функцию.

Очень интересно это надо обязательно пробовать.

но в моем случае ШД шагает от прерываний таймера
а частота прерываний задается исходя из значения val.


Прикрепленное изображение

нужно что то вроде этого (может немного криво нарисовал):
красная линия педаль газа
зеленая линия скорость двигателя

Сообщение отредактировал gembird - Apr 21 2012, 20:56
Go to the top of the page
 
+Quote Post
Alex11
сообщение Apr 21 2012, 22:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 106
Регистрация: 23-10-04
Из: С-Петербург
Пользователь №: 965



Так как Вы нарисовали, можно посчитать только задним числом. У Вас скорость начинает меняться раньше внешнего воздействия. В реал тайм это невозможно. Вы еще не знаете, что произойдет дальше.
Go to the top of the page
 
+Quote Post
gembird
сообщение Apr 22 2012, 06:46
Сообщение #6





Группа: Новичок
Сообщений: 4
Регистрация: 21-04-12
Пользователь №: 71 494



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

Сообщение отредактировал gembird - Apr 22 2012, 06:46
Go to the top of the page
 
+Quote Post
alexPec
сообщение Apr 22 2012, 19:08
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 284
Регистрация: 9-04-06
Пользователь №: 15 968



Цитата
нужно что то вроде этого (может немного криво нарисовал):
красная линия педаль газа
зеленая линия скорость двигателя


PI скорее всего не прокатит - разве что с P - компонентом равным 0. Потому как если P не равно 0 то при появлении рассогласования выходное воздействие скачком поменяется, а это как я понял не айс.

Странно что никто до сих пор не предложил - а если через простой ФНЧ первого-второго порядка пропустить входное воздействие? Подозреваю, что частота среза фильтра должна быть связана с инерцией ротора двигателя для оптимального регулирования (самого быстрого и с минимальным перерегулированием).
Go to the top of the page
 
+Quote Post
Impartial
сообщение Apr 22 2012, 19:34
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 11-06-10
Пользователь №: 57 871



Цитата(alexPec @ Apr 22 2012, 22:08) *
Странно что никто до сих пор не предложил - а если через простой ФНЧ первого-второго порядка пропустить входное воздействие? Подозреваю, что частота среза фильтра должна быть связана с инерцией ротора двигателя для оптимального регулирования (самого быстрого и с минимальным перерегулированием).

Спасибо за идею!
Go to the top of the page
 
+Quote Post
Tanya
сообщение Apr 23 2012, 07:45
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(gembird @ Apr 21 2012, 18:49) *
через какую функцию пропустить val прежде чем подать на двигатель ?
спасибо.

Эту функцию можно определить только экспериментально, так как она зависит от механических деталей, которые приделаны к двигателю.
Go to the top of the page
 
+Quote Post
gembird
сообщение Apr 23 2012, 19:04
Сообщение #10





Группа: Новичок
Сообщений: 4
Регистрация: 21-04-12
Пользователь №: 71 494



получилось sm.gif
по прерыванию от таймера с определенным интервалом делаю инкремент/декремент
скорости, а дельта инкремента беру из разниц текущей скорости и заданной скорости
деля на некое константное число (фактор акселерации)
таким образом чем ближе приближается текущая скорость к заданной тем медленнее он
ровняется с ним.
Может не супер пупер но практически в полне удовлетворяет.
Спасибо всем за помощь.
Go to the top of the page
 
+Quote Post
Tanya
сообщение Apr 24 2012, 04:57
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883



Цитата(gembird @ Apr 23 2012, 23:04) *
по прерыванию от таймера с определенным интервалом делаю инкремент/декремент
скорости, а дельта инкремента беру из разниц текущей скорости и заданной скорости
деля на некое константное число (фактор акселерации)
таким образом чем ближе приближается текущая скорость к заданной тем медленнее он
ровняется с ним.

Может не супер пупер но практически в полне удовлетворяет.
Спасибо всем за помощь.

Это совсем не супер-пупер. Книжки не стали читать... Сочиняем все сами. Если бы это было управление не физическим объектом, обладающим моментом инерции, полюсами, обмотками, а какой-нибудь точкой на экране, вот тогда было бы супер.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 14:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.0145 секунд с 7
ELECTRONIX ©2004-2016