21. PID controller SYSTEM ACTUATOR. Figure 1: A crude example for a regulation



Similar documents
25. AM radio receiver

LEVERAGING FPGA AND CPLD DIGITAL LOGIC TO IMPLEMENT ANALOG TO DIGITAL CONVERTERS

FFT Frequency Detection on the dspic

ETEC Digital Controls PIC Lab 10 Pulse Width Modulation

AN3252 Application note

Lab 2.0 Thermal Camera Interface

Microcontroller-based experiments for a control systems course in electrical engineering technology

PID Control. Proportional Integral Derivative (PID) Control. Matrix Multimedia 2011 MX009 - PID Control. by Ben Rowland, April 2011

Accurate Measurement of the Mains Electricity Frequency

XC series BD board for special functions. Operate Manual

Wireless Security Camera

Lab Experiment 1: The LPC 2148 Education Board

Radio sensor powered by a mini solar cell the EnOcean STM 110 now functions with even less light

Conversion Between Analog and Digital Signals

How to design and implement firmware for embedded systems

AND9035/D. BELASIGNA 250 and 300 for Low-Bandwidth Applications APPLICATION NOTE

HITACHI INVERTER SJ/L100/300 SERIES PID CONTROL USERS GUIDE

Display Board Pulse Width Modulation (PWM) Power/Speed Controller Module

Keil C51 Cross Compiler

DIGITAL-TO-ANALOGUE AND ANALOGUE-TO-DIGITAL CONVERSION

Arduino project. Arduino board. Serial transmission

AN3998 Application note

Programing the Microprocessor in C Microprocessor System Design and Interfacing ECE 362

1. Learn about the 555 timer integrated circuit and applications 2. Apply the 555 timer to build an infrared (IR) transmitter and receiver

PC BASED PID TEMPERATURE CONTROLLER

If an occupancy of room is zero, i.e. room is empty then light source will be switched off automatically

Lesson 16 Analog-to-Digital Converter (ADC)

Chapter 6: From Digital-to-Analog and Back Again

Microcontroller Code Example Explanation and Words of Wisdom For Senior Design

Electronic Brick of Current Sensor

4. Optical position sensor, photo-current measurement

Below is a diagram explaining the data packet and the timing related to the mouse clock while receiving a byte from the PS-2 mouse:

AC/DC Power Supply Reference Design. Advanced SMPS Applications using the dspic DSC SMPS Family

Hello, and welcome to this presentation of the STM32L4 reset and clock controller.

EARTH PEOPLE TECHNOLOGY SERIAL GRAPH TOOL FOR THE ARDUINO UNO USER MANUAL

Digital Guitar Effects Pedal

DSPDemo. By Moe Wheatley MoeTronix.

8051 MICROCONTROLLER COURSE

Interfacing Analog to Digital Data Converters

Designing an efficient Programmable Logic Controller using Programmable System On Chip

Analog signals are those which are naturally occurring. Any analog signal can be converted to a digital signal.

AVR131: Using the AVR s High-speed PWM. Introduction. Features. AVR 8-bit Microcontrollers APPLICATION NOTE

Technical Note #3. Error Amplifier Design and Applications. Introduction

EE 472 Lab 2 (Group) Scheduling, Digital I/O, Analog Input, and Pulse Generation University of Washington - Department of Electrical Engineering

Design of an Insulin Pump. Purpose of an Insulin Pump:

Automation System TROVIS 6400 TROVIS 6493 Compact Controller

Measuring, Controlling and Regulating with labworldsoft

Lesson 10: Video-Out Interface

Automotive Sensor Simulator. Automotive sensor simulator. Operating manual. AutoSim

Programming Logic controllers

Debouncing Switches. Mechanical switches are one of the most common interfaces to a uc.

Using Arduino Microcontrollers to Sense DC Motor Speed and Position

Application Report. 1 Introduction. 2 Resolution of an A-D Converter. 2.1 Signal-to-Noise Ratio (SNR) Harman Grewal... ABSTRACT

Embedded Systems Design Course Applying the mbed microcontroller

SKP16C62P Tutorial 1 Software Development Process using HEW. Renesas Technology America Inc.

Building a Simulink model for real-time analysis V Copyright g.tec medical engineering GmbH

Features, Benefits, and Operation

AN2658 Application note

Working with microcontroller-generated audio frequencies (adapted from the Machine Science tutorial)

ARRL Morse Code Oscillator, How It Works By: Mark Spencer, WA8SME

etape Continuous Fluid Level Sensor Operating Instructions and Application Notes

Eric Mitchell April 2, 2012 Application Note: Control of a 180 Servo Motor with Arduino UNO Development Board

Heat. Investigating the function of the expansion valve of the heat pump. LD Physics Leaflets P Thermodynamic cycle Heat pump

1 Coffee cooling : Part B : automated data acquisition

TLK 48 MICROPROCESSOR-BASED DIGITAL ELECTRONIC REGULATOR

ε: Voltage output of Signal Generator (also called the Source voltage or Applied

HANDLING SUSPEND MODE ON A USB MOUSE

A Design of a PID Self-Tuning Controller Using LabVIEW

MP3 Player CSEE 4840 SPRING 2010 PROJECT DESIGN.

Σ _. Feedback Amplifiers: One and Two Pole cases. Negative Feedback:

MODULE BOUSSOLE ÉLECTRONIQUE CMPS03 Référence :

Lock - in Amplifier and Applications

RS-485 Protocol Manual

HT46R14A Single Phase AC Induction Motor Frequency Converter Application

POCKET SCOPE 2. The idea 2. Design criteria 3

Measuring Resistance Using Digital I/O

CONTENTS. Section 1 Document Descriptions Purpose of this Document Nomenclature of this Document... 3

The FT6x06 series ICs include FT6206 /FT6306, the difference of their specifications will be listed individually in this datasheet.

AVR Butterfly Training. Atmel Norway, AVR Applications Group

Servo Motor API nxt_motor_get_count nxt_motor_set_count nxt_motor_set_speed

Digital Sampling Oscilloscope

IEC Algorithmic Alert Tone Demo

An Introduction To Simple Scheduling (Primarily targeted at Arduino Platform)

Section 3. Sensor to ADC Design Example

VADC Versatile Analog to Digital Converter. XMC Microcontrollers August 2014

Capacitive Sensing Solutions from Silicon Labs. In this section, we are going to cover the Silicon Labs Capacitive Sensing solutions.

IR Communication a learn.sparkfun.com tutorial

DATA LOGGER AND REMOTE MONITORING SYSTEM FOR MULTIPLE PARAMETER MEASUREMENT APPLICATIONS. G.S. Nhivekar, R.R.Mudholker

Microcontroller Based Low Cost Portable PC Mouse and Keyboard Tester

The Autolab control command is located in the Measurement General group of commands.

Microtronics technologies Mobile:

9 Control Statements. 9.1 Introduction. 9.2 Objectives. 9.3 Statements

dspace DSP DS-1104 based State Observer Design for Position Control of DC Servo Motor

DAC Digital To Analog Converter

Series and Parallel Resistive Circuits

TEMPERATURE CONTROL APPLICATIONS BY MEANS OF A PIC16F877 MICROCONTROLLER

Microcontroller to Sensor Interfacing Techniques

Process Control Primer

Programming Examples. B.1 Overview of Programming Examples. Practical Applications. Instructions Used

A PIC16F628 controlled FLL (Frequency Locked Loop) VFO for HF

Transcription:

21. PID controller The PID (Proportional Integral Differential) controller is a basic building block in regulation. It can be implemented in many different ways, this example will show you how to code it in a microcontroller and give a simple demonstration of its abilities. Consider a well stirred pot of water (system), which we need to keep at the desired temperature (reference value, R) above the temperature of the surroundings. What we do is we insert a thermometer (sensor) into the water and read its temperature (actual value, ). If the water is too cold, then we turn-on the heater (actuator) placed under the pot. Once the temperature reading on the thermometer reaches the desired value, we turn off the heater. The temperature of the water still rises for some time (overshoot), and then starts to decrease. When temperature of the water drops below the desired value, we turn-on the heater again. It takes some time before the heater heats-up (this causes the undershoot) and starts to deliver the heat into the water, but eventually the temperature of the water reaches the desired value again, and the process repeats. What we have is a regulation system, where we act as a controller; we observe the actual value, compare it with the reference value, and influence the system based on the result of the comparison, Fig. 1. R SYSTEM ACTUATOR Figure 1: A crude example for a regulation The temperature of the water in the above example never remains at the desired value, but instead wobbles around it. The wobbling depends on the properties F of the system, and properties of the sensor and actuator. In order to improve the behavior of the temperature and reduce the wobbling we can improve the regulation process by introducing more complex decisions in the controller. For instance: we could stop the heating some time before the temperature reaches the desired value if we know the amount of overshoots. We could reduce the overshoot also by reducing the amount of heat delivered into the water when the actual temperature becomes close to the desired. There are other possibilities, but they can all be put to life by introduction of a control unit which performs so-called PID regulation. 1

Playing with STM32F407 test board PID controller In terms of regulation theory the above crude example can be described by a second order differential equation, and the regulated system is called a second order. These are best tamed by a PID controller. ACTUATOR SYSTEM SENSOR PID controller Reg n Prop Dif K p K d 1 d dt Error DIFFERENCE Ref Int K i x dt Figure 2: A system controlled by a PID controller A PID controller consists first of a unit to calculate the difference between the desired value and the actual value. The calculated error signal is fed to three units to calculate the multiple of the error (proportional part, Prop), the rate of changing of the error (differential part, Dif), and the up-to-now sum of the error (integral part, Int). All three components are weighted by corresponding factors (Kp, Kd, Ki) and summed to get the final value (Reg) used by the actuator to influence the system. When such PID controller is implemented in microcontroller the above action must be performed periodically, the period being short enough compared to the response time of the regulated system. This again calls for periodic sampling, calculation and generation of values. The same programming skeleton as used in FIR and IIR filtering can be re-used. The initialization of the microcontroller is the same, all calculation of the controller functions should be performed within the interrupt function. The listing of the program is given in Fig. 3. The program starts with the declaration (and initialization where appropriate) of variables. Two integer circular buffers are used for the desired and actual value, and additional two floating point circular buffers for the error and past output values. Three variables for components and three for corresponding weights are declared as floating point numbers and initialized next. Finally, a variable needed to calculate the rate of change is declared and initialized. Within the main function the ADC and DAC are initialized, the timer is programmed to issue one start of conversion at the ADCs every 100us giving the sampling rate of 10 khz, and the interrupt controller NVIC is enabled for interrupt requests from the ADC. Following this the microcontroller continues with the execution of the endless loop. Since we are implementing a PID regulator it seems normal to allow the user to change the weight for proportional, differential and integral component during the execution of the program. The status of buttons is periodically checked, the period being defined by the time-wasting loop at the beginning of the endless loop. Next three lines of the program are used to change the value of the weight for the proportional component. If pushbutton S370 (connected to port E, bit 0, 0x01) is pressed in combination with the pushbutton S375 2

Playing with STM32F407 test board PID controller (connected to port E, bit 5, 0x20), then the weight is increased by one. If pushbutton S370 is pressed in combination with the pushbutton S374 (port E, bit 4, 0x10) then the weight is decreased by one. The third line bounds the value of the proportional weight to values between (and including) 0 and 1000. Next three lines do the same with the weight for differential component, and the next three lines for the integral component. Finally all three weights are written to the LCD screen. #include "stm32f4xx.h" #include "LCD2x16.c" int Ref[64], x[64], Ptr; // declare circular buffers int Error[64], Reg[64]; // declare error and past output vectors float Prop, Dif, Int = 0; // declare (& init) vars float Kp =, Ki = 0.0, Kd = 0.0; // declare & init params float Ts = 0.0001; // defined by constant 8400 in TIM2->arr; 10kHz int main () { GPIO_setup(); DAC_setup(); ADC_setup(); Timer2_setup(); NVIC_EnableIRQ(ADC_IRQn); // GPIO set-up // DAC set-up // ADC set-up // Timer 2 set-up // Enable IRQ for ADC in NVIC LCD_init(); LCD_string("Kp:", 0x00); LCD_string("Kd:", 0x09); LCD_string("Ki:", 0x49); // set gains & waste time - indefinite loop while (1) { for (int i = 0; i < 2000000; i++) {}; // waste time if ((GPIOE->IDR & 0x003f) == (0x01 + 0x20)) Kp++; // manually set Kp if ((GPIOE->IDR & 0x003f) == (0x01 + 0x10)) Kp--; if (Kp<0) Kp = 0; if (Kp > 1000) Kp = 1000; if ((GPIOE->IDR & 0x003f) == (0x02 + 0x20)) Kd += 0.001; // manually set Kd if ((GPIOE->IDR & 0x003f) == (0x02 + 0x10)) Kd -= 0.001; if (Kd < 0) Kd = 0; if (Kd > 1) Kd = 1; if ((GPIOE->IDR & 0x003f) == (0x04 + 0x20)) Ki += 0.0001; // manually set Ki if ((GPIOE->IDR & 0x003f) == (0x04 + 0x10)) Ki -= 0.0001; if (Ki < 0) Ki = 0; if (Ki > 1) Ki = 1; LCD_sInt3DG((int)Kp,0x03,1); // write Kp LCD_sInt3DG((int)(Kd*1000),0x0c,1); // write Kd LCD_sInt3DG((int)(Ki*10000),0x4c,1); // write Ki }; } // IRQ function void ADC_IRQHandler(void) // this takes approx 6us of CPU time! { GPIOE->ODR = 0x0100; // PE08 up Ref[Ptr] = ADC1->DR; // pass ADC -> circular buffer x1 x[ptr] = ADC2->DR; // pass ADC -> circular buffer x2 // PID calculation start Error[Ptr] = Ref[Ptr] - x[ptr]; // calculate error Prop = Kp * (float)error[ptr]; // proportional part Dif = Kd * (float)(error[ptr] - Error[(Ptr-1) & 63]) / Ts; // diff. part Int += Ki * (float)error[ptr]; // integral part Reg[Ptr] = (int)(prop + Dif + Int); // summ all three // PID calculation stop if (Reg[Ptr] > 4095) DAC->DHR12R1 = 4095; // limit output due to DAC else if (Reg[Ptr] < 0) DAC->DHR12R1 = 0; else DAC->DHR12R1 = (int)reg[ptr]; // regulator output -> DAC DAC->DHR12R2 = Error[Ptr] + 2048; // Error -> DAC Ptr = (Ptr + 1) & 63; // increment pointer to circular buffer GPIOE->ODR &= ~0x0100; // PE08 down } Figure 3:The listing of a program to implement PID controller 3

K300 ADC0 ADC1 ADC2 ADC3 DAC1 DAC2 Playing with STM32F407 test board PID controller The complete calculation of the control is performed within the interrupt function. The results of conversion from two ADCs (desired and actual value) are first stored in circular buffers. The difference between these two values is calculated next, and immediately saved into the third circular buffer as Error. Next three lines calculate the three components and weight them; the fourth line adds components together and saves the sum into the fourth circular buffer as Reg. This value should be the output of the regulator andi therefore sent to the DAC. However, the DAC can accept values between 0 and 4095, while other numbers are folded into this range; for instance the number 4097 is DAC-ed the same as number 1, and this would cause significant error in regulation. The numbers are therefore best limited to the acceptable values, and this is done in the next three lines of code. The second DAC is used to generate the analog version of the error signal, and the value is shifted for one half of the DAC range by adding 2048 to the error value. Finally, the pointer in circular buffers gets updated. The calculation of the control is put between two statements to change values of bit 0, port E, and the signal generated at this bit can be used to determine the execution time of the interrupt function, which in this case is about 6 s. The program can be tested by adding a simple second order system between the DAC output (Reg, DAC1) and ADC input (actual value, ADC2- Reg 12k >DR, ADC3 input). The other ADC (ADC1->DR, 120k 12k Intf ADC2 input) is used to read the desired value. Two serially connected RC circuits can be used as 470nF 470nF a substitute for the second order system; this Figure 4: The connection for experiment simplifies the demonstration. Additionally, the desired value Ref can be generated using a function generator, as can the interference signal Intf. The complete connection of the demo circuit is given in Fig. 4. Figures 5 to 8 give the actual values (, red) for the circuit in Fig. 4 for different values of K p, K d, and K i. The interference signal Intf is kept at zero, and the desired value (Ref, blue) is a squarewave with the frequency of 10Hz. The offset of the Ref signal is set close to the middle of the ADC scale. The horizontal scale is in seconds, while the vertical scale is in volts. Ref Err 0.8 0.6 0.4 Figure 5: Kp = 1, Kd = 0, Ki = 0; Proportinal gain is too low and the actual value (red) does not reach the desired value (blue) Figure 6: Kp = 50, Kd = 0, Ki = 0; Proportional gain is high, the actual value (red) is closer to the desired value (blue), but oscillations become visible 4

Playing with STM32F407 test board PID controller Figure 7: Kp = 50, Kd =4 0, Ki = 0; Differential gain smoothes out the oscillations, but the actual value (red) is still not the same as the desired value (blue) Figure 8: Kp = 50, Kd = 40, Ki = 40; The integral gain pushes the average of the actual value up to become the same as the average of the desired value The next set of diagrams on Figures 9 to 13 give responses (red) of the regulated system to the interference signal (blue) while the reference signal (not shown) is kept at a constant value of 1V. It is expected that the response is also a constant if the regulator does its job properly. 0.8 0.6 0.4 Figure 9: Kp = 1, Kd = 0, Ki = 0; Proportional gain is too low and the influence of the interfering signal is significant Figure 10: Kp = 50, Kd = 0, Ki = 0; Proportional gain is high, the actual value (red) is closer to 1V, but oscillations caused by the interfiring signal are visible Figure 11: Kp = 50, Kd =4 0, Ki = 0; Differential gain smoothes out the oscillations, but the actual value (red) is still not the same as the desired value (1V) Figure 8: Kp = 50, Kd = 40, Ki = 40; The integral gain pushes the average of the actual value up to become the same as the average of the desired value (1V) 5