Closed-loop Motor Control

advertisement
Microcontrollers (Embedded Systems) Lab 7
Closed-Loop Motor Control
Authors:
Cuauhtémoc Carbajal
Francisco Rojas
Learning Objectives
In this lab, you will learn how to construct a closed-loop angular velocity controller for a DC motor.
The motor velocity will be determined by measuring the tachometer voltage using an ADC
channel. The reference angular velocity will be provided to the microcontroller by software and
should be calibrated in revolutions per second. The motor driving signal will be provided by the
STM32F3 DAC. The value for the controller’s constants should be determined.
Introduction
Closed-loop speed control of DC motors is used in many robotics applications. A DC motor can be
driven from a microcontroller using a Pulse Width Modulated (PWM) signal. The inherent low-pass
characteristic of the DC motor leads to the averaging of the PWM signal over time; this is in effect
equivalent to driving the motor with a DC voltage. Where available, a programmable analog
voltage can be used instead, via a DAC for example.
This laboratory will address the design of a closed-loop speed control system for a DC motor that is
part of the Sensors and Instrumentation System made by TecQuipment. Figure 1 shows the set-up
to be used for this experiment: A small DC motor can be driven using an analog control signal. A
tachometer is mechanically coupled to the driving motor, generating an output voltage that is
proportional to the shaft velocity of the driving motor. By monitoring this voltage, a simple closedloop speed control system can be implemented.
Fig 1
Because both the microcontroller’s ADC and DAC must work with voltages in the 0-3 V range, the
voltage coming from the tachometer is divided by 2 before being applied to the ADC. By the same
token, the voltage generated by the DAC is multiplied by 2 before being applied to the motor,
allowing more room for control.
Your program should use one of the on-board DAC channels to generate an analog control signal
vC (0 ... 3 V). This signal –multiplied by 2– is to be applied to the motor. On the other hand, the
feedback signal from the tachometer vFB (0 ... 6 V) –divided by 2– is to be read by the
microcontroller using a channel of an ADC unit. The set-point signal vSP should be given as a
constant by software. A proportional control law is to be implemented, i. e. control signal
vC = KP ⋅ (vSP - vFB),
where KP is the proportional control gain.
In a first iteration, the whole control cycle – from data acquisition (vFB), via the calculation of
control signal vC through to the output of this signal on the DAC – should be implemented within
an endless loop. The controller then runs as quickly as possible with the next control cycle directly
following the previous one.
However, digital control systems commonly execute at a fixed sample rate. This can be achieved
by running the control cycle from within a timer Interrupt Service Routine (ISR), where the timer
has been configured to elapse at the end of the desired sample interval. This means that all
control signals are only updated at these fixed pre-programmed sample instances. Extend the
design of your digital control system to execute at a sample rate appropriate to the motor
dynamics.
vC
ω
vSP
Microcontroller
vFB
Fig 2
Required Material
Hardware
Sensors and Instrumentation System
STM32F3Discovery Board
Software
Keil uVision version 4.7
Practical Experiments
For all experiments, switch on the Sensors and Instrumentation System for a minimum of 5
minutes prior to any settings being made or any results take. This will ensure that any drift in the
circuits due to thermal effects will be kept to a minimum.
Part I: Adjustment of the differential amplifier for a gain = 0.5, 0ffset = 0
Consider figure 3a for this part of the lab.
1. Connect the power eliminator to the power input of the Sensor and Instrumentation
System.
2. Wait 5 minutes.
3. Connect Ref1 to the V input of the panel meter.
4. Select V with the panel meter switch (up position).
5. Adjust Ref1 voltage to 0 volts.
Consider figure 3b for this part of the lab.
6.
7.
8.
9.
10.
11.
Connect Ref1 to the positive input of the differential amplifier.
Connect the negative input of this block to 0V.
Connect the output of this block to the V input of the panel meter.
Select V with the panel meter switch (up position)
In the differential amplifier, select k1 = 1.
In the differential amplifier, adjust the zero control for getting 0 volts in the panel meter.
Consider figure 3a for this part of the lab.
12. Connect Ref1 to the V input of the Panel meter.
13. Adjust Ref1 voltage to 3 volts.
Consider figure 3b for this part of the lab.
14.
15.
16.
17.
18.
Connect Ref1 to positive input of the differential amplifier.
Connect the negative input of this block to 0V.
Connect the output of this block to the V input of the panel meter.
Select V with the panel meter switch (up position).
In the differential amplifier, adjust k2 until the voltage at the output of this block = 1.5
volts. The result is that the gain of this block is 0.5.
Power
input
Zero
Control
Fig 3a
Fig 3b
Part II: Adjustment of the summing amplifier for a gain = 2.
Consider figure 4a for this part of the lab.
1. Connect Ref1 to the V input of the panel meter.
2. Select V with the panel meter switch (up position).
3. Adjust Ref1 voltage to 1.5 volts.
Consider figure 4b for this part of the lab.
4.
5.
6.
7.
8.
Connect Ref1 to positive input of the summing amplifier.
Connect the negative input of this block to 0V.
Connect the output of the summing amplifier to the low-pass filter input.
Connect the output of the low-pass filter to the V input of the panel meter.
Select V with the panel meter switch (up position).
9. In the summing amplifier, adjust k until the reading in the panel meter is equal to 3V. This
knob is very sensitive, so it is difficult to adjust. When correctly adjusted, the gain for the
summing amplifier is 2.
Fig 4a
Fig 4b
Part III: Getting the motor voltage – velocity relationship
Consider figure 5a for this part of the lab.
1. Connect Ref1 to the V input of the panel meter.
2. Select V with the panel meter switch (up position).
3. Adjust Ref1 voltage to 1 volt.
Consider figure 5b for this part of the lab.
4.
5.
6.
7.
8.
9.
10.
11.
Connect everything as shown in figure 5b.
Select Hz with the panel meter switch (down position).
Turn on the motor changing the motor’s switch to the position indicated by 1.
Wait 10 seconds.
Get the value shown in the panel meter. It corresponds to the motor’s velocity in Hz (rps).
Turn off the motor changing the motor’s switch to the position indicated by 0.
Repeat step 1 to 6 for the following Ref1 voltages: 1.5, 2.0, and 2.5.
Fill the table shown below.
Table 1
Ref1 voltage (Volts)
1.0
1.5
2.0
2.5
Motor velocity
Hz (rps)
12. Use linear interpolation to calculate the constant that relates Ref1 voltage to the motor
velocity. What is the value of this constant? ______________ (rps/volt)
Fig 5a
Fig 5b
Part IV: Getting the motor voltage – tachometer voltage relationship
Consider figure 6a for this part of the lab.
1. Connect Ref1 to the V input of the panel meter.
2. Select V with the panel meter switch (up position).
3. Adjust Ref1 voltage to 1 volt.
Consider figure 6b for this part of the lab.
4.
5.
6.
7.
8.
9.
10.
11.
Connect everything as shown in figure 6b.
Turn on the motor changing the motor’s switch to the position indicated by 1.
Wait 10 seconds.
Get the value shown in the panel meter. It corresponds to the output voltage of the
tachometer (divided by 2).
Observe in particular the voltage shown in the panel meter. The voltage should never
exceed 3V for avoiding damaging the STM32F3 Discovery board.
Turn off the motor changing the motor’s switch to the position indicated by 0.
Repeat step 1 to 6 for Ref1 voltages: 1.5, 2.0, and 2.5.
Fill the table shown below.
Table 2
Ref1 voltage
(Volts)
Motor velocity (got in part III)
Hz (rps)
Tachometer voltage /2
(Volts)
vC
ω
vFB
1.0
1.5
2.0
2.5
12. Use linear interpolation to calculate the constant that relates the motor angular velocity
(rps) to the tachometer’s output voltage. What is the value of this constant? _______
(volts/rps).
Note: The value of the tachometer voltage should not exceed 3V under any circumstance.
Fig 6a
Fig 6b
Part V: Getting the motor’s time constant
Consider figure 6a for this part of the lab.
1. Connect Ref1 to the V input of the panel meter.
2. Select V with the panel meter switch (up position).
3. Adjust Ref1 voltage to 1.5 volt (DAC output = 2048).
Consider figure 6b for this part of the lab.
4.
5.
6.
7.
8.
Connect everything as shown in figure 6b.
Connect the oscilloscope channel 1 probe input to the low-pass filter output.
Set the time base to 500 ms/div. Set the voltage scale to 1 volt/div.
Turn on the motor changing the motor’s switch to the position indicated by 1.
Get the open-loop time response of the system using the oscilloscope. Use the hold
button to freeze the response.
9. Assuming a first order system (see Figure 7) calculate the time constant (T1) of the system
__________. Calculate also K __________. Finally calculate Td __________.
10. Convert K —observed in the oscilloscope screen in volts— to ADC/DAC units (4095 is
equivalent to 4095 * 3 / 4096) _____________.
Fig 7
Part VI: Generating a 1-Hz sinusoidal frequency on DAC channel 1
1. Elaborate a program to generate a 1-Hz sinusoidal frequency on DAC channel 1 with a
voltage range equal to 3 volts.
2. Download the code to the STM32F3 discovery board.
3. Connect the oscilloscope probe to PA4 for verifying the correct behavior of the DAC.
4. Run the program. Does everything work as expected?
5. Connect everything as shown in figure 8.
6. Run your program again.
7. Turn on the motor changing the motor’s switch to the position indicated by 1.
8. Does everything work as expected?
9. Observe in particular the voltage shown in the panel meter. The voltage should never
exceed 3V for avoiding damaging the board.
10. Turn off the motor changing the motor’s switch to the position indicated by 0.
Fig 8.
Part VII: On-off closed-loop motor control
1. Connect everything as shown in figure 9.
2. Elaborate a program to:
a. Generate a timer interrupt with a time interval equal to the motor’s time constant
divided by 20.
b. When the interrupt is generated,
i. Measure the voltage coming from the tachometer (via PC1).
ii. Convert this voltage to rps and send it to the LCD display.
iii. If the voltage delivered by the ADC is less or equal than the setpoint (1.5V)
set the DAC output value to 3V; else set the DAC output to 0V.
3. Download the code to the STM32F3 discovery board.
4. Connect the oscilloscope to the ADC input.
5. Turn on the motor changing the motor’s switch to the position indicated by 1.
6. Run the program.
7. Get the time response of the system using the oscilloscope. Does everything work as
expected?
8. Turn off the motor changing the motor’s switch to the position indicated by 0.
Part VIII: Proportional closed-loop motor control
1. Connect everything as shown in figure 9.
2. Calculate KP using Table 3. 1
3. Elaborate a program to:
a. Generate a timer interrupt with a time interval equal to the motor’s time constant
divided by 20.
b. When the interrupt is generated,
i. measure the voltage coming from the tachometer (via PC1)
ii. Convert this voltage to rps and send it to the LCD display.
iii. Calculate the error : setpoint – voltage measured. The setpoint —set by
software— is 1.5V (equivalent to ADC value = 2048).
iv. Calculate m as follows: m = m + KP*e.
v. If m ≥ 4095 then m = 4095; else if m<0 then m=0.
vi. Output m value using the DAC.
4. Download the code to the STM32F3 discovery board.
5. Connect the oscilloscope to the ADC input.
6. Turn on the motor changing the motor’s switch to the position indicated by 1.
7. Run the program. Does everything work as expected?
8. Turn off the motor changing the motor’s switch to the position indicated by 0.
9. Adjust KP. Repeat steps 4 to 8 until getting a satisfactory system time response (low rising
time, low overshoot).
1
As an alternative, you can use the ZNFD PID tuning procedure explained in the Annex.
Table 3
Controller
KP
𝑇1
𝐾 𝑇𝑑
0.9 𝑇1
Proportional + Integral
𝐾 𝑇𝑑
1.2 𝑇1
Proportional + Integral + Derivative
𝐾 𝑇𝑑
TI
TD
Proportional
3.3 𝑇𝑑
2 𝑇𝑑
0.5 𝑇𝑑
Fig 9
Reflections
Please be specific.
1.
2.
3.
4.
5.
Are the instructions for doing this lab clear enough?
Is the lab too complicated or too easy?
For which aspects of the lab did you need help from your colleagues?
For which aspects of the lab did you need help from your professor?
What did you learn?
Annex
Digital PID Controllers
Proportional-Integral-Derivative (PID) control is still widely used in industries because of its
simplicity, good control performance and excellent robustness to uncertainties. No need for a
plant model. No design to be performed. The user just installs a controller and adjusts 3 gains to
get the best achievable performance. Most PID controllers nowadays are digital. In this document
we discuss digital PID implementation on an embedded system. We assume the reader has some
basic understanding of linear controllers.
Different forms of PID
A standard "textbook" equation of PID controller is
(1)
where the error e(t), the difference between command and plant output, is the controller input,
and the control variable u(t) is the controller output. The 3 parameters are K (the proportional
gain), Ti (integral time), and Td (derivative time).
Performing Laplace transform on (1), we get
(2)
Another form of PID that will be discussed further in this document is sometimes called a parallel
form.
(3)
With its Laplace transform
(4)
We can easily convert the parameters from one form to another by noting that
(5)
Discrete-time PID Algorithm
For digital implementation, we are more interested in a Z-transform of (3)
(6)
Rearranging gives
(7)
Define
(8)
(8) can then be rewritten as
(9)
which then converted back to difference equation as
(10)
a form suitable for implementation. Listing 1 shows how to code this algorithm in C. We assume
that the plant output is returned from a function readADC( ), and the control variable u is
outputted using writeDAC( ). Note that u must be bounded above and below depending on the
DAC resolution. For instance, UMAX = 4095 and UMIN = 0 for 12-bit DAC.
double e, e1, e2, u, delta_u;
k1= kp + ki + kd;
k2=-kp – 2*kd;
k3= kd;
void pid( )
{
e2 = e1;
e1 = e;
y = readADC( );
e = setpoint – y;
delta_u = k1*e + k2*e1 + k3*e2;
u = u + delta_u;
if (u > UMAX) u = UMAX;
if(u < umin) u = UMIN;
writeDAC(u);
// update error variables
// read variable from sensor
// compute new error
// PID algorithm
// limit to DAC range
// send to DAC hardware
}
Listing 1: C code for the PID algorithm
PID Tuning
Adjusting the PID gains to achieve a good response could be problematic, especially for an
inexperienced user. As a result, most commercial PID controllers have functions to tune the 3
parameters automatically. This is normally called "autotuning" feature. There are some variants of
autotuning methods suggested in the literature. On the other hand, there are several manual
tuning schemes that can be used, such as the Ziegler-Nichols Frequency Domain (ZNFD) method
that we will explain now.
First we have to caution that, to conform to the derivation from [1], our ZNFD discussion refers to
the "textbook" PID equation (1), not the parallel form (3). This does not pose any problem since
the two forms are closely related by equation (5).
To tune a PID controller manually by ZNFD method, we start by turning off both the integral and
derivative terms. From (1) we see this can be done by letting𝑇𝑖 → ∞, 𝑇𝑑 = 0. So now the PID is left
only with the proportional gain K. We crank K up to the point that the closed-loop system starts to
oscillate. At this point, the plant output will swing in a constant sinusoid motion, not growing and
not dying out. Write this value down on a paper as Ku. Then find a way to measure the period of
oscillation. Note this period as Tu. That’s all. Suggested values of the 3 parameters can be found
from Table a1.
Table a1: Suggested PID parameters from ZNFD method
Controller Form
K
Ti
Td
P
0.5 Ku
PI
0.4 Ku
0.8 Tu
PID
0.6 Ku
0.5 Tu 0.125 Tu
Reference
[1] K.J. Astrom and T.Hagglund. PID Controllers, 2nd ed., Instrument Society of America, 1995.
Download