How to calculate the shielding time and determine the time step

84 Views Asked by At

The problem is illustrated as follows.

A shielding plate scans over a target plate at a constant speed $v_{scan}$ and dynamically shadows the target plate to adjust the exposure time of the light beam (see Fig. 1).

working_principle

The shielding time $t_{sh}$ at a point in the target plate is defined as the elapsed time of the point being shielded by the shielding plate. Fig. 2 shows a simple example and the shielding time at the point P, $t_{sh,p}$, equals to $\frac{L_{sp}}{v_{scan}}$.

shielding_time

The case in practice is more complicated. As is shown in Fig. 3, the shielding plate rotates about its center and scans over the target plate simultaneously. Given that both the scan velocity $v_{scan}$ and the rotary speed $\omega$ are known, then how to calculate the shielding time at the point P?

I have tried to calculate the shielding time using time discretization, however I have no idea how to select a proper time step for obtaining sufficient accuracy. There is a trade-off between the the accuracy and the computing efficiency.

case_in_practice

Here I give a specific example.

$L_{sp} = 30~mm$, $v_{scan} = 2~mm/s$

$t_{step} = 0.1,0.01,0.001~s$, $\omega = 6,60,600~^\circ/s$

And the results are shown in Fig. 4 and Fig.5. The number of shielding periods increases as the rotary speed rises up. When the the rotary speed rises up to $600^\circ/s$, the time step significantly affects the calculated shielding time.

diff_rotary_speed

diff_time_step

Any suggestions and advice are appreciated.

Appendix (matlab code)

shieldingPlateLength = 30; % mm
scanVelocity = 2; % mm/s
targetPlateLength = 300; % mm

xp = 100; % position: 100 mm

scanRange = xp + shieldingPlateLength*[-0.5, 0.5];

totalTime = (scanRange(end)-scanRange(1)) / scanVelocity;

for rotarySpeed = [6 60 600]
    for timeStep = [.1 .01 .001]
        % time discretization
        %         timeStep = 0.001; % s
        nStep = round(totalTime/timeStep);
        modifiedTimeStep = totalTime/nStep;

        timeSeqs = 0:modifiedTimeStep:totalTime;

        % calculation of dwell time
        %         rotarySpeed = 600; % degrees/s
        inShadow = @(x,t) ...
            (ones(numel(t),1)*x(:)' >= scanRange(1) + scanVelocity*t(:)*ones(1,numel(x)) - 0.5*shieldingPlateLength*cosd(rotarySpeed*t(:)*ones(1,numel(x)))) & ...
            (ones(numel(t),1)*x(:)' < scanRange(1) + scanVelocity*t(:)*ones(1,numel(x)) + 0.5*shieldingPlateLength*cosd(rotarySpeed*t(:)*ones(1,numel(x))));

        dwellTimeAtP = inShadow(xp, timeSeqs);

        dwellTime = sum(dwellTimeAtP) * modifiedTimeStep;

        figure, plot(timeSeqs, dwellTimeAtP, 'r-')
        ylim([0 1.2])
        title(['t_{sh,P} = ' num2str(dwellTime) ' s; {\omega} = ' num2str(rotarySpeed) ' {\circ}/s, t_{step} = ' num2str(timeStep) ' s'])
        xlabel('Timeline (s)')
        ylabel('Shielding rate (binary)')
    end
end
1

There are 1 best solutions below

2
On BEST ANSWER

The shield projects to a line segment with the following endpoints:

$$vt-|\sin(\omega t+\phi)|,vt+|\sin(\omega t+\phi)|.$$

The exposure time is given by the length of the time interval at a given abscissa, as shown on the plots below (abscissa as a function of time).

Actually, this amounts to solving two transcendental equations of the form $\sin(u)=au+b$ which is the intersection between a sinusoid and a straight line. There is no closed form and you need to resort to numerical methods (Newton).

Note that for high rotation speeds, you will find more than one interval and need to accumulate them. The task of root separation is eased by the fact that the curve is monotonous or unimodal between two "nodal points" (vertical shield) so that you can easily determine the relevant search intervals.

Another option is to discretize the curves to polylines, with a well-chosen step (use the remainder formula for Taylor approximation of the first order), then finding the intervals turns to an easy line/segment intersection problem. (And the exposure time profile is a piecewise linear function that you can compute exactly.)

enter image description here

enter image description here