สรุปการนำเสนอ วันที่ 15 ก.ค. 2553
"การใช้งานโมดูลวัดความเร่งแบบ 3 แกน"
ขออภัยครับ !! หัวข้อนี้ยังอยู่ระหว่างการนำเผยแพร่ ยังไม่เสร็จสมบูรณ์
วันเสาร์ที่ 31 กรกฎาคม พ.ศ. 2553
Group Meeting วันพฤหัสบดีที่ 8 กรกฎาคม 2553
สรุปการนำเสนอ วันที่ 8 ก.ค. 2553
"การสร้างสัญญาณ PWM ด้วย FPGA"
1. เปิดโปรแกรม Xilinx ISE 9.2i สร้าง Project ใหม่โดยไปที่File>New Project ตั้งชื่อ Project
2. เมื่อสร้าง Project ใหม่เสร็จเรียบร้อยแล้ว ก็ทำการ เพิ่มไฟล์ลงใน Project ตามรูปที่ 1
6. เลือก Schematic พร้อมทั้งตั้งชื้อ File
9. หลังจากทำการต่อวงจรเรียบร้อยแล้ว ทำการ Save จะเห็นได้ว่า ไฟล์ที่สร้างใหม่จะเป็น Top module เพื่อใช้ในการ Synthesize วงจร
10. หลังจากนั้นก็ทำการ Synthesize วงจร Assign Package ตามลำดับ
11. จากนั้นทำการ Implement และ Generate Programming File ตามลำดับ
12. ทำกระบวนการ iMPACT เพื่อเอาโปรแกรมลง FPGA
"การสร้างสัญญาณ PWM ด้วย FPGA"
นำเสนอโดย สุรศักดิ์ นาสุริวงค์
ในการสร้างสัญญาณ PWM ด้วย FPGA นั้นผู้สร้างจะต้องเข้าใจหลักการทำงานของวงจร Counter เสียก่อน ซึ่งในการทดลองนี้มีการสร้าง วงจรบน FPGA โดยการเขียนด้วย ภาษา VHDL ซึ่งหลังจากทำการ Synthesize แล้วได้หน้าต่อของวงจรออกมาสองส่วนคือ ส่วนของวงจร หาความถี่ (Div) และส่วนของการสร้างสัญญาณ PWM (GenPWM) แยกกัน ซึ่งสามารถนำมาต่อ รวมกันได้ทั้งการเขียนด้วย ภาษา VHDL หรือ ว่าใช้เครื่องมือที่ติดมากับตัว Software Xilinx ISE 9.2i เพื่อสร้าง Schematic File เพื่อทำการ Component ระหว่างวงจรทั้งสอง
1. เปิดโปรแกรม Xilinx ISE 9.2i สร้าง Project ใหม่โดยไปที่
2. เมื่อสร้าง Project ใหม่เสร็จเรียบร้อยแล้ว ก็ทำการ เพิ่มไฟล์ลงใน Project ตามรูปที่ 1
4. ทำการสร้าง Schematic Symbol ของทั้ง สองวงจร
5. ต่อวงจรทั้งเข้าด้วยกันโดยทำการ เพิ่มไฟล์ คลิกขวาที่ เบอร์ FPGA เลือก New Source ดังรูปที่ 3
5. ต่อวงจรทั้งเข้าด้วยกันโดยทำการ เพิ่มไฟล์ คลิกขวาที่ เบอร์ FPGA เลือก New Source ดังรูปที่ 3
6. เลือก Schematic พร้อมทั้งตั้งชื้อ File
7. หลังจากนั้นจะได้หน้าต่างตาม รูปที่ 4
8. ทำการต่อวงจรดังรูปที่ 5 โดยเลือกอุปกรณ์ที่เราทำการ Create Schematic Symbol โดยเลือกมาจาก หน้าต่าง Source ดูที่ ช่อง Categories เลือกตามที่อยู่ของไฟล์ที่สร้างสร้าง Schematic Symbol
9. หลังจากทำการต่อวงจรเรียบร้อยแล้ว ทำการ Save จะเห็นได้ว่า ไฟล์ที่สร้างใหม่จะเป็น Top module เพื่อใช้ในการ Synthesize วงจร
10. หลังจากนั้นก็ทำการ Synthesize วงจร Assign Package ตามลำดับ
11. จากนั้นทำการ Implement และ Generate Programming File ตามลำดับ
12. ทำกระบวนการ iMPACT เพื่อเอาโปรแกรมลง FPGA
วันพฤหัสบดีที่ 1 กรกฎาคม พ.ศ. 2553
Group Meeting วันพฤหัสบดีที่ 1 ก.ค. 2553
สรุปการนำเสนอ วันที่ 1 ก.ค. 2553
"การทดลองใช้ Arduino ควบคุมอุณหภูมิด้วยระบบ PID"
นำเสนอโดย จักราวุธ บุญชู
ระบบ PID เป็นวิธีการควบคุมระบบแบบหนึ่ง ประกอบด้วยการคำนวณสมการทางคณิตศาสตร์ 3 ส่วน คือ Proportional, Integral และ Derivative control โดยทั้ง 3 ส่วนนี้จะทำหน้าที่หลักต่างกัน เพื่อช่วยกันส่งเสริมและชดเชยการควบคุม ให้มีเสถียรภาพที่สุด แต่อย่างไรก็ตาม PID control ก็อ้างอิงสมการทางคณิตศาสตร์ แต่ในการทดลองนี้ได้เรียกใช้ Library PID ที่มีสมการทางคณิตศาสตร์อยู่แล้วซึ่งสามารถเรียกใช้งานได้เลยเพียงป้อนค่าอินพุต ค่าที่ต้องการ ค่า Kp Ki Kd ให้ฟังก์ชัน ก็จะมีการคำนวณค่าเอาท์พุตที่จะทำค่าอินพุตเข้าหาค่า ที่ต้องการ
การทดลอง
1. เปิดโปรแกรมแล้วเลือก File > Examples > PID_Beta6 > Example > PIDSample เมื่อเปิดขึ้นมาแล้วจะได้ code ดังรูป
คำสั่งที่เกี่ยวข้องกับ Library PID
PID myPID(&Input, &Output, &Setpoint,2,5,1);คือ คำสั่งส่งและรับค่าให้กับฟังก์ชันใน Library ที่มีการรับค่า อินพุต เอาท์พุต ค่าทีเราต้องการ ค่า Kp , Ki ,Kd ตามลำดับ
Set point = xxxx; คือ การตั้งค่าที่ต้องการ
myPID.SetMode(AUTO); คือ คำสั่งเปิดลูปเปิด PID ให้มีการทำงานแบบอัตโนมัติ ซึ่งใน Library นี้มีให้เลือกอยู่ 2 โหมด คือ Auto และ Manual
myPID.Compute(); คือ คำสั่งเรียกใช้ฟังก์ชันคำนวณ
จากรูปที่ 2 ให้เพิ่มคำสั่งเพื่อให้โปรแกรมแสดง ค่า อินพุต เอาท์พุต และค่าที่เราต้องการ ด้วยคำสั่ง
Serial.print(" "); และทำการกำหนด Baud rate ด้วยคำสั่ง Serial.begin(9600);
ดังรูปที่ 3
จากนั้นทำการ Compiler เมื่อไม่มี error แล้วให้ตรวจสอบว่า Port com ที่ใช้ตรงกันหรือยัง และต้องดูด้วยว่าเบอร์ไอซีที่ให้นั้นถูกต้องหรือไม่ ดังรูปที่ 4 รูปที่ 5 และ รูปที่ 6
เมื่อตรวจสอบเรียบร้อยแล้วให้ทำการโหลดโปรแกรมเข้าไอซี จะนั้นก็ต่อวงจรเพื่อทดลอง ดังรูปที่ 7 และ รูปที่ 8
สามารถดูค่า อินพุต เอาท์พุต ได้โดยการเปิดหน้าต่าง Terminal ดังรูปที่ 9
จากเห็นได้ว่าการที่เราดูค่าจะ Terminal นั้นจะมองได้ยากว่าการลู่เข้าจะช้าหรือเร็ว ดังนั้นต้องมีเขียนกราฟเพื่อที่ให้มองได้ง่ายขึ้นโดยใช้โปรแกรม processing ต้องเพิ่ม code ดังนี้
#include
double Setpoint, Input, Output;
PID myPID(&Input, &Output, &Setpoint,2,5,1);
unsigned long serialTime;
void setup()
{
Serial.begin(9600);
Input = analogRead(0);
Setpoint = 100;
myPID.SetMode(AUTO);
}
void loop()
{
Input = analogRead(0);
myPID.Compute();
analogWrite(3,Output);
if(millis()>serialTime)
{
SerialReceive();
SerialSend();
serialTime+=5;
}
delay(500);
}
union {
byte asBytes[24];
float asFloat[6];
}
foo;
void SerialReceive()
{
int index=0;
byte Auto_Man = -1;
while(Serial.available()&&index<25)
{
if(index==0) Auto_Man = Serial.read();
else foo.asBytes[index-1] = Serial.read();
index++;
}
if(index==25 && (Auto_Man==0 || Auto_Man==1))
{
Setpoint=double(foo.asFloat[0]);
if(Auto_Man==0)
{
Output=double(foo.asFloat[2]);
}
double p, i, d;
p = double(foo.asFloat[3]);
i = double(foo.asFloat[4]);
d = double(foo.asFloat[5]);
myPID.SetTunings(p, i, d);
if(Auto_Man==0) myPID.SetMode(MANUAL);
else myPID.SetMode(AUTO);
}
Serial.flush();
}
void SerialSend()
{
Serial.print("PID ");
Serial.print(Setpoint);
Serial.print(" ");
Serial.print(Input);
Serial.print(" ");
Serial.print(Output);
Serial.print(" ");
Serial.print(myPID.GetP_Param());
Serial.print(" ");
Serial.print(myPID.GetI_Param());
Serial.print(" ");
Serial.print(myPID.GetD_Param());
Serial.print(" ");
if(myPID.GetMode()==AUTO) Serial.println("Automatic");
else Serial.println("Manual");
}
เมื่อเขียนโปรแกรมเรียบร้อยแล้วก็ทำการโหลดโปรแกรม และเปิดโปรแกรม Processing ไฟล์ชื่อ PID_Plot แล้วกดรันโปรแกรม ดังรูปที่ 10
"การทดลองใช้ Arduino ควบคุมอุณหภูมิด้วยระบบ PID"
นำเสนอโดย จักราวุธ บุญชู
ระบบ PID เป็นวิธีการควบคุมระบบแบบหนึ่ง ประกอบด้วยการคำนวณสมการทางคณิตศาสตร์ 3 ส่วน คือ Proportional, Integral และ Derivative control โดยทั้ง 3 ส่วนนี้จะทำหน้าที่หลักต่างกัน เพื่อช่วยกันส่งเสริมและชดเชยการควบคุม ให้มีเสถียรภาพที่สุด แต่อย่างไรก็ตาม PID control ก็อ้างอิงสมการทางคณิตศาสตร์ แต่ในการทดลองนี้ได้เรียกใช้ Library PID ที่มีสมการทางคณิตศาสตร์อยู่แล้วซึ่งสามารถเรียกใช้งานได้เลยเพียงป้อนค่าอินพุต ค่าที่ต้องการ ค่า Kp Ki Kd ให้ฟังก์ชัน ก็จะมีการคำนวณค่าเอาท์พุตที่จะทำค่าอินพุตเข้าหาค่า ที่ต้องการ
การทดลอง
1. เปิดโปรแกรมแล้วเลือก File > Examples > PID_Beta6 > Example > PIDSample เมื่อเปิดขึ้นมาแล้วจะได้ code ดังรูป
คำสั่งที่เกี่ยวข้องกับ Library PID
PID myPID(&Input, &Output, &Setpoint,2,5,1);คือ คำสั่งส่งและรับค่าให้กับฟังก์ชันใน Library ที่มีการรับค่า อินพุต เอาท์พุต ค่าทีเราต้องการ ค่า Kp , Ki ,Kd ตามลำดับ
Set point = xxxx; คือ การตั้งค่าที่ต้องการ
myPID.SetMode(AUTO); คือ คำสั่งเปิดลูปเปิด PID ให้มีการทำงานแบบอัตโนมัติ ซึ่งใน Library นี้มีให้เลือกอยู่ 2 โหมด คือ Auto และ Manual
myPID.Compute(); คือ คำสั่งเรียกใช้ฟังก์ชันคำนวณ
จากรูปที่ 2 ให้เพิ่มคำสั่งเพื่อให้โปรแกรมแสดง ค่า อินพุต เอาท์พุต และค่าที่เราต้องการ ด้วยคำสั่ง
Serial.print(" "); และทำการกำหนด Baud rate ด้วยคำสั่ง Serial.begin(9600);
ดังรูปที่ 3
จากนั้นทำการ Compiler เมื่อไม่มี error แล้วให้ตรวจสอบว่า Port com ที่ใช้ตรงกันหรือยัง และต้องดูด้วยว่าเบอร์ไอซีที่ให้นั้นถูกต้องหรือไม่ ดังรูปที่ 4 รูปที่ 5 และ รูปที่ 6
เมื่อตรวจสอบเรียบร้อยแล้วให้ทำการโหลดโปรแกรมเข้าไอซี จะนั้นก็ต่อวงจรเพื่อทดลอง ดังรูปที่ 7 และ รูปที่ 8
สามารถดูค่า อินพุต เอาท์พุต ได้โดยการเปิดหน้าต่าง Terminal ดังรูปที่ 9
จากเห็นได้ว่าการที่เราดูค่าจะ Terminal นั้นจะมองได้ยากว่าการลู่เข้าจะช้าหรือเร็ว ดังนั้นต้องมีเขียนกราฟเพื่อที่ให้มองได้ง่ายขึ้นโดยใช้โปรแกรม processing ต้องเพิ่ม code ดังนี้
#include
double Setpoint, Input, Output;
PID myPID(&Input, &Output, &Setpoint,2,5,1);
unsigned long serialTime;
void setup()
{
Serial.begin(9600);
Input = analogRead(0);
Setpoint = 100;
myPID.SetMode(AUTO);
}
void loop()
{
Input = analogRead(0);
myPID.Compute();
analogWrite(3,Output);
if(millis()>serialTime)
{
SerialReceive();
SerialSend();
serialTime+=5;
}
delay(500);
}
union {
byte asBytes[24];
float asFloat[6];
}
foo;
void SerialReceive()
{
int index=0;
byte Auto_Man = -1;
while(Serial.available()&&index<25)
{
if(index==0) Auto_Man = Serial.read();
else foo.asBytes[index-1] = Serial.read();
index++;
}
if(index==25 && (Auto_Man==0 || Auto_Man==1))
{
Setpoint=double(foo.asFloat[0]);
if(Auto_Man==0)
{
Output=double(foo.asFloat[2]);
}
double p, i, d;
p = double(foo.asFloat[3]);
i = double(foo.asFloat[4]);
d = double(foo.asFloat[5]);
myPID.SetTunings(p, i, d);
if(Auto_Man==0) myPID.SetMode(MANUAL);
else myPID.SetMode(AUTO);
}
Serial.flush();
}
void SerialSend()
{
Serial.print("PID ");
Serial.print(Setpoint);
Serial.print(" ");
Serial.print(Input);
Serial.print(" ");
Serial.print(Output);
Serial.print(" ");
Serial.print(myPID.GetP_Param());
Serial.print(" ");
Serial.print(myPID.GetI_Param());
Serial.print(" ");
Serial.print(myPID.GetD_Param());
Serial.print(" ");
if(myPID.GetMode()==AUTO) Serial.println("Automatic");
else Serial.println("Manual");
}
เมื่อเขียนโปรแกรมเรียบร้อยแล้วก็ทำการโหลดโปรแกรม และเปิดโปรแกรม Processing ไฟล์ชื่อ PID_Plot แล้วกดรันโปรแกรม ดังรูปที่ 10
สมัครสมาชิก:
บทความ (Atom)