Friday, December 3, 2010

Inverted pendulum control

หลังจากที่ออกแบบและสร้าง Inverted pendulum ตัวใหม่ออกมา(อันนี้ คือ ตัวเก่า)แล้วและทำการควบคุมมัน ซึ่งผลที่ได้เป็นที่น่าพอใจอย่างมาก ซึ่งตอนนี้มันก็สามารถควบคุมได้แล้ว การควบคุมแบบนี้เรียกว่า State feedback คือ Control law u=-kx โดยที่ x คือ state variable ซึ่งใน Inverted pendulum system x ก็จะมีทั้งหมดสี่ตัว คือ cart position,cart velocity,pendulum angle และ angular velocity ซึ่งเมื่อเราสามารถวัดมาได้ครบ เราก็ทำการออกแบบหาค่า K ด้วยวิธี Pole placement/LQ เมื่อออกแบบหาค่า Kแล้วก็นำมาเขียนลงใน Digital signal processing PIC18F4431


รูปที่.1 อุปกรณ์สำหรับการทดลองทั้งหมด


รูปที่.2 STATE FEEDBACK CONTROL DIAGRAM







สถานที่ถ่ายทำ ภาควิชาวิศวกรรมเครื่องกล มหาวิทยาลัยเทคโนโลยีพระจอมเกล้าธนบุรี


รูปที่.3 กราฟวัดการตอบสนองของระบบ เมื่อมีการรบกวน Rod จะเห็นได้ว่า Cart จะต้องวิ่งเพื่อกำจัด    error ที่เกิดขึ้นกับ Rod หลังจากนั้น Cart ก็จะกลับมาที่ตำแหน่งที่ออกแบบ

สนใจติดต่อ:  sarayuthassa@gmail.com 
                    083-4391356

25 comments:

Win said...

Hi, Sorry i am unable to type in Thai, due to the computer in my lab!
I am now doing the similar project as this one.
I am using however a DSP TMS320LF... from TI.
I am having a problem designing a controller for my pendulum.
OK, it is alright when i would like the pendulum to swing up and stand vertically inverted.
The problem arises when i would like to try to control a position of the cart!
As i have a look in ur control system u = k....
I am curious, what do u actually mean by x_d???

Ps. My current position x and the pendulum's angle are both read in with separated incremental encoder!!

Thx in advance!!!

ME KMUTT said...

#Win
You must have the velocity of the cart and rod with ,because
u = PWM =- k1 (rod angle-ref)-k2 (rod velocity)-k3 (cart position-ref1)-k4 (cart velocity).

ME KMUTT said...

xd = cart position desire

Win said...

Thx a lot,
Up until now i have all necessary parameters, including:
- pendulum angle,
- angular velocity of the pendulum,
- the cart position, and
- the velocity of the cart.

How can i determine K???
I am now trying to use a state space with a linear control!

for example:
x_dot_matrix = A*x_matrix + B*u_out
|delta*I - A| = 0
u_output = -(k_1*x_1 + .. + k_n*x_n)
= -K*x_matrix
where K = [k_1 k_2 ... k_n]

is this how u determine K???

Thx!!

ME KMUTT said...

In this case u can't be the matrix,because u is scalar, x are column
vector

k=[1x4 ]= one row,four column
x=[4x1]
so that
u=kx=[1x4]*[4x1]=[1x1] is scalar

Win said...

well, obviously u is not a matrix, since i would have here only a force F as an output!

kkw_palm said...

พี่ผมทำเรื่องนี้เหมือนกันขอคำปรึกษาได้ไหมครับ

ME KMUTT said...

@kkw_palm ได้สงสัยเรื่องไหนถามได้ ครับ

Anonymous said...

ใช้โปรแกรมอะไรควบคุมหรือคับผมกำลังจะทำโปรเจคเรื่อวนี้อยู่พอดีคับ

ME KMUTT said...

สำหรับตัวนี้ผมใช้ micro-controller ควบคุมครับ PIC18F4431
CCS C Compilers ครับ

Anonymous said...

แล้ว ได้ค่า U จากการคูณ Gain แต่ละ sensor แล้วค่าU จะต้องนำไปใช้ยังไงต่อครับ

ME KMUTT said...

เราก็สั่งออกจาก MCU ครับเช่นของผม ก็สั่ง PWM ออกไปหาชุด Drive Motor

ktt said...

พี่ครับพอดีผมทำโปรเจคเรื่องนี้อยู่พอดี ผมทำ plant เสร็จแล้วนะครับแต่ผมไม่รูจะเริ่มต้นคอนโทรลอะไรยังงัยอะคับ คือ ผมใช้ labview ควบคุมอะครับพี่ช่วยแนะนำหน่อยครับ

ME KMUTT said...

เพื่อให้เป็นไปตามเป้าหมาย ไม่ทราบว่าใช้ NI รุ่นไหนเพราะเราต้องรู้ว่ามี IO อะไรบ้าง และชุด Drive motor เป็นแบบไหนด้วยครับ เพราะสิ่งเหล่านี้จะเป็นตัวกำหนดการเขียนโปรแกรมด้วยครับ

ktt said...

ใช้กาด DAQ PCI6221 อะคับ ใช้บอร์ดได ของบริษิท ETT:ET-OPTO DC MOTOR DRIVER 6-24V/5A ใช้ encoder แบบ Incremental encoder สองตัวอะคับ

ME KMUTT said...

ในส่วนของ Hardware ผมว่าโอเคแล้ว
1.ใช้ Counter/timer ทั้งสองตัว ของ NI อ่านสัญญาณจาก encoder
2.ส่วนสัญญาณควบคุมที่สั่งออกจาก DAQ ใช้ Analog output ก็ได้โดยเอา AO นี้ไปแทน VR ของตัวปรับ speed ของ ET-OPTO DC MOTOR DRIVER 6-24V/5A
3. ส่วน Direction ใช้ Digital output

ktt said...

ขอบคุณมากครับพี่

ktt said...

พี่ใช้อะไรเป็นตัวคอนโทรลเหรอคับ PID หรือ Fuzzy คับ

ktt said...

ถ้าผมจะใช้พีไอดีควบคุม ผมต้องใช้พีไอดีสองตัวใช่ไหมครับ คือตัวหนึ่งควบคุมตัวแท่งแพนดูลัม อีกตัวหนึ่งควบคุมตัว Cart แต่ผมงงตรงที่ขับมอเตอร์ตัวเดียวกัน ผมจะต้องใช้อะไรเป็น setpoint เหรอคับพี่ พี่ช่วยแนะแนวทางหน่อยครับ

ME KMUTT said...

เพราะว่ามอเตอร์ตัวเดียวมันสามารถ Drive ระบบได้ทั้งสองส่วนเลย เนื่องจากพอมอเตอร์หมุน Cart ก็จะเคลื่อนที่ และในเวลาเดียวกัน มันจะส่งแรงไปที่ Base ของ Pendulum ด้วย ดังนั้น PID ก็จะมีแค่ตัวเดียวแล้วเขียนสมการควบคุม u ตามรูปที่.2 ด้านบนเลยครับ Setpoint ก็คือ theta_d และ xd นั้นเอง

ktt said...

พี่ครับ รบกวนพี่ช่วยอธิบาย การทำงานของสมการ u รูปที่ 2 ให้หน่อยนะครับ คือผมดูแล้วแต่ผมยังไม่เข้าใจครับพี่ ขอบคุณครับพี่

ME KMUTT said...

u คือค่าที่ป้อนเข้าชุด Drive motor (PWM) ครับ ซึ่งตามที่น้องเข้าใจคือค่าที่คำนวนจาก PID นั้นเอง

ktt said...

พี่ครับ ถ้าจะหาค่า k ของdcมอเตอร์ จากการทดลอง จะมีวิธีหาอย่างไรครับ

ME KMUTT said...

ผมไม่แน่ใจว่า k ที่หมายถึงคือ อะไร เช่น feedback gain หรือ ค่า Current constant

ktt said...

Km : gain of motor หน่วยเป็น rad/sec/V ครับ
Kf : gain of feedback หน่วยเป็น V/rad/sec ครับ ใช้ encoder แบบ incremental 1000 pulse ครับ

Post a Comment