... neki osnovni deo, ima to da kuva dok se ne optimizuje i nadje resenje kako treba, ali verujem da je ta prica manje vise razradjena, TI ima digitalne DC/DC kontrolere koji rade sa 2-3 PID-a i ima SW na PC koji uradi autotuning, mozda i to razmotriti malo ?
Autotuning se zasniva na Ziegler-Nichols ekprerimentu, tj. eksperiment u otvorenoj sprezi ili ekseriment u zatvorenoj sprezi. Kada se eksperiment radi u otvorenoj sprezi, onda se objektu upravljanja posalje odskocna funkcija jednaka zeljenoj vrednosti upravljanja (parametri za okolinu setpoint-a) i meri se odziv. Na osnovu odziva se odredjuju parametri.
Eksperiment u zatvorenoj sprezi se zasniva na forsiranju oscilacija oko setpoint-a i na osnovu odziva sistema na oscilacije se odredjuju parametri.
Treba jos i napomenuti da Ziegler-Nichols je samo polazna metoda za odredjivanje parametara PID-a. Na te parametre se primenjuju razni optimizacioni algoritmi koji bi smanjili preskok i oscilacije, a povecali vreme odziva.
Postoji jos dosta drugih metoda za podesavanje parametara PID-a.
Kada primeniti koji od eksperimenata je takodje dobro pitanje. To sve zavisi od posmatranog sistema, tj. da li se sistem sme izvesti i ravnoteze ili ne. Npr. neki mehanicki sistemi ne smeju da osciluju, tako da je tu neophodno odraditi odskocnu funkciju itd.
Inace svaki od proizvodjaca regulatora ima svoje metode (cuvaju ih kao tajnu) za podesavanje parametara.
Pre autotuninga, takodje treba obratiti paznju oko same implementacije PID-a. Postoje dve implementacije PID-a i to brzinska i poziciona implementacija. Fakticki su obe iste. Glavna razlika u nagomilavanju greske u integralnom dejstvu. Jedna implementacija salje objektu upravljanje, a druga razliku upravljanja. Uvek je mnogo bolje koristiti brzinsku implementaciju, tj. slati na izlaz primenu upravljanja. Ovo je algoritam koji se koristi kod upravljanja motorima.
P.S. Kada kazem brzinski i pozicioni, to ne znaci upravljanje brzinom i upravljanje pozicijom, vec to nazivi algoritama PID-a.
03-19-2017, 12:13 PM (This post was last modified: 03-19-2017, 12:39 PM by mikikg.)
U Mathlab imaju sve komponente koje trebaju da se razvije model algoritma, takodje mi se svidja sto ima generisanje C code-a i jos sto je bitnije ima simulaciju sa konkretnim C code-om koji se generise zbog validacije modela! Inace je ovaj primer spakovan u 30-ak linija fixed-point C jezika, od toga 10ak linija cela implementacija PID-a ... to radi z*** dobro
Ovde se vidi princip, imaju diskretizovane parametre za razlicite modove rada (0-100%) pa se to uvlaci u PID koji da je komadni signal, meni lici na feed-forward PID, a vrednosti koeficijenata su dobili snimanjem odziva sistema za razlicite tacke.
Samo sto nemam Mathlab, posebno te neke module koje spominje u video, jel ima neka "studenstka" verzija?
The motorBench™ Development Suite is an advanced GUI-based software development tool for motor control capable of performing accurate measurement of critical motor parameters (self-commissioning) and automatic tuning of feedback control gains (autotuning) for dsPIC33EP Digital Signal Controllers
The user interface takes you step-by-step through the project, with context-sensitive help files at your fingertips inside the tool.
Quickly get stable PI control loop gains for velocity and torque
See how the control loop gains affect the system through Bode plots
Pa da, stvar je mnogo prosta, Autotuning je postala must-have opcija koju proizvodjaci takvih stvari moraju da ponude i to je dobro sto ce se obarati cena takvih proizvoda ... ko to da steluje vise rucno
Ovo sto razmisljam sa Xinje drajvere i dalje ostaje kao jedna vrlo zanimljiva opcija jer je moguce masine koje su vec napravljenje da se dodatno "presteluju" na optimalne uslove rada!
(03-19-2017, 12:13 PM)mikikg Wrote: U Mathlab imaju sve komponente koje trebaju da se razvije model algoritma, takodje mi se svidja sto ima generisanje C code-a i jos sto je bitnije ima simulaciju sa konkretnim C code-om koji se generise zbog validacije modela! Inace je ovaj primer spakovan u 30-ak linija fixed-point C jezika, od toga 10ak linija cela implementacija PID-a ... to radi z*** dobro
Ovde se vidi princip, imaju diskretizovane parametre za razlicite modove rada (0-100%) pa se to uvlaci u PID koji da je komadni signal, meni lici na feed-forward PID, a vrednosti koeficijenata su dobili snimanjem odziva sistema za razlicite tacke.
Samo sto nemam Mathlab, posebno te neke module koje spominje u video, jel ima neka "studenstka" verzija?
Miki,
nazalost i studentska verzija MATLAB-a se placa.
Inace u MATLAB-u ne mozes da vidis na koji nacin je implementiran PID. Ona slicica koju si postavio je samo primena metode rasporeda pojacanja za razlicite setpoint-e. To se koristi kod nelinearnih sistema. Radi se na taj nacin sto se izvrsi linearizacija sistema deo po deo i za svaki od tih delova se podese parametri. Kada se prepozna zona rada regulatora, onda se uzimaju iz tabele parametri za datu zonu. Taj princip se zove gain scheduling.
Da se vratim na ono što sam prethodno započeo, stigao mi je drajver TB6600 još prošle sedmice, testirao sam sa nekim osnovnim kodom da vidim da li sam dobro povezao i to sve radi odlično.
Počeo bih pisati kod za ovo što mi treba, eh sad, potrebne su mi neke smjernice, da li koristiti neku određenu biblioteku ili praviti po svome?
(04-15-2017, 11:21 PM)Makso Wrote: Da se vratim na ono što sam prethodno započeo, stigao mi je drajver TB6600 još prošle sedmice, testirao sam sa nekim osnovnim kodom da vidim da li sam dobro povezao i to sve radi odlično.
Počeo bih pisati kod za ovo što mi treba, eh sad, potrebne su mi neke smjernice, da li koristiti neku određenu biblioteku ili praviti po svome?
Ja bih koristio neku biblioteku zbog Acceleration-a. Da se bar s tim ne zezas, mada mozes da napises i svoj kod. Imas sve skupa 3 signala, od kojih ti je najbitniji puls. Bitno je da pogodis frekvenciju pulsa i bitno je da u startu frekvecnija raste,bas zbog Acceleration-a. Ako imas osciloskop vidi signal koj salje arduino preko te biblioteke koju imas. Ne valja odmah da mu puknes pun gas.
Jel si uzeo induktivni senzor?
Trebace ti par optokaplera za sve te signale (pulse, direction, enable, induktivni senzor), trebace ti Schmitt Trigger kolo za induktivni senzor.... i ostalo sve pasiva.
Koristiću onda ovu AccelStepper.h biblioteku, mislim da je jednostavna.?
Da li su potrebni optokapleri za signale koje idu sa Arduina na drajver, zar to već nije izolovano u samom drajveru?
Senzor nisam kupovao još, da bar kod završim u testu bih mogao testirati i sa običnim tasterom, mislim imam nekih senzora u kod sebe, trebao bih pogledati kakvih, da li poslije da tražim neki određeni ili klasika sa NO kontaktom?
Nisam siguran da je drajver galvanski izolovan. Ako imas shemu drajvera daj da vidimo. Moze ta biblioteka, samo da se ispise resto koda. A sta ce da ti navodi tocilo na glodalo? Imas jos jedan dc motor?
(04-16-2017, 11:39 AM)Makso Wrote: Trebala bi biti ova dukumentacija .
A glodalo ima svoj mehanizam, nisam puno gledao kako je odrađeno uglavnom ona sama ide od kraja do kraja, samo je se morao ugao ručno zakretati.
Ovo je samo Ic, ti vrv imas neku plocicu. Kao neki evaluation board. Trebala bi shema te plocice. Ovo bi moralo da se izoluje. Tj.ne mora ali ako nesto probije ode i cela kontrola.
Sto se tice masine, ako sama ide od kraja do kraja onda moze da se uzme neki signal sa nje, mozda ne mora induktivni senzor.
Drugari ja sam odavno odustao od servo motora...
Nabavio sam step motor i prenos ...
Na ovu osovinu ide ruka koja ce biti teska i ako motor pravi nagle trzaje pri pokretanju i stajanju ima da kida kais.
Pa mi treba kod ...
25 obrtaja , prvih par obrtaja da ubrzava i zadnjih par obrtaja da usporava .
Imaš već nekih gotovih osnovnih kodova u bibliotekama, kao što je AccelStepper biblioteka, pa onda otvoriš neki kod iz example-a, imaš fino definisano maksimalna brzina, akceleracija i ostalo, pa se malo poigraj.
// Bounce.pde
// -*- mode: C++ -*-
//
// Make a single stepper bounce from one limit to another
//
// Copyright (C) 2012 Mike McCauley
// $Id: Random.pde,v 1.1 2011/01/05 01:51:01 mikem Exp mikem $
#include <AccelStepper.h>
// Define a stepper and the pins it will use
AccelStepper stepper; // Defaults to AccelStepper::FULL4WIRE (4 pins) on 2, 3, 4, 5
#define motorPin1 2;
#define motorPin2 5;
void setup()
{
// Change these to suit your stepper if you want
stepper.setMaxSpeed(9999);
stepper.setAcceleration(3600);
stepper.moveTo(10000);
}
void loop()
{
// If at the end of travel go to the other end
if (stepper.distanceToGo() == 0)
stepper.moveTo(-stepper.currentPosition());
stepper.run();
}
Ali ima trzaje kad usporava/ubrzava (preskace) .
Pustio sam da radi na 36VDC u 1/1 na tb6600.
Kad pustim na 1/2 sve je super ali brzina mala .
Ne znam kako da je povecam za duplo ,dzaba pisem nule u speedmax.
Sta dalje?