PID loop with a different command and feedback units / types

Click For Summary
The discussion centers on using a PID controller to adjust a laser's position based on light intensity readings. The user aims to maintain a delta of approximately 0.97% between the top and bottom intensity measurements, adjusting motor steps accordingly. Questions arise about the necessity of PID control if attenuation is fixed, suggesting that a binary search might suffice if only distance affects the readings. The conversation also touches on potential variables affecting attenuation, such as thermal expansion and the motor's linear position resolution. Ultimately, the effectiveness of PID in this context depends on the stability of the setup and the variability of the attenuation factors.
btb4198
Messages
570
Reaction score
10
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;
        }
 
Engineering news on Phys.org
btb4198 said:
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?
 
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.
 
btb4198 said:
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?
 
I am trying to understand how transferring electric from the powerplant to my house is more effective using high voltage. The suggested explanation that the current is equal to the power supply divided by the voltage, and hence higher voltage leads to lower current and as a result to a lower power loss on the conductives is very confusing me. I know that the current is determined by the voltage and the resistance, and not by a power capability - which defines a limit to the allowable...

Similar threads

  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
Replies
9
Views
2K