EMBEDDED DIGITAL CONTROL WITH MICROCONTROLLERS
Explore a concise and practical introduction to implementation methods and the theory of digital control systems on microcontrollers
Embedded Digital Control with Microcontrollers delivers expert instruction in digital control system implementation techniques on the widely used ARM Cortex-M microcontroller. The accomplished authors present the included information in three phases. First, they describe how to implement prototype digital control systems via the Python programming language in order to help the reader better understand theoretical digital control concepts.
Second, the book offers readers direction on using the C programming language to implement digital control systems on actual microcontrollers. This will allow readers to solve real-life problems involving digital control, robotics, and mechatronics.
Finally, readers will learn how to merge the theoretical and practical issues discussed in the book by implementing digital control systems in real-life applications. Throughout the book, the application of digital control systems using the Python programming language ensures the reader can apply the theory contained within. Readers will also benefit from the inclusion of:
- A thorough introduction to the hardware used in the book, including STM32 Nucleo Development Boards and motor drive expansion boards
- An exploration of the software used in the book, including Python, MicroPython, and Mbed
- Practical discussions of digital control basics, including discrete-time signals, discrete-time systems, linear and time-invariant systems, and constant coefficient difference equations
- An examination of how to represent a continuous-time system in digital form, including analog-to-digital conversion and digital-to-analog conversion
Perfect for undergraduate students in electrical engineering, Embedded Digital Control with Microcontrollers will also earn a place in the libraries of professional engineers and hobbyists working on digital control and robotics systems seeking a one-stop reference for digital control systems on microcontrollers.
Table of Contents
Preface xvii
About the Companion Website xix
1 Introduction 1
1.1 What is a System? 1
1.2 What is a Control System? 1
1.3 About the Book 3
2 Hardware to be Used in the Book 5
2.1 The STM32 Board 5
2.1.1 General Information 6
2.1.2 Pin Layout 6
2.1.3 Powering and Programming the Board 8
2.2 The STM32 Microcontroller 8
2.2.1 Central Processing Unit 8
2.2.2 Memory 9
2.2.3 Input and Output Ports 10
2.2.4 Timer Modules 10
2.2.5 ADC and DAC Modules 11
2.2.6 Digital Communication Modules 11
2.3 System and Sensors to be Used Throughout the Book 12
2.3.1 The DC Motor 12
2.3.1.1 Properties of the DC Motor 12
2.3.1.2 Pin Layout 13
2.3.1.3 Power Settings 14
2.3.2 The DC Motor Drive Expansion Board 14
2.3.3 Encoder 15
2.3.4 The FT232 Module 17
2.4 Systems and Sensors to be Used in Advanced Applications 17
2.4.1 Systems 17
2.4.2 Sensors 19
2.5 Summary 19
Problems 20
3 Software to be Used in the Book 23
3.1 Python on PC 24
3.1.1 Basic Operations 24
3.1.2 Array and Matrix Operations 25
3.1.3 Loop Operations 26
3.1.4 Conditional Statements 27
3.1.5 Function Definition and Usage 27
3.1.6 File Operations 28
3.1.7 Python Control Systems Library 28
3.2 MicroPython on the STM32 Microcontroller 29
3.2.1 Setting up MicroPython 29
3.2.2 Running MicroPython 31
3.2.3 Reaching Microcontroller Hardware 34
3.2.3.1 Input and Output Ports 34
3.2.3.2 Timers 35
3.2.3.3 ADC 37
3.2.3.4 DAC 39
3.2.3.5 UART 41
3.2.4 MicroPython Control Systems Library 42
3.3 C on the STM32 Microcontroller 43
3.3.1 Creating a New Project in Mbed Studio 44
3.3.2 Building and Executing the Code 45
3.3.3 Reaching Microcontroller Hardware 45
3.3.3.1 Input and Output Ports 46
3.3.3.2 Timers 47
3.3.3.3 ADC 48
3.3.3.4 DAC 50
3.3.3.5 UART 51
3.3.4 C Control Systems Library 53
3.4 Application: Running the DC Motor 53
3.4.1 Hardware Setup 54
3.4.2 Procedure 54
3.4.3 C Code for the System 54
3.4.4 Python Code for the System 57
3.4.5 Observing Outputs 59
3.5 Summary 59
Problems 60
4 Fundamentals of Digital Control 63
4.1 Digital Signals 63
4.1.1 Mathematical Definition 64
4.1.2 Representing Digital Signals in Code 64
4.1.2.1 Representation in Python 65
4.1.2.2 Representation in C 65
4.1.3 Standard Digital Signals 65
4.1.3.1 Unit Pulse Signal 66
4.1.3.2 Step Signal 67
4.1.3.3 Ramp Signal 68
4.1.3.4 Parabolic Signal 68
4.1.3.5 Exponential Signal 69
4.1.3.6 Sinusoidal Signal 71
4.1.3.7 Damped Sinusoidal Signal 71
4.1.3.8 Rectangular Signal 72
4.1.3.9 Sum of Sinusoids Signal 73
4.1.3.10 Sweep Signal 75
4.1.3.11 Random Signal 76
4.2 Digital Systems 77
4.2.1 Mathematical Definition 77
4.2.2 Representing Digital Systems in Code 78
4.2.2.1 Representation in Python 78
4.2.2.2 Representation in C 79
4.2.3 Digital System Properties 79
4.2.3.1 Stability 79
4.2.3.2 Linearity 80
4.2.3.3 Time-Invariance 81
4.3 Linear and Time-Invariant Systems 81
4.3.1 Mathematical Definition 81
4.3.2 LTI Systems and Constant-Coefficient Difference Equations 82
4.3.3 Representing LTI Systems in Code 82
4.3.3.1 MicroPython Control Systems Library Usage 83
4.3.3.2 C Control Systems Library Usage 84
4.3.3.3 Python Control Systems Library Usage 85
4.3.4 Connecting LTI Systems 87
4.3.4.1 Series Connection 87
4.3.4.2 Parallel Connection 88
4.3.4.3 Feedback Connection 89
4.4 The z-Transform and Its Inverse 90
4.4.1 Definition of the z-Transform 90
4.4.2 Calculating the z-Transform in Python 92
4.4.3 Definition of the Inverse z-Transform 92
4.4.4 Calculating the Inverse z-Transform in Python 92
4.5 The z-Transform and LTI Systems 93
4.5.1 Associating Difference Equation and Impulse Response of an LTI System 93
4.5.2 Stability Analysis of an LTI System using z-Transform 95
4.5.3 Stability Analysis of an LTI System in Code 95
4.6 Application I: Acquiring Digital Signals from the Microcontroller, Processing Offline Data 96
4.6.1 Hardware Setup 97
4.6.2 Procedure 97
4.6.3 C Code for the System 97
4.6.4 Python Code for the System 99
4.6.5 Observing Outputs 101
4.7 Application II: Acquiring Digital Signals from the Microcontroller, Processing Real-Time Data 103
4.7.1 Hardware Setup 103
4.7.2 Procedure 103
4.7.3 C Code for the System 104
4.7.4 Python Code for the System 106
4.7.5 Observing Outputs 109
4.8 Summary 109
Problems 109
5 Conversion Between Analog and Digital Forms 111
5.1 Converting an Analog Signal to Digital Form 112
5.1.1 Mathematical Derivation of ADC 112
5.1.2 ADC in Code 114
5.2 Converting a Digital Signal to Analog Form 117
5.2.1 Mathematical Derivation of DAC 117
5.2.2 DAC in Code 118
5.3 Representing an Analog System in Digital Form 120
5.3.1 Pole-Zero Matching Method 121
5.3.2 Zero-Order Hold Equivalent 122
5.3.3 Bilinear Transformation 123
5.4 Application: Exciting and Simulating the RC Filter 124
5.4.1 Hardware Setup 125
5.4.2 Procedure 125
5.4.3 C Code for the System 125
5.4.4 Python Code for the System 127
5.4.5 Observing Outputs 129
5.5 Summary 129
Problems 129
6 Constructing Transfer Function of a System 131
6.1 Transfer Function from Mathematical Modeling 131
6.1.1 Fundamental Electrical and Mechanical Components 132
6.1.2 Constructing the Differential Equation Representing the System 133
6.1.3 From Differential Equation to Transfer Function 133
6.2 Transfer Function from System Identification in Time Domain 134
6.2.1 Theoretical Background 135
6.2.2 The Procedure 135
6.2.3 Data Acquisition by the STM32 Microcontroller 136
6.2.4 System Identification in Time Domain by MATLAB 137
6.3 Transfer Function from System Identification in Frequency Domain 142
6.3.1 Theoretical Background 142
6.3.2 The Procedure 142
6.3.3 System Identification in Frequency Domain by MATLAB 143
6.4 Application: Obtaining Transfer Function of the DC Motor 143
6.4.1 Mathematical Modeling 143
6.4.2 System Identification in Time Domain 146
6.4.3 System Identification in Frequency Domain 147
6.5 Summary 148
Problems 148
7 Transfer Function Based Control System Analysis 151
7.1 Analyzing System Performance 151
7.1.1 Time Domain Analysis 151
7.1.1.1 Transient Response 152
7.1.1.2 Steady-State Error 156
7.1.2 Frequency Domain Analysis 156
7.1.3 Complex Plane Analysis 159
7.1.3.1 Root-Locus Plot 160
7.1.3.2 Nyquist Plot 160
7.2 The Effect of Open-Loop Control on System Performance 163
7.2.1 What is Open-Loop Control? 163
7.2.2 Improving the System Performance by Open-Loop Control 164
7.3 The Effect of Closed-Loop Control on System Performance 167
7.3.1 What is Closed-Loop Control? 167
7.3.2 Improving the System Performance by Closed-Loop Control 170
7.4 Application: Adding Open-Loop Digital Controller to the DC Motor 174
7.4.1 Hardware Setup 175
7.4.2 Procedure 175
7.4.3 C Code for the System 175
7.4.4 Python Code for the System 177
7.4.5 Observing Outputs 178
7.5 Summary 178
Problems 180
8 Transfer Function Based Controller Design 183
8.1 PID Controller Structure 183
8.1.1 The P Controller 184
8.1.2 The PI Controller 184
8.1.3 The PID Controller 185
8.1.4 Parameter Tuning Methods 185
8.1.4.1 The Ziegler-Nichols Method 186
8.1.4.2 The Cohen-Coon Method 186
8.1.4.3 The Chien-Hrones-Reswick Method 186
8.2 PID Controller Design in Python 187
8.2.1 Parameter Tuning 188
8.2.2 Controller Design 188
8.2.2.1 P Controller 188
8.2.2.2 PI Controller 191
8.2.2.3 PID Controller 194
8.2.3 Comparison of the Designed P, PI, and PID Controllers 197
8.3 Lag-Lead Controller Structure 199
8.3.1 Lag Controller 199
8.3.2 Lead Controller 200
8.3.3 Lag-Lead Controller 200
8.4 Lag-Lead Controller Design in MATLAB 201
8.4.1 Control System Designer Tool 201
8.4.2 Controller Design in Complex Plane 203
8.4.2.1 Lag Controller 204
8.4.2.2 Lead Controller 206
8.4.2.3 Lag-Lead Controller 207
8.4.2.4 Comparison of the Designed Lag, Lead, and Lag-Lead Controllers 210
8.4.3 Controller Design in Frequency Domain 211
8.4.3.1 Lag Controller 211
8.4.3.2 Lead Controller 213
8.4.3.3 Lag-Lead Controller 213
8.4.3.4 Comparison of the Designed Lag, Lead, and Lag-Lead Controllers 217
8.5 Application: Adding Closed-Loop Digital Controller to the DC Motor 217
8.5.1 Hardware Setup 217
8.5.2 Procedure 217
8.5.3 C Code for the System 218
8.5.4 Python Code for the System 219
8.5.5 Observing Outputs 220
8.6 Summary 223
Problems 224
9 State-space Based Control System Analysis 227
9.1 State-space Approach 227
9.1.1 Definition of the State 227
9.1.2 Why State-space Representation? 228
9.2 State-space Equations Representing an LTI System 228
9.2.1 Continuous-time State-space Equations 229
9.2.2 Discrete-time State-space Equations 231
9.2.3 Representing Discrete-time State-space Equations in Code Form 231
9.3 Conversion Between State-space and Transfer Function Representations 233
9.3.1 From Transfer Function to State-space Equations 233
9.3.2 From State-space Equations to Transfer Function 235
9.4 Properties of the System from its State-space Representation 236
9.4.1 Time Domain Analysis 236
9.4.2 Stability 237
9.4.3 Controllability 238
9.4.4 Observability 239
9.5 Application: Observing States of the DC Motor in Time 240
9.5.1 Hardware Setup 240
9.5.2 Procedure 240
9.5.3 C Code for the System 240
9.5.4 Python Code for the System 242
9.5.5 Observing Outputs 243
9.6 Summary 243
Problems 244
10 State-space Based Controller Design 247
10.1 General Layout 247
10.1.1 Control Based on State Values 248
10.1.2 Regulator Structure 249
10.1.3 Controller Structure 249
10.1.4 What if States Cannot be Measured Directly? 250
10.2 Regulator and Controller Design via Pole Placement 250
10.2.1 Pole Placement 251
10.2.2 Regulator Design 251
10.2.3 Ackermann’s Formula for the Regulator Gain 251
10.2.4 Controller Design 252
10.2.5 Ackermann’s Formula for the Controller Gain 253
10.3 Regulator and Controller Design in Python 253
10.3.1 Regulator Design 253
10.3.2 Controller Design 256
10.4 State Observer Design 260
10.4.1 Mathematical Derivation 261
10.4.2 Ackermann’s Formula for the Observer Gain 262
10.5 Regulator and Controller Design in Python using Observers 263
10.5.1 Observer Design 263
10.5.2 Observer-Based Regulator Design 264
10.5.3 Observer-Based Controller Design 266
10.6 Application: State-space based Control of the DC Motor 270
10.6.1 Hardware Setup 270
10.6.2 Procedure 271
10.6.3 C Code for the System 271
10.6.4 Python Code for the System 273
10.6.5 Observing Outputs 274
10.7 Summary 275
Problems 275
11 Adaptive Control 279
11.1 What is Adaptive Control? 279
11.2 Parameter Estimation 280
11.3 Indirect Self-Tuning Regulator 283
11.3.1 Feedback ISTR Design 283
11.3.2 Feedback and Feedforward ISTR Design 287
11.4 Model-Reference Adaptive Control 288
11.5 Application: Real-Time Parameter Estimation of the DC Motor 290
11.5.1 Hardware Setup 290
11.5.2 Procedure 291
11.5.3 C Code for the System 291
11.5.4 Observing Outputs 293
11.6 Summary 297
Problems 297
12 Advanced Applications 299
12.1 Nonlinear Control 299
12.1.1 Nonlinear System Identification by MATLAB 299
12.1.2 Nonlinear System Input-Output Example 301
12.1.3 Gain Scheduling Example 302
12.1.4 Flat Systems Example 302
12.1.5 Phase Portraits Example 302
12.2 Optimal Control 302
12.2.1 The Linear Quadratic Regulator 303
12.2.2 Continuous-Time LQR Example 304
12.2.3 LQR for the DC Motor 304
12.3 Robust Control 305
12.4 Distributed Control 306
12.4.1 Hardware and Software Setup 306
12.4.2 Procedure 307
12.5 Auto Dimmer 308
12.5.1 Hardware Setup 308
12.5.2 Procedure 309
12.6 Constructing a Servo Motor from DC Motor 309
12.6.1 Hardware Setup 309
12.6.2 Procedure 310
12.7 Visual Servoing 311
12.7.1 Hardware Setup 312
12.7.2 Procedure 312
12.8 Smart Balance Hoverboard 313
12.8.1 Hardware Setup 313
12.8.2 Procedure 314
12.9 Line Following Robot 314
12.9.1 Hardware Setup 314
12.9.2 Procedure 314
12.10 Active Noise Cancellation 315
12.10.1 Hardware Setup 315
12.10.2 Procedure 316
12.11 Sun Tracking Solar Panel 317
12.11.1 Hardware Setup 317
12.11.2 Procedure 317
12.12 System Identification of a Speaker 318
12.12.1 Hardware Setup 319
12.12.2 Procedure 319
12.13 Peltier Based Water Cooler 321
12.13.1 Hardware Setup 321
12.13.2 Procedure 322
12.14 Controlling a Permanent Magnet Synchronous Motor 322
12.14.1 Hardware Setup 322
12.14.2 Procedure 323
Appendix A STM32 Board Pin Usage Tables 329
Bibliography 335
Index 339