PIC Vietnam

Go Back   PIC Vietnam > Robotics > Thực hành

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Thực hành Bắt đầu làm một robot như thế nào? Mẹo vặt? Kỹ thuật? Công nghệ?... Hãy bắt tay vào việc...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 02-11-2006, 08:51 AM   #1
bluepine
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 53
:
thay đổi PID theo tải

Trích:
Nguyên văn bởi falleaf View Post
Hiện nay cho hỏi lại, còn bao nhiêu người theo tiếp dự án này, đã làm động cơ chạy được chưa, đọc được số liệu về máy tính chưa (số liệu encoder), dùng Hyperterminal, hoặc là dùng chương trình tự viết...

Tất cả đã làm xong phần này chưa, chúng ta có thể đi vào vấn đề PID được chưa?

Chúc vui
Chào mọi người, em hiện đã điều khiển được động cơ dùng PID, số liệu khá chính xác (sai lệch về tốc độ rất nhỏ). Tuy nhiên chỉ điều khiển được với một tải cố định thôi, khi gỡ cục tải ra thì không còn đúng nữa nên em nghĩ các thông số PID thay đổi khi tải thay đổi. Anh F cho em hỏi có cách nào tính các thông số PID theo sự thay đổi của tải không?
Đây là chương trình em đã chạy tốt với 1 tải cố định

Code:
#include <16f877a.h>
#fuses HS,NOPROTECT,NOWDT,NOBROWNOUT
#use delay (clock = 20000000)
// Giao tiep vi dieu khien
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)         // Giao tiep RS232

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include<ctype.h>

#byte PR2 = 0x92

int16 e2;
int16 e1;
///////////////////////////////////////////////////////

int16 v_set = 250;

/////////////////////////////////////////////////////////
int16 v_cur;
int16 e_sum;
int16 e_del;
int16 flag_timer1;


///////////////////////////////////////////////////////////
unsigned long kp =5;
unsigned long ki = 0.62;
unsigned long kd = 10;
////////////////////////////////////////////////////////////


int16 pw_duty;
int16 counted_round_value;
int16 temp_timer0;
int16 update_counted_round_value;

#byte TMR0 = 0x01      //timer0 REGISTER
#byte TMR1_L = 0X0E
#byte TMR1_H = 0X0F

#define START_VALUE_TIMER0   55  //tri khoi tao ban dau cua timer0 55, so xung dem duoc moi khi ngat la 255 - 55
#define START_VALUE_TIMER1    15535  //tri khoi tao ban dau cua timer1 65536-15536

#INT_TIMER0 // ngat timer0 tang bien len 1
void TIMER0_int()
{

      set_timer0(START_VALUE_TIMER0);
      counted_round_value++;

}

#INT_TIMER1 // ngat timer0 tang bien len 1
void timer1_int()
{

      set_timer1(START_VALUE_TIMER1);


      temp_timer0 = get_timer0();

      if (temp_timer0 == 0){
      temp_timer0 = 255;
      }
      v_cur = counted_round_value*400 + 2*(temp_timer0 - START_VALUE_TIMER0);
      set_timer0(START_VALUE_TIMER0);
      counted_round_value = 0;
      //printf("%ld\t",pw_duty);
      flag_timer1 = 1;
}


void init_timer0()
{

   setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2); // timer0 dung xung ngoai va chia xung vao


   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); // moi lan tran timer1 la 50000*4* (1/5) uS = 40ms

   set_timer0(START_VALUE_TIMER0);
   set_timer1(START_VALUE_TIMER1);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(INT_TIMER1);
}

void init_PWM(int16 frequency){

   setup_ccp1(CCP_PWM); // initiate PWM
   PR2 = 20000000/4/frequency - 1; // set PWM period

   setup_timer_2(T2_DIV_BY_1,255,1);   // initiate time 2  The cycle time will be (1/clock)*4*t2div*(period+1)
                                       //   (1/20000000)*4*1*(255+1) =  51.2 us( will over flow every 51.2 us, will intrup every 51.2 uS or 19.5 khz;

}

void cal_pid(){

long temp_kp;
long temp_ki;
long temp_kd;
  e2 = v_set - v_cur;
  e_sum += e2;
  e_del = e2 - e1;
  e1 = e2;

  temp_kp = kp*e2;
  temp_ki = ki*e_sum;
  temp_kd = kd*e_del;
  pw_duty +=temp_kp;

  if (pw_duty <1000)
     pw_duty += temp_ki;
  if (pw_duty <1000)
     pw_duty += temp_kd;
  if (pw_duty <256) // vi khi pw_duty <256 thi PWM chi dieu rong xung 8 bit                                                                                    /                         //chu khong phai  10 bit,
     pw_duty = 256;
  if (pw_duty >1000) // bao hoa
     pw_duty = 1000;

printf(" \t%ld", v_cur); // truyen toc do xung ve may tinh hien thi tren Hyperterminal
}

void main()
{
   int8 timer0_value;

   init_timer0();
   init_PWM(19500);

   while(true){
      if (flag_timer1 ==1){
      flag_timer1 = 0;
      cal_pid();
      set_pwm1_duty(pw_duty);
      }
   }
}
mến

thay đổi nội dung bởi: falleaf, 11-09-2008 lúc 10:07 PM.
bluepine vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-11-2006, 03:38 PM   #2
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Em hỏi câu đó mà anh trả lời thì anh là thằng nói dóc

Em thử nghĩ coi, vấn đề muôn thuở của điều khiển, vẫn chỉ là cái actuator gắn cục tải vào, và mình muốn nó chạy như thế nào thì nó chạy như thế ấy.

Tất nhiên, anh không nói là không có cách để đạt đến một cái gì đó, người ta vẫn có giả pháp Auto Tuning PID, mà anh Hùng đã giới thiệu.

Em có thể download trên www.tailieuvietnam.net

Em có thể gửi file các thông số đo được lên đây, và em có thể dùng Matlab để nhúng các thông số đó, vẽ thành các đồ thị để giới thiệu cho mọi người?

Ngoài ra, em thay cục tải khác, và em thử tìm lại hệ số PID phù hợp cho hai cục tải đó.

Khi em thay tải khác, em cố gắng tìm hệ số bằng một cách cảm tính, bước này anh đã có đề cập trước rồi. Có nghĩa là, anh muốn em cố gắng sử dụng cảm tính của mình, điều chỉnh các hệ số, cho nó chạy, rồi đọc giá trị về, rồi quan sát: rising time (thời gian đáp ứng), overshoot (vọt lố), và ss error (chả biết cái này tiếng Việt gọi là cái gì nữa).

Em quan sát nó, và em cố gắng cảm nhận, giả sử tôi tăng P, thì điều gì xảy ra, giảm P thì điều gì xảy ra, giả sử tôi có một P tương đối tốt, tăng I, thì điều gì xảy ra, giảm I thì điều gì xảy ra.. tương tự cho D...

Tóm lại là, em cố gắng cảm nhận, đây là giai đoạn quan trọng nhất. Bảng tóm tắt những ảnh hưởng anh đã cung cấp trước đây, nhưng không nhớ, nhưng anh vấn muốn em cảm nhận nhiều hơn khi thực hành điều khiển.

Chúc vui.
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-04-2007, 10:12 PM   #3
omlun
Đệ tử 1 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 25
:
Trích:
Nguyên văn bởi bluepine View Post
Chào mọi người, em hiện đã điều khiển được động cơ dùng PID, số liệu khá chính xác (sai lệch về tốc độ rất nhỏ). Tuy nhiên chỉ điều khiển được với một tải cố định thôi, khi gỡ cục tải ra thì không còn đúng nữa nên em nghĩ các thông số PID thay đổi khi tải thay đổi. Anh F cho em hỏi có cách nào tính các thông số PID theo sự thay đổi của tải không?
Đây là chương trình em đã chạy tốt với 1 tải cố định

#include <16f877a.h>
#fuses HS,NOPROTECT,NOWDT,NOBROWNOUT
#use delay (clock = 20000000)
// Giao tiep vi dieu khien
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8) // Giao tiep RS232

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include<ctype.h>

#byte PR2 = 0x92

int16 e2;
int16 e1;
///////////////////////////////////////////////////////

int16 v_set = 250;

/////////////////////////////////////////////////////////
int16 v_cur;
int16 e_sum;
int16 e_del;
int16 flag_timer1;


///////////////////////////////////////////////////////////
unsigned long kp =5;
unsigned long ki = 0.62;
unsigned long kd = 10;
////////////////////////////////////////////////////////////


int16 pw_duty;
int16 counted_round_value;
int16 temp_timer0;
int16 update_counted_round_value;

#byte TMR0 = 0x01 //timer0 REGISTER
#byte TMR1_L = 0X0E
#byte TMR1_H = 0X0F

#define START_VALUE_TIMER0 55 //tri khoi tao ban dau cua timer0 55, so xung dem duoc moi khi ngat la 255 - 55
#define START_VALUE_TIMER1 15535 //tri khoi tao ban dau cua timer1 65536-15536

#INT_TIMER0 // ngat timer0 tang bien len 1
void TIMER0_int()
{

set_timer0(START_VALUE_TIMER0);
counted_round_value++;

}

#INT_TIMER1 // ngat timer0 tang bien len 1
void timer1_int()
{

set_timer1(START_VALUE_TIMER1);


temp_timer0 = get_timer0();

if (temp_timer0 == 0){
temp_timer0 = 255;
}
v_cur = counted_round_value*400 + 2*(temp_timer0 - START_VALUE_TIMER0);
set_timer0(START_VALUE_TIMER0);
counted_round_value = 0;
//printf("%ld\t",pw_duty);
flag_timer1 = 1;
}


void init_timer0()
{

setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2); // timer0 dung xung ngoai va chia xung vao


setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); // moi lan tran timer1 la 50000*4* (1/5) uS = 40ms

set_timer0(START_VALUE_TIMER0);
set_timer1(START_VALUE_TIMER1);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);
}

void init_PWM(int16 frequency){

setup_ccp1(CCP_PWM); // initiate PWM
PR2 = 20000000/4/frequency - 1; // set PWM period

setup_timer_2(T2_DIV_BY_1,255,1); // initiate time 2 The cycle time will be (1/clock)*4*t2div*(period+1)
// (1/20000000)*4*1*(255+1) = 51.2 us( will over flow every 51.2 us, will intrup every 51.2 uS or 19.5 khz;

}

void cal_pid(){

long temp_kp;
long temp_ki;
long temp_kd;
e2 = v_set - v_cur;
e_sum += e2;
e_del = e2 - e1;
e1 = e2;

temp_kp = kp*e2;
temp_ki = ki*e_sum;
temp_kd = kd*e_del;
pw_duty +=temp_kp;

if (pw_duty <1000)
pw_duty += temp_ki;
if (pw_duty <1000)
pw_duty += temp_kd;
if (pw_duty <256) // vi khi pw_duty <256 thi PWM chi dieu rong xung 8 bit / //chu khong phai 10 bit,
pw_duty = 256;
if (pw_duty >1000) // bao hoa
pw_duty = 1000;

printf(" \t%ld", v_cur); // truyen toc do xung ve may tinh hien thi tren Hyperterminal
}

void main()
{
int8 timer0_value;

init_timer0();
init_PWM(19500);

while(true){
if (flag_timer1 ==1){
flag_timer1 = 0;
cal_pid();
set_pwm1_duty(pw_duty);
}
}
}

mến

Bạn có thể cho mình biết thông số động cơ Dc cuả bạn.Và giải thích giùm đoạn code này cho mình được không:
v_cur = counted_round_value*400 + 2*(temp_timer0 - START_VALUE_TIMER0);

mình mới tập lập trình nên không rành lắm.
omlun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-05-2007, 06:40 PM   #4
omlun
Đệ tử 1 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 25
:
Trích:
Nguyên văn bởi bluepine View Post
Chào mọi người, em hiện đã điều khiển được động cơ dùng PID, số liệu khá chính xác (sai lệch về tốc độ rất nhỏ). Tuy nhiên chỉ điều khiển được với một tải cố định thôi, khi gỡ cục tải ra thì không còn đúng nữa nên em nghĩ các thông số PID thay đổi khi tải thay đổi. Anh F cho em hỏi có cách nào tính các thông số PID theo sự thay đổi của tải không?
Đây là chương trình em đã chạy tốt với 1 tải cố định

#include <16f877a.h>
#fuses HS,NOPROTECT,NOWDT,NOBROWNOUT
#use delay (clock = 20000000)
// Giao tiep vi dieu khien
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8) // Giao tiep RS232

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include<ctype.h>

#byte PR2 = 0x92

int16 e2;
int16 e1;
///////////////////////////////////////////////////////

int16 v_set = 250;

/////////////////////////////////////////////////////////
int16 v_cur;
int16 e_sum;
int16 e_del;
int16 flag_timer1;


///////////////////////////////////////////////////////////
unsigned long kp =5;
unsigned long ki = 0.62;
unsigned long kd = 10;
////////////////////////////////////////////////////////////


int16 pw_duty;
int16 counted_round_value;
int16 temp_timer0;
int16 update_counted_round_value;

#byte TMR0 = 0x01 //timer0 REGISTER
#byte TMR1_L = 0X0E
#byte TMR1_H = 0X0F

#define START_VALUE_TIMER0 55 //tri khoi tao ban dau cua timer0 55, so xung dem duoc moi khi ngat la 255 - 55
#define START_VALUE_TIMER1 15535 //tri khoi tao ban dau cua timer1 65536-15536

#INT_TIMER0 // ngat timer0 tang bien len 1
void TIMER0_int()
{

set_timer0(START_VALUE_TIMER0);
counted_round_value++;

}

#INT_TIMER1 // ngat timer0 tang bien len 1
void timer1_int()
{

set_timer1(START_VALUE_TIMER1);


temp_timer0 = get_timer0();

if (temp_timer0 == 0){
temp_timer0 = 255;
}
v_cur = counted_round_value*400 + 2*(temp_timer0 - START_VALUE_TIMER0);
set_timer0(START_VALUE_TIMER0);
counted_round_value = 0;
//printf("%ld\t",pw_duty);
flag_timer1 = 1;
}


void init_timer0()
{

setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2); // timer0 dung xung ngoai va chia xung vao


setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); // moi lan tran timer1 la 50000*4* (1/5) uS = 40ms

set_timer0(START_VALUE_TIMER0);
set_timer1(START_VALUE_TIMER1);
enable_interrupts(GLOBAL);
enable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER1);
}

void init_PWM(int16 frequency){

setup_ccp1(CCP_PWM); // initiate PWM
PR2 = 20000000/4/frequency - 1; // set PWM period

setup_timer_2(T2_DIV_BY_1,255,1); // initiate time 2 The cycle time will be (1/clock)*4*t2div*(period+1)
// (1/20000000)*4*1*(255+1) = 51.2 us( will over flow every 51.2 us, will intrup every 51.2 uS or 19.5 khz;

}

void cal_pid(){

long temp_kp;
long temp_ki;
long temp_kd;
e2 = v_set - v_cur;
e_sum += e2;
e_del = e2 - e1;
e1 = e2;

temp_kp = kp*e2;
temp_ki = ki*e_sum;
temp_kd = kd*e_del;
pw_duty +=temp_kp;

if (pw_duty <1000)
pw_duty += temp_ki;
if (pw_duty <1000)
pw_duty += temp_kd;
if (pw_duty <256) // vi khi pw_duty <256 thi PWM chi dieu rong xung 8 bit / //chu khong phai 10 bit,
pw_duty = 256;
if (pw_duty >1000) // bao hoa
pw_duty = 1000;

printf(" \t%ld", v_cur); // truyen toc do xung ve may tinh hien thi tren Hyperterminal
}

void main()
{
int8 timer0_value;

init_timer0();
init_PWM(19500);

while(true){
if (flag_timer1 ==1){
flag_timer1 = 0;
cal_pid();
set_pwm1_duty(pw_duty);
}
}
}

mến

bạn có thể pót sơ đồ nguyên lý của mạch điều khiển động cơ l;ên ko??
xung encoder pha A ban nối vào chân nào vậy?
đọc xong code của bạn tớ đang tính làm 1 mạch để tét thử
omlun vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 31-03-2011, 11:09 AM   #5
hangocminh1989
Đệ tử 6 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 132
:
Trích:
Nguyên văn bởi bluepine View Post
Chào mọi người, em hiện đã điều khiển được động cơ dùng PID, số liệu khá chính xác (sai lệch về tốc độ rất nhỏ). Tuy nhiên chỉ điều khiển được với một tải cố định thôi, khi gỡ cục tải ra thì không còn đúng nữa nên em nghĩ các thông số PID thay đổi khi tải thay đổi. Anh F cho em hỏi có cách nào tính các thông số PID theo sự thay đổi của tải không?
Đây là chương trình em đã chạy tốt với 1 tải cố định

Code:
#include <16f877a.h>
#fuses HS,NOPROTECT,NOWDT,NOBROWNOUT
#use delay (clock = 20000000)
// Giao tiep vi dieu khien
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)         // Giao tiep RS232

#include <stdlib.h>
#include <string.h>
#include <math.h>
#include<ctype.h>

#byte PR2 = 0x92

int16 e2;
int16 e1;
///////////////////////////////////////////////////////

int16 v_set = 250;

/////////////////////////////////////////////////////////
int16 v_cur;
int16 e_sum;
int16 e_del;
int16 flag_timer1;


///////////////////////////////////////////////////////////
unsigned long kp =5;
unsigned long ki = 0.62;
unsigned long kd = 10;
////////////////////////////////////////////////////////////


int16 pw_duty;
int16 counted_round_value;
int16 temp_timer0;
int16 update_counted_round_value;

#byte TMR0 = 0x01      //timer0 REGISTER
#byte TMR1_L = 0X0E
#byte TMR1_H = 0X0F

#define START_VALUE_TIMER0   55  //tri khoi tao ban dau cua timer0 55, so xung dem duoc moi khi ngat la 255 - 55
#define START_VALUE_TIMER1    15535  //tri khoi tao ban dau cua timer1 65536-15536

#INT_TIMER0 // ngat timer0 tang bien len 1
void TIMER0_int()
{

      set_timer0(START_VALUE_TIMER0);
      counted_round_value++;

}

#INT_TIMER1 // ngat timer0 tang bien len 1
void timer1_int()
{

      set_timer1(START_VALUE_TIMER1);


      temp_timer0 = get_timer0();

      if (temp_timer0 == 0){
      temp_timer0 = 255;
      }
      v_cur = counted_round_value*400 + 2*(temp_timer0 - START_VALUE_TIMER0);
      set_timer0(START_VALUE_TIMER0);
      counted_round_value = 0;
      //printf("%ld\t",pw_duty);
      flag_timer1 = 1;
}


void init_timer0()
{

   setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2); // timer0 dung xung ngoai va chia xung vao


   setup_timer_1(T1_INTERNAL | T1_DIV_BY_4); // moi lan tran timer1 la 50000*4* (1/5) uS = 40ms

   set_timer0(START_VALUE_TIMER0);
   set_timer1(START_VALUE_TIMER1);
   enable_interrupts(GLOBAL);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(INT_TIMER1);
}

void init_PWM(int16 frequency){

   setup_ccp1(CCP_PWM); // initiate PWM
   PR2 = 20000000/4/frequency - 1; // set PWM period

   setup_timer_2(T2_DIV_BY_1,255,1);   // initiate time 2  The cycle time will be (1/clock)*4*t2div*(period+1)
                                       //   (1/20000000)*4*1*(255+1) =  51.2 us( will over flow every 51.2 us, will intrup every 51.2 uS or 19.5 khz;

}

void cal_pid(){

long temp_kp;
long temp_ki;
long temp_kd;
  e2 = v_set - v_cur;
  e_sum += e2;
  e_del = e2 - e1;
  e1 = e2;

  temp_kp = kp*e2;
  temp_ki = ki*e_sum;
  temp_kd = kd*e_del;
  pw_duty +=temp_kp;

  if (pw_duty <1000)
     pw_duty += temp_ki;
  if (pw_duty <1000)
     pw_duty += temp_kd;
  if (pw_duty <256) // vi khi pw_duty <256 thi PWM chi dieu rong xung 8 bit                                                                                    /                         //chu khong phai  10 bit,
     pw_duty = 256;
  if (pw_duty >1000) // bao hoa
     pw_duty = 1000;

printf(" \t%ld", v_cur); // truyen toc do xung ve may tinh hien thi tren Hyperterminal
}

void main()
{
   int8 timer0_value;

   init_timer0();
   init_PWM(19500);

   while(true){
      if (flag_timer1 ==1){
      flag_timer1 = 0;
      cal_pid();
      set_pwm1_duty(pw_duty);
      }
   }
}
mến
bạn ơi, cái file mạch của bạn mình đọc không được, bạn xem lại được không, mình sài orcad 9.2
thanks
hangocminh1989 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-11-2006, 06:25 PM   #6
minhcuong
Đệ tử 2 túi
 
minhcuong's Avatar
 
Tham gia ngày: Jul 2005
Bài gửi: 26
:
Tôi đã xong phần thuật toán quan sát để đoán biết disturbance torque lên trục motor.

Hình gửi kèm là

1 - Reference Velocity dạng S-Curve cho motor chạy một đoạn đường xác định.
2- Tốc độ quan sát sử dụng Full State Observer.

Thực ra nếu đã có encoder thì việc dùng Observer để quan sát tốc độ vòng quay motor thì hơi thừa. Nhưng thực tế cái cần quan sát là dòng diện và tải lên trục motor cũng có thể quan sát được nếu bạn biết chính xác mô hình (hay hàm truyền đạt) của motor.
Hình Kèm Theo
File Type: jpg CommandAngularVelocity.jpg (134.8 KB, 89 lần tải)
File Type: jpg EstimatedAngularVelocity.jpg (117.5 KB, 51 lần tải)
minhcuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-11-2006, 01:40 PM   #7
bluepine
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 53
:
Đáp ứng xung khi thay đổi các thông số của bộ PID

chào mọi người, các bạn làm PID đến đâu rồi, sao không ai pót bài lên tiếp vậy.
Anh F ơi, em đã thay đổi thử các thông số của bộ PID rồi lấy kết quả vẽ lên đồ thị đáp ứng xung của hệ, mọi người cùng xem nhé, các hình này đã dược chú thích rất cụ thể.
Hình Kèm Theo
File Type: bmp Mo phong1.bmp (230.7 KB, 262 lần tải)
File Type: bmp Picvietnam2.bmp (518.1 KB, 182 lần tải)
File Type: bmp Picvietnam3.bmp (477.3 KB, 259 lần tải)
bluepine vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-11-2006, 04:18 PM   #8
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
Cái hình picvietnam3, nhìn vào khá đầy đủ các trường hợp, thế thì bây giờ em dựa vào kết quả, viết một bài giải thích thử xem nào.

Mối quan hệ giữa các giá trị...

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-11-2006, 11:39 AM   #9
minhcuong
Đệ tử 2 túi
 
minhcuong's Avatar
 
Tham gia ngày: Jul 2005
Bài gửi: 26
:
Công việc khá hấp dẫn làm về điểu khiển motor

Lưu ý mức lương đưa ra 1500 USD/tháng. Nhưng bạn có thể yêu cầu thêm có thể đến 2200 USD /tháng tùy năng lực thực sự của bạn. Công ty đó ở đây:
http://www.spg.co.kr/en/


2.Ky su tin hoc
1. Position : Software engineer
Location: SPG comapany, Incheon Korea
Skill sets:
+Development Language: C, C++, Assemble
+DSP, Processors: AVR, ARM, Atmel
+Protocols: RS-232, CAN
Project details: + Development of Geared Motor/ PAN Motors
+Motor (BLDC, Servo),speed/position controller
Roles in the project: +Motion control software development
1) Motor speed/position control algorithm
-servo loop analysis and design
Modeling
Digital control algorithm (PID, fuzzy, Adaptive
Simulation
Tuning
- Micom/Dsp application and programming
2) BLDC/Servo motor drive algorithm
-Inverter drive logic for BLDC/servo motor
Square wave driving
Sine wave driving (vector driving)
3) Telecomunication protocol
-432/485 communication
-CAN
Mandatory experiences: -Digital motion control programming
-Servo loop analysis and design
Modeling
Digital control algorithm (PID, Fuzzy, Adaptive...)
Simulation
Tuning
-Micom /DSP application and programming
Preferred experiences: BLDC/Servo motor drive algorithm
-inverter drive logic for BLDC/servo motor
Square wave driving (Vector driving)
Telecommunication application
Hard ware development
3 phase inverter design

Qualificationver 5 years after passing degree
Degree: ME of motion control or related Degree
Salary: 1500$/Month
Accomodations:Free House
Fringe Benefit: Free round way air ticket
Medical check-up support
minhcuong vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 06-03-2007, 09:31 PM   #10
sinhvien
Nhập môn đệ tử
 
sinhvien's Avatar
 
Tham gia ngày: Mar 2007
Bài gửi: 4
:
Em chưa biết gì nhiều muốn đăng ký tham gia bây giờ.
Đây là cơ hội để em hoc về điều khiển. Rất mong được sự hổ trợ từ diễn đàn.
sinhvien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-03-2007, 02:50 AM   #11
trungkien_0914373773
Đệ tử 1 túi
 
Tham gia ngày: Sep 2006
Bài gửi: 15
:
Thưa Bác F cho em tham gia dự án này với em đang tìm hiểu điều khiển động cơ DC bằng 89 qua mạch cầu H .
trungkien_0914373773 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 13-03-2007, 10:50 AM   #12
bluepine
Đệ tử 3 túi
 
Tham gia ngày: Jun 2006
Bài gửi: 53
:
Hoan nghênh các bạn tham gia đề tài, các bạn hãy đọc các bài trong luồn này trước đi, sau đó chúng ta sẽ thảo luận, tôi hiện đã làm mô hình rồi, phần mạch do chạy chưa ổn định nên phải test lại,
chúc vui
bluepine vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-03-2007, 11:01 AM   #13
hieulongan039
Đệ tử 1 túi
 
Tham gia ngày: Oct 2006
Bài gửi: 17
:
các bac cho mình hỏi tí nhé, lúc trước mình có làm 1 cái autodoor phan mạch điều khiển cái dộng cơ DC 24v chạy nhanh chậm ngược xuôi (dùng 89 làm điều khiển độ nhanh chậm thông qua 1 cầu phân áp dùng relay) nhưng mình chưa nghe nói qua cái encorder la như thế nào phiền các bác giải thích giúp. dông cơ của mình công suất khoảng 70W, mình dùng 2 con tranistor láy ngang trong tivi làm phần công suất + với 1 relay 2 tiếp điểm (1 thường đóng và 1 thường hở) để dảo chiều. mạch khá đơn giản và chạy cũng tam nhưng 89 ko ổn dịnh lắm, nên mình dịnh chuyển sang PIC (mình dang tìm hiểu PIC). nhưng chưa hiểu mô tê gì về encorder và nếu như dc chưa có thì mình làm sao để có encorder vậy? mong các bác giúp đở.
hieulongan039 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-03-2007, 01:01 PM   #14
falleaf
PIC Bang chủ
 
falleaf's Avatar
 
Tham gia ngày: May 2005
Bài gửi: 2,631
:
Send a message via Yahoo to falleaf
http://www.picvietnam.com/forum//showthread.php?t=224

Bạn nên đọc bài từ đầu tới cuối của luồng để nắm các nội dung chi tiết.

Chúc vui
falleaf vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-03-2007, 01:57 PM   #15
chuongnlt
Nhập môn đệ tử
 
Tham gia ngày: Feb 2007
Bài gửi: 1
:
cho toi tham gia voi,
chuongnlt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 12:29 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam