мои 5 коп. : ПИД насколько я понимаю далеко не самый лучший способ "авторегулирования". Он не учитывает ускорения и интегральная составляющая - увеличивает ошибку (если сравнивать с гипотетической истинной невязкой). В болшинстве случаев правильнее вместо интегральной составляющей считать распределение невязки и добавить анализ ускорения.
... но, это все теория , а на практике в эти уравнения, если строить мат.модель системы, надо добавить еще не один десяток параметров описывающих работу сервов, разного рода задержки и тому подобное
В том и дело, что советующие "спецы" слабо себе представляют, что есть ПИД. Интеграл вообще отключают при больших рассогласованиях, ибо в таких случаях накапливается ошибка, которую потом надо утилизировать. Какая наф скорость от такого ПИ? И "мутирующий ПИД" - нормальный регулятор не времен разработки ПИДа на одной лампе, максимум двойного тетрода. Смысла спорить - не вижу, ичицо, учицо и еше раз учицо... Алисам - чудеса, про блокировку интеграла: http://logic-bratsk.ru/radio/pid/st12/st12_r.htm
Ты не подумай, что я вредничаю, уж очень хочется увидеть "развернутый ответ по ПИД для турелей" И я не узрел, чтоб ты советовал PID, Спрашивал -да, советовал - нет. Я бы делал так: Запускаем турель, замеряем сколько времени надо для набора макс. скорости. Даем команду стоп, засекаем на сколько повернется турель. Число запоминаем Ффсе. При вращении турели, если набрана макс. скорость, вычитаем это число из обратной связи. Для других значений скорости вращения находим свои числа (например 5 точек, интерполяция) Шибко умные могут сделать обсчет плавно... Щаз скажут, что это классический ПД регулятор.
... понятно что, диф. часть в пид - это своего рода прогнозирование на основе скорости. Это самое прогнозирование можно делать самыми разными способами (правда это уже будет не ПИД, если строго придерживаться терминологии )
В том числе прогнозировать можно и так, как написал Дмитрий, а можно выпендриться и наворотить обучающуюся систему прогнозирования и еще много-много вариантов
Фильтрацию можно подобрать перебором наиболее часто применяемых фильтров, подойдет очевидно тот, что будет ближе всего к физике процесса.
Ну это я так, мысли вслух, масло масляное так сказать
диф - это реактивная часть. реагирует на резкие всплески-отклонения. пока резких отклонений нет, сидит и не выеживается, как только появился всплеск - дает сильный импульс, обратный по знаку, гасящий всплеск.
вот пулеметы для гороха http://topwar.ru/2365-metateli-pul.html последний вариант сейчас применяется на всех автоподатчиках шаров (тенис,футбол и пр). но у него шибко малый путь разгона. надо первый вариант опробовать
решил создать машинку по типу вашей, только ни для того чтобы мочить кошек, а просто для езды по бездорожью ) масштаб правда побольше, привод задний))ыыыыы позже создам отдельную тему, загляните
Добавлено спустя 3 минуты 14 секунд: если мишень не крепить, пуля ничего не пробивает. ствол при выстреле уходит вверх. внизу видно как лазер скачет (я не настраивал прицел). в некоторых случаях пуля не летит прямо (острием вперед), а вращается как хочет. печалька. PS печенька была очень сухой и прочной ))
void loop() { //контроль вкл зарядки if (digitalRead(charg) == HIGH && lastchart == false) { lastchart = true; Serial.println("chart on"); } //контроль выклл зарядки if (digitalRead(charg) == LOW && lastchart == true) { lastchart = false; Serial.println("chart off"); }
if(Serial.available() > 8) { byte a,b,c,d,e,f,g,h,i; // принимаем байты и разбиваем их a = Serial.read(); // питание турели b = Serial.read(); // лево-1 \ право-0 c = Serial.read(); // шим л\п d = Serial.read(); // время л\п e = Serial.read(); // верх-1 \ низ-0 f = Serial.read(); // шим в\н g = Serial.read(); // время в\н h = Serial.read(); //выстрел i = Serial.read(); //лазер
interval_1 = d; //запоминаем длительность вкл л\п interval_2 = g; //запоминаем длительность вкл в\н previousMillis = millis();// запоминаем время
число байт выросло до 9. хотел по началу оставить 7,но потом прикинул сколько гемороя будет на стороне labview (вплоть до очереди команд с проверкой пропуска) и забил. разницы все равно не видно. А вот что действительно заметно, так это появившееся "машинная" точность времени вкл. Минимальное время вкл теперь вплоть до 1мс (+ШИМ). минимальный угол поворота турели снизился (предельная точность наведения повысилась). При значении задержки "0", управление идет как было до этого (крутим до поступления команды на выкл). Теперь в ПО Labview код существенно упростится. Если раньше я извращался вкл\выкл с компа с минимальным доступным промежутком (5мс и как оказалось ужасно скачет), то теперь после обработки кадра, будет отправляться одна команда с вкл. двигателя или без ограничения времени (до обработки следующего кадра) или на заданное время.