PID loop with a different command and feedback units / types

  • Thread starter btb4198
  • Start date
413
2
I have a laser and I am adjusting it's position using a motor, and I am reading the laser light intensity at the top and bottom using a sensor.
then I divide the top from the bottom and the goal is to get around 0.97%. This is called delta, if delta is too high, you move the motor lower and if delta is too lower we move it up.

now I coded a PID, the program I have my command is in motor steps(position) but my feed back is in light intensity percent.

so how do I set up my PID ? can I even use a PID this way ?

here is my code:
Code:
  GetValue()
  {
 
    PID_controller PID = new PID_controller(2, 1, 0);
  ****
 
  stepsize = (int)PID.UpdatePID(Convert.ToDouble(stepsize), delta);
                 stepsize = changeStepSize( stepsize);
                
                
    ***
                
                 }
    public PID_controller(int Proportional, int Integral, int differential)
        {
            this.Proportional = Proportional;
            this.Integral = Integral;
            this.differential = differential;
             Istate = 0D;
            error_counter = 0;
             lastposition = 0;
        }


        double getPTerm(double command , double position)
        {
            double error = command - position;

            Istate += error;
            error_counter++;
            return error;
        }

        double getITerm()
        {
            double Integralvalue = Istate / error_counter;
            return Integralvalue;
        }

        double getDTerm(double position)
        {
            lastposition = position;
            double differential = lastposition - position;
            return differential;
        }

       public double UpdatePID( double command, double position)
        {
            double error = getPTerm(command, position);
            double perror = getITerm();
            double derror = getDTerm(position);
            command = (Proportional * error) + (Integral * perror) + (differential * derror);
            return command;
        }
 

berkeman

Mentor
55,353
5,530
I have a laser and I am adjusting it's position using a motor, and I am reading the laser light intensity at the top and bottom using a sensor.
then I divide the top from the bottom and the goal is to get around 0.97%. This is called delta, if delta is too high, you move the motor lower and if delta is too lower we move it up.
What is attenuating the laser intensity to around 1%? Is that attenuation variable with something in the setup other than just distance?

If the attenuation is fixed except for the distance variation, there is no need for PID control, IMO. Just do a binary search on distance to get your best match to the 0.97% intensity ratio. If the attenuation is variable with some other part of the setup, how fast can it vary, and how fast can the laser position be changed?

EDIT / ADD -- And what kind of motor is it?
 
413
2
Sorry, there was a typo. It is 97%, but we are working in decimal form 0.97. The laser beam is going through a expansion lens.
 

berkeman

Mentor
55,353
5,530
The laser beam is going through a expansion lens.
Why do you think you need a servo to control the position of the laser? If nothing is varying in the setup after the initial position and attenuation are verified, what are you having to correct for? Maybe thermal expansion? What linear position resolution do you have with your setup?
 

Want to reply to this thread?

"PID loop with a different command and feedback units / types" You must log in or register to reply here.

Related Threads for: PID loop with a different command and feedback units / types

Replies
2
Views
5K
  • Posted
Replies
7
Views
600
  • Posted
Replies
5
Views
4K
Replies
2
Views
1K
Replies
14
Views
14K

Physics Forums Values

We Value Quality
• Topics based on mainstream science
• Proper English grammar and spelling
We Value Civility
• Positive and compassionate attitudes
• Patience while debating
We Value Productivity
• Disciplined to remain on-topic
• Recognition of own weaknesses
• Solo and co-op problem solving
Top