顯示具有 PID 標籤的文章。 顯示所有文章
顯示具有 PID 標籤的文章。 顯示所有文章

2014年6月26日 星期四

Mechanical Experiment Improvement

有幸為母校成大機械系設計一堂機械工程實驗課程 (還有幸今天可以打中文XD)

這堂課的設計目標是因為目前開源硬體非常流行(像是Arduino、Raspberry Pi),售價不斷下降時效能卻大幅提升。我想利用Open-Source的軟體硬體,製作在機械工程中非常重要的PID控制器。


上課的流程是這樣的

在硬體方面,系統架構如下
(實作時的紀錄可以參考: 之前)

最後冠冕堂晃的說


在這堂課程的基礎上,日後可以設計小型的Term Project,利用PID控制馬達來達成應用,像是倒單擺的實踐或是輪型機器人的精準控制等等。


本實驗的核心精神在於利用開源的軟體以及硬體,來實作課程中學到的理論,並且解決其中的問題,讓課堂的學習以及實驗課的操作相輔相成,訓練出實作與理論兼具的機械工程師。




2014年6月18日 星期三

DC Motor Speed PID Control with Arduino

It is a new MechLab for NCKU ME next semester, a PID controller!
Hardware:





Source Code on Github: https://github.com/kvzhao/ME-PIDLab

The crucial part of the PID code is listed below
void loop()
{
    // Run a period to estimate more precise speed
    Motor.Tick();
    // Run for one Second
    delay(SamplingTime);
    Motor.Tock();

    // Read rotation speed from Encoder
    Input = Motor.getSpeedRPS();

    // PID Compute
    PID_Controller.Compute();
    if ((Output-prevOutput) >= oscGap) {
      //Output = prevOutput;
    }
    Motor.setSpeed(Output);
    prevOutput = Output;
    // Show Data
    /*
    Serial.print("Input: ");
    Serial.println(Input);
    Serial.print("Setpoint: "); 
    Serial.println(Setpoint);    
    Serial.print("Error: ");
    Serial.println(error);
    Serial.print("Output: "); 
    Serial.println(Output);*/
    Serial.println(error);
    // wait a little while
    delay(5);
}


My first test result (with KP=98, KI=8, PD=5)
There is almost no steady state error, however overshoot happens.
Next step is to tune the parameters and control the motor smoothly!

Some useful references