p09...OK
P10...s?w
P11...IN PROCESS
P12...s/W
KAMIS, 23.02.06
ambil data di lab. about C/C++ micro untuk melengkapi alur berikut:
...
PID CONTROLLER:
Perbandingan hasil pada MATLAB, Program C++, uC AT89S51 dan pada Oscilloscope
SATU: PID CONTROLLER pada MATLAB
Masukan1:
Masukan2:
Masukan3:
SIMULINK pada MATLAB
Script pada MATLAB
Keluaran1:
Keluaran2:
Keluaran3:
DUA: PID CONTROLLER pada C/C++
Masukan1:
Masukan2:
Masukan3:
Program PID KONTROLLER dalam C/C++ (File: PID_THOK.CPP)
#include
#include
#include
#include
#include
//Inisialisasi Komunikasi Data Parallel Port
#define ppdata 0x0378
#define ppstatus 0x0379
#define ppcontrol 0x037a
void main()
{
unsigned char s4dkk, bit4, ActualConv;
float K2=0.0, K1=0.0, K0=0.0, Kp=0.0, Ki=0.0, Kd=0.0;
int Ref;
float E0=0.0, E1=0.0, E2=0.0, U0=0.0, U1=0.0, U2=0.0;
int Desimal_U0, Desimal_E0;
int cWaktu, waktu;
int putaran = 0;
int key = 0;
struct time t;
long start, stop, T;
int gDriver = DETECT, gMode, errorCode;
int aa, bb;
char buffer[64];
// Mempersiapkan Penulisan File
FILE*ujirataan;
char*nama_file="pid0003.txt";
if ((ujirataan=fopen(nama_file,"w+"))==NULL)
{
printf("Gagal membuka berkas untuk menulis data.");
exit(1);
}
//clrscr();
initgraph(&gDriver, &gMode, "c:\\tc\\bgi");
errorCode = graphresult();
if (errorCode != grOk) {
printf("Error Loading Graphics\n");
exit(0);
}
//Ref. dan Waktu diberikan dari Keyboard (dalam Jumlah Putaran Tiap Detik, RPS)
printf("Teg. Referensi, V (1.57 s/d 5.00) : ");
scanf("%d", &Ref);
printf("Waktu Pengamatan (detik) : ");
scanf("%d", &waktu);
// printf("Kp : "); scanf("%4.2f", &Kp);
// printf("Ki : "); scanf("%4.2f", &Ki);
// printf("Kd : "); scanf("%4.2f", &Ki);
cWaktu = 1;
gettime(&t);
start = (long)t.ti_hour*60*60*100 + t.ti_min*60*100 +
t.ti_sec*100 + t.ti_hund;
do
{
putaran = 0;
do
{ putaran++;
//Ambil waktu PC dalam satuan PER SERATUS DETIK (atau 10ms)
gettime(&t);
stop=(long)t.ti_hour*60*60*100+t.ti_min*60*100+
t.ti_sec*100+t.ti_hund;
}
while (stop-start < 100); //periode sampling, T = 100*(1/100) det = 1 detik.
//Periode Sampling (detik)
T=(stop-start)/100;
printf("%d",cWaktu);
//Masukan untuk Controller
E0=Ref;//Untuk OLTF
//Pemberian Nilai Kp, Ki, dan Kd
Kp=0.5;
Ki=0.1;
Kd=0.0;
//Konstanta dari Persamaan Diskrit dari U(z)/E(z)...PID Controller
K2=(float) Kp+(0.5*Ki*T)+((2*Kd)/T);
K1=(float) (Ki*T)-((4*Kd)/T);
K0=(float) -Kp+(0.5*Ki*T)+((2*Kd)/T);
//Persamaan Diskrit dari PID Controller
U0=(float)(K2*E0)+(K1*E1)+(K0*E2)+0.0*U1+U2;
//Simpan Data di File
fprintf(ujirataan,"%d\t %d\t %5.2f\t %5.2f\t %5.2f\t %5.2f\n", cWaktu, Ref, U0, U1, U2, E0);
//Pertukaran variabel untuk sampling berikutnya
start = stop;
E2=E1;
E1=E0;
U2=U1;
U1=U0;
//Variabel untuk Pengecheckan Waktu dinaikkan
cWaktu++;
if (kbhit())
{
key = getch();
if (key == 0)
key = getch();
}
}
while (cWaktu <= waktu && key != 27);//esc
}
Keluaran1:
Keluaran2:
Keluaran3:
TIGA: PID CONTROLLER pada Mikrokontroller AT89C51
Masukan1:
Masukan2:
Masukan3:
LOADING program ke Mikrokontroller
Keluaran1:
Keluaran2:
Keluaran3:
JUMAT, 24.02.06
ada rapat snasti2006, r.rapat
dateline...janji saya about paper ke gematek march.ed.06
No comments:
Post a Comment