Портал | Галерея | WIKI | PDA | VK | FB | Zello
Текущее время: Вт авг 04, 2020 6:24 am

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 467 сообщений ]  На страницу Пред. 143 44 45 46 47 След.
Автор Сообщение
Непрочитанное сообщениеДобавлено: Ср май 27, 2020 10:36 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вс апр 05, 2020 7:24 am
Сообщения: 51
Имя: Tim
Откуда: СПб
Благодарил (а): 9 раз
Поблагодарили: 13 раз
Цитата:
Дык она то поди на ходу по другому совсем будет работать. Надоть на ходу пробовать.
И обязательно попробуем. Пока использую мозолистый палец для создания непредвиденных динамических нагрузок, тащит ОК.


Вернуться к началу
Непрочитанное сообщениеДобавлено: Пт май 29, 2020 11:04 am 
Не в сети

Зарегистрирован: Пн мар 28, 2016 12:03 pm
Сообщения: 104
Благодарил (а): 24 раза
Поблагодарили: 2 раза
А скетч то планируете выложить посмотреть?


Вернуться к началу
Непрочитанное сообщениеДобавлено: Пт май 29, 2020 12:21 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вс апр 05, 2020 7:24 am
Сообщения: 51
Имя: Tim
Откуда: СПб
Благодарил (а): 9 раз
Поблагодарили: 13 раз
У меня не ардуино - другая архитектура (stm32), и скетча как такового нет. Все раскидано по вороху файлов, включая очень недружелюбные низкоуровневые вещи и сомнительного качества комментарии. Когда-нибудь, возможно, причешу и опубликую.

Сам код регулятора прост, как валенок:
Код:
	err = TARGET_BEMF_VOLTAGE - bemf;

	// P-term
	proportional = (err * ReadCV (CV56_KP)) / KPDIV;

	if (proportional > MAXKP) proportional = MAXKP;
	if (proportional < -MAXKP) proportional = -MAXKP;

	// I-term
	integral += err;

	if (integral > MAXINTEGRAL) integral = MAXINTEGRAL;
	if (integral < -MAXINTEGRAL) integral = -MAXINTEGRAL;

	ki = (integral * ReadCV (CV57_KI)) / KIDIV;

	if (ki > MAXKI) ki = MAXKI;
	if (ki < -MAXKI) ki = -MAXKI;

	fix =  proportional +  ki;
Все это крутится в цикле вместе с периодическим замером обратной ЭДС (таймеры, прерывания, DMA - все как у людей). Полученная поправка - fix - подмешивается в PWM мотору.


Вернуться к началу
Непрочитанное сообщениеДобавлено: Сб май 30, 2020 10:20 pm 
Не в сети

Зарегистрирован: Пн мар 28, 2016 12:03 pm
Сообщения: 104
Благодарил (а): 24 раза
Поблагодарили: 2 раза
А TARGET_BEMF_VOLTAGE как определяется?


Вернуться к началу
Непрочитанное сообщениеДобавлено: Вс май 31, 2020 12:04 am 
Не в сети
Аватара пользователя

Зарегистрирован: Вс апр 05, 2020 7:24 am
Сообщения: 51
Имя: Tim
Откуда: СПб
Благодарил (а): 9 раз
Поблагодарили: 13 раз
Цитата:
А TARGET_BEMF_VOLTAGE как определяется?
Сейчас отлаживаюсь с константой, для ушатанного BR 55 это 14..16 единиц. В реале думаю брать как разницу между CV5 и CV2, деленную на количество шагов.


Вернуться к началу
Непрочитанное сообщениеДобавлено: Вс май 31, 2020 4:01 pm 
Не в сети

Зарегистрирован: Пн мар 28, 2016 12:03 pm
Сообщения: 104
Благодарил (а): 24 раза
Поблагодарили: 2 раза
Те один и тот же PI алгоритм для малого хода и для нормальной скорости?

Вольтаж референсный лучше снимать до Н моста. Иначе при уходе вольтажа весь алгоритм начнет лажать.

И еще пару вопросов, если можно:
- можно ли финальную схему выложить?
- в какой момент и с какой частотой вы снимаете показания бек емф? Прерывает шим, или просто не доводите скважность до 100% и снимаете в этом промежутке, который гарантированно не заполнен?


Вернуться к началу
Непрочитанное сообщениеДобавлено: Вс май 31, 2020 5:43 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вс апр 05, 2020 7:24 am
Сообщения: 51
Имя: Tim
Откуда: СПб
Благодарил (а): 9 раз
Поблагодарили: 13 раз
Цитата:
Те один и тот же PI алгоритм для малого хода и для нормальной скорости?
Один, меня пока больше заботит тихий ход. Потом можно будет сделать отключение стабилизации, дискретное или плавное, по мере увеличения скорости.
Цитата:
Вольтаж референсный лучше снимать до Н моста. Иначе при уходе вольтажа весь алгоритм начнет лажать.
Он не снимается, а задается программно. На АЦП заведено только напряжение с мотора. В принципе можно и напряжение после выпрямителя измерять, только пока не вижу, где его дальше использовать. Регулятор старается поддерживать обороты так, чтобы с мотора приходило более-менее одно и то же. Просядет напряжение на рельсах - чуть упадет BEMF - регулятор поддаст газу - BEMF вырастет - все довольны. Мне так кажется.

Финальная схема будет, когда наступит финал-апофеоз. Пока схема практически как и у топикстартера, только управление мотором сделано на ZXMHC6A да процессор другой. Замер BEMF тоже такой же.

Вложение:
loco2 bridge.png
loco2 bridge.png [ 44.2 КБ | 466 просмотров ]
Цитата:
- в какой момент и с какой частотой вы снимаете показания бек емф? Прерывает шим, или просто не доводите скважность до 100% и снимаете в этом промежутке, который гарантированно не заполнен?
BEMF считывается периодически, по таймеру. Период задается в миллисекундах в CV, минимум 10мс, для отладки довольствуюсь 20мс.

Вложение:
замер ЭДС.png
замер ЭДС.png [ 10.31 КБ | 466 просмотров ]

Когда наступает время замера, ШИМ отключается, выжидаем усыхания тока в обмотке и появления напряжения обратной ЭДС, это примерно 1.5-2 миллисекунды с момента выключения ШИМ. Затем отрабатывает АЦП, и ШИМ включается обратно.


Вернуться к началу
Непрочитанное сообщениеДобавлено: Вс май 31, 2020 9:13 pm 
Не в сети

Зарегистрирован: Пн мар 28, 2016 12:03 pm
Сообщения: 104
Благодарил (а): 24 раза
Поблагодарили: 2 раза
А не многовато - 10 миллисекунд?

Народ меряет через микросекунды.


Вернуться к началу
Непрочитанное сообщениеДобавлено: Вс май 31, 2020 10:51 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вс апр 05, 2020 7:24 am
Сообщения: 51
Имя: Tim
Откуда: СПб
Благодарил (а): 9 раз
Поблагодарили: 13 раз
Вот прямо через микросекунды? как-то сомнительно. Есть ли в этом практический смысл?

Хотя мне хочется попробовать чаще, но пока не сделать интервал меньше 10мс. Надо плотно переделывать процедуру замера. С другой стороны, и так пауза в подаче ШИМ порядка 1-2мс.


Вернуться к началу
Непрочитанное сообщениеДобавлено: Пн июн 01, 2020 4:05 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Вс апр 05, 2020 7:24 am
Сообщения: 51
Имя: Tim
Откуда: СПб
Благодарил (а): 9 раз
Поблагодарили: 13 раз
Вот еще отличная лекция про PID доступным языком: http://robofob.ru/materials/articles/pa ... bline1.pdf
Цитата:
ПИД-управление в нестрогом изложении

Настоящая работа представляет собой очередную попытку неформального, популярного описания основ построения ПИД-регулятора, причем с уклоном в робототехнику, если под этим уклоном понимать иллюстрацию теории на примере движения мобильного робота.
PS и еще нашелся скетч PID для ардуино на пол-странички, буквально: https://alexgyver.ru/gyverpid/
Код:
// ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ
// величины регулятора
int setpoint = 0;   // заданная величина, которую должен поддерживать регулятор
int input = 0;      // сигнал с датчика (например температура, которую мы регулируем)
int output = 0;     // выход с регулятора на управляющее устройство (например величина ШИМ или угол поворота серво)
int pidMin = 0;     // минимальный выход с регулятора
int pidMax = 255;   // максимальный выход с регулятора
// коэффициенты
float Kp = 1.0;
float Ki = 1.0;
float Kd = 1.0;
float _dt_s = 0.1; // время итерации в секундах
// вспомогательные переменные
int prevInput = 0;
float integral = 0.0;
// ПИД
// функция расчёта выходного сигнала
int computePID() {
  float error = setpoint - input;           // ошибка регулирования
  float delta_input = prevInput - input;    // изменение входного сигнала
  prevInput = input;
  output = 0;
  output += (float)error * Kp;                  // пропорционально ошибке регулирования
  output += (float)delta_input * Kd / _dt_s;    // дифференциальная составляющая
  integral += (float)error * Ki * _dt_s;        // расчёт интегральной составляющей
  // тут можно ограничить интегральную составляющую!
  output += integral;                           // прибавляем интегральную составляющую
  output = constrain(output, pidMin, pidMax);   // ограничиваем выход
  return output;
}


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 467 сообщений ]  На страницу Пред. 143 44 45 46 47 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by ЛАЭС
Rambler's Top100
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB