i MICRO-CONTROLLER BASED SPACE VECTOR MODULATION (SVM) SIGNAL GENERATOR KELVIN LYE KWONG LOONG SUPERVISOR ASSOC. PROF. DR. NIK RUMZI BIN NIK IDRIS This Thesis is submitted to fulfil Part of the requirements for the Degree of Bachelor of Electrical Engineering FACULTY OF ELECTRICAL ENGINEERING UNIVERSITI TEKNOLOGI MALAYSIA MAY 2008 iii To my beloved family and friends iv ACKNOWLEDGEMENTS Throughout the entire process of development and implementation of the project, I was very fortunate to have a number of wonderful and experience people who have been giving me assistance and direction towards completing this project. First and foremost, I would like to express my utmost and deepest gratitude to my project supervisor, PM Dr. Nik Rumzi bin Nik Idris for his advice, aid and guidance when needed throughout the whole academic year in order to realize the development and implementation of this project. PM Dr. Nik Rumzi has been kind enough to let me explore and design my project without hindering creativity and freedom from me. At the same time, there are also two important people whom I want to express my utmost gratitude, namely Mr. Lee Kong Pheng and Mr. Foo Kon Sian. Mr. Lee, who is my former boss during my industrial attachment period at his company, has provided me all the necessary equipments, facilities and programming tools to proceed with my project. Mr. Foo, who is my coursemate as well, has also offered me a helping hand on the software development side of the project to make the project workable. Last but not least, I am also thankful to my family and friends who have been giving their full support to me all these while. Their encouragement, support, care and comfort have been equally vital to me towards the completion of this project. v ABSTRACT The rapid development of high switching frequency power electronics devices has been significant in the past decade which leads towards wider application of voltage source inverters (VSI) in AC power generation. The use of VSI involves modulation techniques that control the switches of VSI such as Sinusoidal Pulse Width Modulation (SPWM), Third Harmonic Sinusoidal PWM and Space Vector Modulation (SVM). The main aims of modulation techniques are to achieve lesser harmonics and to provide a wider linear modulation range for the inverter generated output voltage. Digital implementation using micro-controllers and microprocessors have also been evident of late as both are being widely used in various sectors including in power electronics devices. In this project, Space Vector Modulation (SVM) will be utilized as another alternative modulation technique which was known to be better than SPWM techniques in certain areas. PIC micro-controller would be used to realize the application of SVM on 3-phase VSI, whereby two main inputs from the combination of all three phases of voltages were taken into consideration which were the reference voltage vector, VREF and its phase, θ. The output of this project would represent the switching pattern of the switches on 3phase VSI. vi ABSTRAK Pembangunan dan kemajuan yang pantas dalam peranti elektronik kuasa berfrekuensi pensuisan tinggi menjadi semakin ketara dalam dekad lepas dan telah membawa kepada aplikasi penyongsang sumber voltan (VSI) yang lebih meluas dalam penjanaan kuasa arus ulang-alik. Penggunaan VSI melibatkan teknik pemodulatan yang mengawal suis-suis VSI seperti Pemodulatan Lebar Denyut Sinusoidal (SPWM), Pemodulatan Lebar Sinusoidal Harmonik Ketiga dan Pemodulatan Vektor Ruang (SVM). Tujuan utama untuk teknik pemodulatan adalah untuk mencapai kurang harmonik dan untuk menyediakan julat pemodulatan linear yang lebih besar untuk voltan keluaran janaan bagi penyongsang. Implementasi digital dengan menggunakan mikro-pengawal dan mikro-pemproses juga adalah ketara buat masa kini disebabkan kedua-duanya digunakan secara meluas dalam sektor-sektor berlainan termasuk dalam perantiperanti elektronik kuasa. Dalam projek ini, Pemodulatan Vektor Ruang (SVM) akan digunakan sebagai satu alternatif kepada teknik pemodulatan yang dikatakan lebih baik daripada teknik-teknik PWM dalam bidang-bidang tertentu. Mikropengawal PIC akan digunakan untuk merealisasikan aplikasi SVM pada VSI 3 fasa, di mana dua masukan utama daripada gabungan voltan fasa bagi ketiga-tiga fasa akan diambil kira, yakni vektor voltage rujukan, VREF dan fasanya, θ. Keluaran daripada projek ini akan menunjukkan corak pensuisan untuk suis-suis pada VSI 3-fasa. vii TABLE OF CONTENTS TTTLE CHAPTER 1 PAGE TITLE PAGE i DECLARATION ii DEDICATION iii ACKNOWLEDGEMENTS iv ABSTRACT v ABSTRAK vi TABLE OF CONTENTS vii LIST OF TABLES x LIST OF FIGURES xi LIST OF ABBREVIATIONS xiii LIST OF APPENDIX xiv INTRODUCTION 1.1 Project Background 1 1.2 Problem Statement 2 1.3 Objectives of Project 3 1.4 Scope of Project 4 1.5 Methodology 5 1.5.1 Literature Review on SVM and PIC 5 Micro-controller 1.5.2 Hardware and Software Development 6 1.5.3 Troubleshooting and Verification 6 Process 1.6 Thesis Outline 7 viii 2 LITERATURE REVIEW 2.1 Introduction to Space Vector Modulation 8 (SVM) 3 2.2 Principles of SVM 10 2.3 Algorithms of SVM 14 2.4 Operation of SVM 17 2.5 Generation of SVM 18 METHODOLOGY 3.1 3.2 Hardware Development and Implementation 20 3.1.1 Introduction to PIC micro-controllers 20 3.1.2 Introduction to PIC16F876A 21 3.1.3 Schematic of Hardware Design 22 3.1.4 Description of Hardware Design 23 Software Development and Implementation 25 3.2.1 PIC Equivalent Programming Languages 25 3.2.2 PIC Equivalent Compilers and Related 26 Tools 3.2.3 MPLAB IDE and C Language 27 3.2.4 Software Design 30 3.2.4.1 Variables and Arrays 32 3.2.4.2 Library functions 34 3.2.4.3 Initialization 37 3.2.4.4 Input Counter 38 3.2.4.5 Sector Identification 40 3.2.4.6 Calculation of time variables 42 3.2.4.7 Rounding up job 44 3.2.4.8 Output function 46 ix 4 RESULTS AND DISCUSSION 4.1 Implementation of Project 51 4.2 Results of Project 53 4.2.1 Results for High Frequency 53 4.2.2 Results for Low Frequency 53 Discussion and Explanation 59 4.3 5 CONCLUSION AND SUGGESTIONS FOR FURTHER RESEARCH 5.1 Summary 61 5.2 Conclusion and Suggestions 62 REFERENCES 63 – 64 Appendix A 65 – 69 Appendix B 70 – 73 Appendix C 74 – 86 x LIST OF TABLES TABLE NO. 1.1 TTTLE Simple comparison between Sinusoidal PWM and PAGE 3 SVM 1.2 Some specifications of SVM signal generator 4 2.1 Comparison between SPWM and SVM 9 2.2 3 phase VSI switching states (upper switches) and 13 respective line to neutral voltages 3.1 Some features of PIC16F876A 22 3.2 List of variables used in the program of project 32 3.3 List of array and binary code for each sector 33 3.4 Description of modf() function 37 3.5 Description of sin() function 37 3.6 Description of output_b() function 38 3.7 Description of delay_us() function 38 3.8 Time variables involved for each switching state for 48 every sector 4.1 Initial Parameters for Calculation and Implementation 52 Purposes (High Frequency) 4.2 Initial Parameters for Calculation and Implementation Purposes (Low Frequency) 52 xi LIST OF FIGURES FIGURE NO. 2.1 TTTLE Comparison of locus in terms of DC voltage PAGE 9 utilization between SVM and SPWM 2.2 3 Phase voltage source inverter (VSI) 10 2.3 8 switching topologies of a 3 phase VSI 11 2.4 Representation of 8 switching topologies in 12 hexagon form (or space vector hexagon) and interpretation of reference voltage into d-q plane 2.5 Graphs of 3 modulating voltages where reference 12 voltage is shifted from one sector to another 2.6 Algorithms of output signals based on sector 1 14 2.7 Output signal based on symmetrical sequence 15 algorithm in sector 1 2.8 Output patterns each sector based on symmetrical 16 sequence 2.9 Synthesizing reference voltage sector in sector 1 17 3.1 PIC16F876A 21 3.2 Schematic diagram drawn and captured using 23 Multisim 8 3.3 Schematic diagram of project circuit using Multisim 24 3.4 Hardware implementation of SVM signal generator 25 using PIC micro-controller on breadboard 3.5 Microchip MPLAB IDE and PIC micro-controller 26 programmer developed by Cytron Technologies 3.6 CCS C Compiler for PIC micro-controllers 27 xii FIGURE NO. TTTLE PAGE 3.7 CCS C (PCM) Compiler compiles the project file 28 original.c 3.8 Project file original.c has been successfully compiled 28 and built 3.9 CCS C Compiler Help File Menu 29 3.10 Flow chart of program for SVM signal generator 30 3.11 Output pattern for sector 1 33 3.12 Header files included in the C language program of 37 project 3.13 Command for I/O port initialization of the PIC micro- 38 controller 3.14 Input Counter Output 39 3.15 Flow chart of the sector identification section of the 41 program 3.16 Command for sector identification function, idsec() 42 3.17 Command of the time calculation function, tcal() 43 3.18 Sequence of time variables inserted into timema array 44 3.19 Flow chart of rounding up function 45 3.20 Command for roundup() function 45 3.21 Command for rdjob() function 46 3.22 Time columns for output pattern 47 3.23 Flow chart for the output display function 49 3.24 Command for the process of output display 50 4.1 Results obtained at high frequency of 10 kHz 54 4.2 Results taken at low frequency of 50 Hz 55 4.3 Line-to-line signal obtained on the oscilloscope 56 4.4 Subtracting pulse of one phase with another 57 4.5 Waveforms and frequency response for one phase 58 4.6 Frequency Response of one phase 58 xiii LIST OF ABBREVIATIONS 3Ф - Three Phase VREF - Reference Voltage Vectors PIC - Programmable Interface Controller VSI - Voltage Source Inverter Hz - Hertz V - Voltage AC - Actuating Current DC - Direct Current OSC - Oscillator PWM - Pulse Width Modulation SPWM - Sinusoidal Pulse Width Modulation I/O - Inputs/Outputs THD - Total Harmonic Distortion IGBT - Insulated-gate bipolar transistor MOSFET - Metal Oxide Semiconductor Field Effect Transistor FPGA - Field Programmable Gate Array 2D - 2 Dimensional HS - High Speed BASIC - Beginner's All-purpose Symbolic Instruction Code CCS - Custom Computer Services xiv LIST OF APPENDIX APPENDIX TTTLE PAGE A Source code of program of this project 63 B Calculation of time variables using Microsoft 68 Excel C Part of Data Sheet of PIC16F87 72 1 CHAPTER 1 INTRODUCTION This chapter will discuss the background of the project, project statement, objectives and scope of project, and outline of thesis. 1.1 Project Background In general, inverters are known to be a type of electronic circuit which converts DC power to AC power. Inverters are normally used in applications regarding AC power generation, such as DC power source utilization, uninterruptible power supplies (UPS), variable-frequency drives and so fourth. In the same context, three phase inverters are also used for variable-frequency drive applications and for high power applications such as HVDC power transmissions. At particularly high frequency application, modulation techniques are utilized on inverters to control switches on these inverters. Some of the modulation techniques that are widely used are Pulse Width Modulation (PWM), Sinusoidal PWM, 3rd Harmonic PWM, to name a few. These modulation techniques vary from each other in terms of specifications and performance but all modulation techniques 2 are developed to achieve several common aims including less Total Harmonic Distortion (THD), less switching losses and thus less commutation losses, wider linear modulation range and also achieving the possibility of controlling frequency and magnitude of the output voltage. With rapid development in the power electronics field, a new modulation technique has been developed and it is known as Space Vector Modulation (SVM). This technique has been widely discussed in journals and other literature sources and SVM has been touted as a better modulation technique than other methods particularly PWM in terms of linear modulation range, commutation and switching losses and efficiency. It is also interesting to note that SVM is a digital based modulation technique would fit into the rapid development of digital electronic components and thus SVM would prove be easier to be implemented and would be cheaper to be utilized. 1.2 Problem Statement As mentioned earlier, there are many PWM techniques such as Sinusoidal PWM, Hysterisis PWM, 3rd Harmonic PWM etc. that are widely used at the moment. Table 1.1 shows the comparison between Sinusoidal PWM and SVM. Sinusoidal PWM technique treats each modulating voltages as separate identity and each modulating voltages are compared to the carrier signal. However, using the SVM technique, all modulating voltages are combined (using vector summation) into one reference voltage or a single unit which make things easier in terms of interpretation and implementation, especially in digital systems. Moreover, SVM would enable lesser commutation and switching losses, wider linear modulation range and higher frequency. 3 The most notable advantage of SVM is that this technique can be digitally implemented into the ever-growing microprocessor and/or micro-controller. In power electronics, there have been problems regarding the design of complex circuitry for base/gate drive circuits for switching components (e.g. IGBT, MOSFET) which might lead to the increase of production cost due to complicated circuits and constant modification of circuits. With the use of microprocessor or micro-controller such as PIC and FPGA, such problems can be reduced as well as ease the process of designing relevant modulation method using SVM. Table 1.1: Simple comparison between Sinusoidal PWM and SVM in Sinusoidal PWM • Considers each modulating voltages SVM • as separate identity All 3 modulating signals are simultaneously taken into account within 2D reference frame (Vd – Vq axes) • Compares high frequency triangular carrier with 3 sinusoidal reference • Complex reference vector is processed as a single unit signals (modulating signals) 1.3 Objectives of Project There are two main objectives in this project and they are: (a) to understand the concept of Space Vector Modulation (SVM) and the application of PIC micro-controller (b) to implement Space Vector Modulation (SVM) based on three phase voltage source inverter (VSI) using PIC micro-controller 4 Implementation of SVM using PIC micro-controller would involve interpretation of inputs which includes magnitude and phase of the reference voltage, VREF (vector summation of all three modulating voltages), the process of calculation of relevant parameters based on theoretical formulas and lastly the generation and display of respective output waveform pattern or output signal based on the inputs. 1.4 Scope of Project This project would involve the main theory of Space Vector Modulation (SVM) solely, that is to generate the respective output signal based on the inputs and the intervals which the inputs occupy. Other related aspects in the scope of SVM such as overmodulation and harmonics would be excluded from the scope of this project. This is mainly due to time constraint as more time would be needed to consider overmodulation and to suppress or reduce harmonics that are produced using the SVM technique. Besides, this project would involve high switching frequency application and thus a sampling frequency of approximately 10 to 20 kHz would be used for approximation. Note that the waveforms of the SVM would be in symmetrical form. Table 1.2 shows the specifications of the SVM generator produced in this thesis. Table 1.2: Some Specifications of SVM Signal Generator Properties Characteristics Type of waveform Symmetrical Sequence Sampling Frequency 10 to 20kHz Modulation index Set as 1 throughout the whole project Input Set in the program internally 5 1.5 Methodology The methodology of this project is divided into 4 main sections, namely literature review on SVM and PIC micro-controller, development of project including hardware and software development, troubleshooting and verification process and lastly the implementation results using the SVM signal generator produced which employs PIC micro-controller. 1.5.1 Literature Review on SVM and PIC Micro-controller To begin with the project, information and knowledge on SVM are crucial and needed so as to understand thoroughly the myth of the fundamentals of the SVM concept. Such information were searched and looked through from different sources such as important reference books, internet websites and journals (which are listed in the Appendix of this thesis). The purpose is to ensure that no confusion of the main concept occurs during the implementation of the project so as to reduce any additional problems due to lack of understanding of the concept. Besides, since micro-controller would be used, it would also be important to acquire knowledge and information on the potential micro-controller (PIC) to be used, such as the characteristics and instruction code of the micro-controller, the troubleshooting equipments and related process, and so forth. All these are done by understanding the data sheet of the micro-controller, attending workshops and additional classes to gain hands-on experience on PIC micro-controllers as well as to understand the advanced uses of the micro-controller that can be utilized for this project. 6 1.5.2 Hardware and Software Development The project development involves 2 parts: the hardware part and the software part. As for the hardware part, PIC micro-controller would be used as the “brain” of the main circuit. The type of PIC micro-controller is PIC16F786A, which is from the family of PIC16 and has 8 bit I/O. Further information on the hardware development can be obtained in Chapter 3. Once the hardware part is set up, the software part then can proceed. In this project, the software development involves the application of C language using PIC micro-controller related software known as MPLAB. 1.5.3 Troubleshooting and Verification Process Usually it is anticipated that most of the problem and difficulties of the project would occur in the software development part and thus, troubleshooting and verification process has to be conducted throughout the whole project so as to ensure a smooth journey for this project development. The troubleshooting part can be done using debugger developed by PIC itself or using other techniques such as inspection and testing of the PIC program employing self-written programs. 7 1.6 Thesis Outline This thesis comprises of 5 chapters. Brief description of each chapter is listed below: (a) Chapter 1 discusses about the introduction of the project, including the project background, problem statement, objectives and scope of the project and a short description of the project methodology. (b) Chapter 2 would provide an in-depth look into the concept of Space Vector Modulation, its related waveforms and mathematical equations and formulas. (c) Chapter 3 would then describe the methodology of the project, including the tools and equipments (PIC micro-controller, related programmer and software etc.), and procedure and processes (the main circuit, the flow of project, program related descriptions and functions etc.) involved for the hardware and software development of the entire project. (d) Chapter 4 would discuss about the results obtained from the micro-controlled based SVM signal generator produced for this project. (e) Lastly, chapter 5 would summarize the thesis with conclusions and recommendations to be used for further research on such subject in the future. 8 CHAPTER 2 LITERATURE REVIEW This chapter will present the literature review on Space Vector Modulation (SVM) and PIC micro-controller that would be used in this project. 2.1 Introduction to Space Vector Modulation In the past few decades, Sinusoidal PWM (SPWM) has been widely used as a popular means for AC motor control. SPWM uses the method of comparing high frequency triangular carrier signal with 3 sinusoidal reference signals, whereby SPWM considers each modulating signals as separate identity. However, there are obvious drawbacks or weaknesses of SPWM technique which directly affect the efficiency of the overall system. In order to overcome these drawbacks, a newer and more advanced technique is introduced known as Space Vector Modulation (SVM) which is also aimed to increase the system efficiency. Basically, SVM uses the method of taking all 3 modulating signals into account simultaneously within a 2D reference frame (in d-q axis or complex 9 form).[8] In other words, SVM is more sophisticated and it offers more voltage output (approximately 15% more, referring to Figure 2.0) if compared to SPWM, and thus DC voltage utilization is increased by using SVM.[9] In terms of THD and losses such as switching and commutation losses, SVM has an advantage over SPWM as SVM minimizes both aspects which tend to haunt the SPWM technique. Advantages and strength of SVM over SPWM are paving the way towards wider usage of SVM in AC motor control and AC power generation. Table 2.1 compares both SVM and SPWM techniques in a simple manner. Table 2.1: Comparison between SPWM and SVM Sinusoidal Pulse Width Modulation Space Vector Modulation Comparing high frequency triangular Taking all 3 modulating signals into carrier signal with 3 sinusoidal account simultaneously within a 2D reference signals (treated as separate reference frame (in d-q axis or complex identity) form) Unable to fully utilize available DC Increase utilization of DC supply supply voltage voltage, 15% more than SPWM More Total Harmonic Distortion Less Total Harmonic Distortion Does not facilitate more advanced Enable more advanced vector control vector control implementation implementation Figure 2.1: Comparison of locus in terms of DC voltage utilization between SVM and SPWM 10 2.2 Principles of SVM Upper switches a Vdc b N c Bottom switches S1 S2 S3 Note: 1) S1, S2, S3 are upper switches 2) Upper and bottom switches are complementary Figure 2.2: 3 Phase Voltage Source Inverter (VSI) Space Vector Modulation (SVM) refers to a special switching sequence which is based on the upper switches of a 3 phase voltage source inverter (VSI). Theoretically, SVM treats a sinusoidal voltage as a phasor or amplitude vector which rotates at a constant angular frequency, ω. This amplitude vector is represented in d-q plane where it denotes the real and imaginary axes. As SVM treats all 3 modulating signals or voltages as one single unit, the vector summation of 3 modulating signals or voltages are known as the reference voltage, VREF which is related to the magnitude of output voltage of the eight switching topologies of a 3 phase VSI. Bear in mind that the aim of SVM is to approximate the reference voltage vector, VREF using the eight switching topologies which are shown in Figure 2.3. In figure 2.3, the 8 switching topologies can also be represented in the form of space vector hexagon, where it is divided into 6 sectors and each sector is separated with a phase shift of 60°. Reference voltage vector, VREF derived from the vector summation of all 3 modulating voltages (refer to equation 2.2), is rotated in 11 anti-clockwise direction from one sector to another at a constant angular speed, ωt for steady state operating condition. Another important note is that the time taken by reference voltage vector to complete one revolution is equal to the fundamental period of the output voltage. Figure 2.3: 8 switching topologies of a 3 phase VSI Note that reference voltage vector, VREF is the vector summation of all 3 modulating voltages and can be represented in the following equation: [ ] (2.1) [ ] (2.2) V REF = 2 Va + aVb + a 2Vc 3 VREF = 2 S a + aS b + a 2 S c 3 12 where a = e j 2π 3 Va = Vm sin(ωt ) Vb = Vm sin(ωt − 120°) Vc = Vm sin(ωt + 120°) S a , S b , S c are switching states representing each phase Figure 2.4: Representation of 8 switching topologies in hexagon form (or Space Vector Hexagon) and interpretation of reference voltage into d-q plane VREF Figure 2.5: Graphs of 3 modulating voltages where reference voltage is shifted from one sector to another 13 Table 2.2: 3 phase VSI switching states (upper switches) and Respective Line to Neutral Voltages [9] Switching State Sector VaN VbN VcN 0 0 0 0 0 (Origin) 1 2 V DC 3 1 − V DC 3 1 − V DC 3 1 2 1 VDC 3 1 VDC 3 2 − VDC 3 2 3 1 − V DC 3 2 V DC 3 1 − V DC 3 3 4 2 − V DC 3 1 V DC 3 1 V DC 3 4 5 1 − VDC 3 1 − VDC 3 2 VDC 3 5 6 1 V DC 3 2 − V DC 3 1 V DC 3 6 7 0 0 0 7 (origin) (S1S2S3) number 14 2.3 Algorithms of SVM Symmetrical Sequence Alternating Sequence Left Aligned Sequence Bus Clamped Sequence Figure 2.6: Algorithms of output signals based on sector 1 Since the development of SVM technique, there have been various suggestions on the algorithms of the output signal or the waveform for the switches of 3 phase VSI. There are several aspects that need to be considered especially ease of implementation and performance of the signal (i.e. THD and switching losses). Therefore, different types of algorithms contribute different level of performance and each algorithm or scheme is suitable for different operating condition. 15 According to Rakesh Parekh’s note on Space Vector Modulation for Microchip Technology, there are several switching rules that have to be followed and they are: (a) trajectory of reference voltage vector, VREF should be circular in shape, (b) only one switching per state transition, (c) not more than three switchings in a sampling period, Ts, and (d) the final state within a sampling period must be the initial state within the next sampling period. These rules aid in limiting the number of switching actions that would lead towards reduction in switching losses. Besides, symmetry property could be maintained in waveforms at 3 phase VSI to achieve lower THD. In this section, we discuss briefly about the “Symmetrical Sequence” algorithm which would be used in this project. Coincidentally, this algorithm has the lowest THD among the four types of algorithms shown in Figure 2.6. As you can see in Figure 2.7 below, there are 6 commutations in one sampling period, Ts. If compared to the right aligned algorithm, both algorithms have 3 switch turn-ons and 3 switch turn-offs and thus both algorithms are expected to possess approximately the same amount of switching losses. 000 100 110 111 111 110 100 000 000 100 110 111 111 110 100 000 S3 S2 S1 Ts Ts Figure 2.7: Output signal based on Symmetrical Sequence algorithm in sector 1 16 t0 ta tb t0 t0 tb ta t0 t0 ta tb Sector 1 t0 ta tb t0 t0 ta tb t0 t0 Sector 5 t0 tb ta t0 tb ta t0 tb ta t0 Sector 2 tb ta t0 t0 ta tb Sector 3 t0 t0 t0 t0 Sector 4 tb ta t0 t0 ta tb t0 t0 Sector 6 Figure 2.8: Output patterns each sector based on symmetrical sequence 17 2.4 Operation of SVM As shown in Figure 2.2, there are basically 2 zero voltage vectors (represented by switching states 000 and 111) and 6 non-zero voltage vectors (switching states other than 000 and 111). All these zero and non-zero voltage vectors represent the hexagon representation as shown in Figure 2.3 (hexagon representation). Synthesizing the reference voltage vector within the hexagon representation or hexagon limit involves resolving the reference voltage vector into 2 components parallel to the adjacent non-zero voltage vectors. For example, based on Figure 2.8, in sector 1, the reference voltage vector can be resolved into a component parallel to V1 and another parallel to V2. Therefore, the angle, θ and magnitude of the reference voltage vector can be obtained. Figure 2.9: Synthesizing reference voltage vector in sector 1 Bear in mind that the main aim of SVM is to approximate the reference voltage vector using the 8 switching patterns based on upper switches of a 3 phase VSI. Therefore, the approximation method used in SVM is basically based on the 18 generation of average output of VSI in a sampling period, Ts which is to be the same as the average output of the reference voltage vector in the same period. As shown in the previous paragraph, the approximation of reference voltage vector, VREF would be based on the location of the reference voltage vector lies in or in other words based on which sector the reference voltage vector lies in. It is also noteworthy that the adjacent non-zero voltage vectors provide the required phase displacement while the zero voltage vectors control the magnitude of the reference voltage, VREF. 2.5 Generation of SVM To determine the time duration for each switching states in a sector, the following equation which is derived from the volt-seconds integral of the switching states, is used: Ts T0 Ta Tb T7 0 0 0 0 0 ∫ VREF dt = ∫ V0 dt + ∫ Va dt + ∫ Vb dt + ∫ V7 dt (2.3) Where 1. Ts is the switching period or sampling period 2. Ta and Tb are the dwelling time for non-zero voltage vectors 3. T0 and T7 are the dwelling time for zero voltage vectors. Both values are the same. 4. Va and Vb are the adjacent non-zero voltage vectors in each sector 5. V0 and V7 are the zero voltage vectors Using equation (2.3), as non-zero voltage vectors are null or zero, equation (2.3) can be transformed into the following equation: T V REF = Va a Ts T + Vb b Ts (2.4) 19 To obtain the dwelling time of non-zero voltage vectors, we take the magnitude of all voltage vectors using equation (2.4), T cos α = V a × a V REF × sin α Ts T + Vb × b Ts (2.5) However, 1 cos 0° 2 2 Va = VDC = V DC 3 0 sin 0° 3 cos 60° 2 Vb = V DC 3 sin 60° (2.6) Therefore, by substituting equations in (2.6), 1 T cos α 2 = VDC × a VREF × 0 Ts sin α 3 2 cos 60° Tb + VDC × T ° sin 60 3 s (2.7) where 0 ≤ α ≤ 60° Equations from (2.5) to (2.7) are based on sector 1. Through derivation and mathematical equations, the equations for all sectors can be obtained using the following formulas: Ta = 3 × Ts × VREF 2VDC 3 × Ts × VREF n sin π − θ 3 n −1 sin θ − π 2V DC 3 T − Ta − Tb T0 = T7 = s , where 1 ≤ n ≤ 6 , n ∈ integer 2 Tb = (2.8) 20 CHAPTER 3 METHODOLOGY This chapter will discuss the methodology of the project, including the tools, equipments, procedures and processes involved in the hardware and software development and implementation of the project. 3.1 Hardware Development and Implementation 3.1.1 Introduction to PIC micro-controllers PIC is a family of Harvard architecture microcontrollers made by Microchip Technology, derived from the PIC1650 originally developed by General Instrument's Microelectronics Division. The name PIC was originally an acronym for "Programmable Interface Controller". PICs are popular with developers and hobbyists alike due to their low cost, wide availability, large user base, extensive collection of application notes, 21 availability of low cost or free development tools, and serial programming (and reprogramming with flash memory) capability. Microchip Technology has produced a range of micro-controllers with different bits such as 8-bit micro-controller (i.e. PIC16, PIC17, PIC18), 16-bit microcontrollers (i.e. PIC24) and 16-bit digital signal controllers (i.e. dsPIC30 and dsPIC33F). Some of the PIC micro-controllers use flash memory and some can be electronically erased. Different characteristics of micro-controllers cater to different purposes as well. 3.1.2 Introduction to PIC16F876A Figure 3.1: PIC16F876A PIC16F876A is one of the 8-bit micro-controller produced by Microchip Technology. This micro-controller is considered to be unique as it uses flash memory as its program memory and thus it can be programmed again and again without using ultra-violet to erase its program memory. It is also interesting to note that PIC16F876A consumes low power supply and voltage which is approximately 5 volt. It is also fully static or non-volatile whereby program memory in PIC16F876A would not be lost when the supply is taken off the micro-controller. Compared to other 8-bit PIC micro-controllers (i.e. PIC16, PIC17), PIC16F876A has a relatively 22 sufficient memory for storage purposes and industrial applications, and can also support high frequency, which is approximately up to a maximum of 20 MHz. For more information on the PIC16F876A, refer to parts of the data sheet of the microcontroller in the Appendix section. Table 3.1: Some features of PIC16F876A Features Characteristics/Value Architecture 8 bit Program Memory Type Enhanced Flash Kbytes 14 Data EEPROM 256 I/O 22 Max Speed (MHz) 20 Pin Count 28 3.1.3 Schematic of Hardware Design The circuit of the hardware part of the project is firstly obtained by referring to the common schematic diagram for interfacing circuit of PIC micro-controllers, where power supply, inputs and outputs are connected likewise depending on one’s needs and requirements. Based on the standard interfacing circuit, the circuit is then modified based on the requirements of the project, which would be described in the next subtopic. The schematic diagram was then drawn using an electrical engineering software known as Multisim 8, which is commonly used to simulate electrical and electronics circuits and capture these circuits to be shown on documents and others. Figure 3.2 shows the process of drawing the schematic diagram of the interfacing 23 circuit using Multisim 8. Note that the schematic diagram is then captured from Multisim 8 to be shown in this thesis in Figure 3.2. Figure 3.2: Schematic diagram drawn and captured using Multisim 8 3.1.4 Description of Hardware Design The implementation of SVM is based mainly on the PIC micro-controller used, which is PIC16F876A. In the project, PIC16F876A would function as the “brain” or central processing unit of the circuit and thus interfacing circuit is required to ensure PIC16F876A function at its maximum capability. Interfacing circuit is built with the addition of various supplementary components such as resistors, capacitors, power supply and oscillator. This circuit could be divided into 2 parts; (a) power supply of 5 volt, and (b) interfacing circuit of PIC16F876A. Based on the data sheet of PIC16F876A, in order to ensure the micro-controller function, a supply of 5 volt has to be provided to VDD pin of the micro-controller. Since a 9 volt battery would be used as a source of supply, a linear regulator LM7805 is used to provide stable 5 volt supply. 24 A switch is connected to MCLR (master clear) pin of the micro-controller to enable micro-controller to be “reset” by switching the switch on. External oscillator circuitry is also required in this project to generate device clock for instruction execution with high speed capability which is important for this project. Therefore, High Speed Crystal (HS) is chosen to establish oscillation at high frequency where the crystal would be connected in between OSC1 and OSC2 pins of the microcontroller. U2 LM7805CT 1 LINE VOLTAGE VREG COMMON V_1 9V R3 330Ω C1 100nF C2 100nF LED1 4 0 U1 5 XSC1 G T 6 A B C D 5 6 7 8 9 10 11 12 13 VSS VDD RB0/INT RA0 RB1 RA1 RB2 RA2 RB3 RA3 RB4 RA4/TOCK1 RB5 ~MCLR RB6 OSC1/CLKIN RB7 OSC2/CLKOUT 14 17 18 1 2 3 4 16 15 R2 10kΩ 12 2 7 X1 PIC16F876A R1 100Ω 11 8 C6 100uF-POL 3 HC-49/US_11MHz C4 22pF C5 22pF C3 10uF-POL J1 Key = A 0 Figure 3.3: Schematic diagram of project circuit using Multisim At the initial stage of the design, the input has not been completely designed but it would be designed from one stage to another. So, the input at the beginning of project implementation would utilize the changing of sector number using the computer program. On the other hand, the output of the circuit would utilize one of the I/O ports whereby only 3 pins of one of the ports would be used. Note that port B of pin 0, 1 and 2 are used in this project. These output pins would be connected to an oscilloscope to investigate and evaluate the output waveform pattern based on sector 25 number. Figure 3.4 shows the actual circuit assembled on a breadboard. Note that the output waveform pattern for different sector numbers would be shown in Chapter 4. Figure 3.4: Hardware implementation of SVM signal generator using PIC micro-controller on breadboard 3.2 Software Development and Implementation In this section, PIC equivalent programming languages and compilers, and the software design of the project would be discussed. 3.2.1 PIC Equivalent Programming Languages In PIC micro-controllers, the main computer language used is assembly language. Each PIC type has certain amount of instructions and has different types of 26 functions in assembly language. The assembly language used in PIC also differs quite a bit from other microprocessors and micro-controllers such as 68000 and others. For instance, for PICs, bi-operand arithmetic operations always involve W (commonly known as the W register) writing the result back to either W or the other operand register. In other words, a register is needed to move and write results from one parameter or address register to the other parameter or address register, which is quite troublesome. This situation does not apply on 68000 microprocessor. However, there are also other computer languages that are linked to PIC such as BASIC, C language, FORTRAN which makes PIC a widely used microcontroller. In this project, C language would be used due to several reasons. Firstly, C language is easier to understand. C language is a language designed by humans for the benefit and convenience of humans. In C Language, the use of address and file registers are not important even though the process is basically the same as assembly language in terms of data transfer. Besides, many operations such as logic and arithmetic operations could be implemented easily if compared to assembly language. This makes C language more accessible and convenient without having to consider too much on conditional branches. 3.2.2 PIC Equivalent Compilers and Related Tools Figure 3.5: Microchip MPLAB IDE and PIC micro-controller programmer developed by Cytron Technologies 27 The compiler that would be used in this project is known as MPLAB Integrated Development Environment (IDE). MPLAB IDE is a software program that runs on PC to provide a development environment for embedded microcontroller design. Therefore, for processes involving programming such as writing, compiling, troubleshooting, debugging etc., MPLAB IDE is the important software to use. There are several equipments which are used together with the software for programming purposes such as programmers and debuggers. Programmers are vital as it is used to get program code into the target PIC micro-controller. There are numerous PIC micro-controller programmers, ranging from simple designs which depend on In-Circuit Serial Programming (ICSP) which allow direct download of code from host computer, to intelligent programmers that can verify the device at several supply voltages. The programmer used throughout this project is Cytron Programmer, applicable for wide range of PIC micro-controller using USB, which is developed by Cytron Technologies Sdn. Bhd. 3.2.3 MPLAB IDE and C Language Figure 3.6: CCS C Compiler for PIC micro-controllers In this project, MPLAB IDE would be the main programming software to write, edit and insert or burn the written computer program into the PIC micro- 28 controller. The main language for writing programs for PIC micro-controller using MPLAB IDE on Windows OS is the assembly language and thus in order to write C language programs to be inserted into the PIC micro-controller, compilers or assemblers related to C language has to be utilized. Therefore, CCS C Compiler was chosen as the main C language compiler for this project as I have some experience of using this C compiler during my industrial attachment session. Figure 3.7: CCS C (PCM) Compiler compiles the project file original.c Figure 3.8: Project file original.c has been successfully compiled and built 29 CCS C Compiler contains standard C operators and a huge variety of built-in libraries that are specific to PIC registers. Therefore, it actually makes C language accessible to the hardware side of the PIC micro-controller. However, note that different C compilers have distinct C operators and built-in libraries. Some of its features include wide range of integer types (1, 8, 16, 32 bit) and 32 bit floating point, enabling bit arrays, fixed point decimal, possessing capability to create user defined address spaces in memory device and so on. Another plus point of CCS C Compiler is that it is applicable for a wide range of PIC micro-controllers, including PIC10, PIC12, PIC14, PIC16, and PIC18 provided the type of CCS Compiler for each type of PIC is identified. For PIC16, the type of CCS C Compiler used is PCM Compiler while PCH Compiler is for PIC18. Note that the license of PCM and PCH compiler of CCS C Compilers have to be bought before it can be used. Figure 3.7 and 3.8 shows examples on how CCS C Compiler is used on MPLAB IDE to compile C language written computer programs. Figure 3.9: CCS C Compiler Help File Menu CCS C Compiler also provides a help menu which serves as an extensive help library for users to browse and obtain relevant C language related source code and 30 library functions. This help menu eases the process of understanding the C language used by CCS C Compiler and thus makes C language program writing faster, more accurate and more efficient. Figure 3.9 shows the menu of the CCS C Compiler Help File menu. 3.2.4 Software Design Figure 3.10: Flow chart of program for SVM signal generator The software design of this project would be based on the concept of SVM. To be more exact, the program code that would be written during the project would be based a lot on the equations that have been presented in Chapter 2, which involves the calculation of important parameters such as Ts, Ta, Tb, T0 and to approximate the reference voltage vector into certain sector number in the hexagon representation. 31 Calculation of parameters would involve the use of floating point in the program code and thus more memory space of the PIC16F876A would be used. However, the input and output are all in digital form or binary form, which is either 1 or 0. Figure 3.10 would briefly explain the flow of the program in a simple manner. The program would start with the acceptance of input parameters including magnitude and phase. Then generation of counter which involves degrees from 0° to 360° would be conducted. This counter would ensure that only a complete cycle is taken into consideration. Once the input phase has been identified, sector number would be chosen based on the phase angle of the input. As shown in Chapter 2, there are 6 sectors where each sector is separated by 60°. Sector number would be important to select the output waveform and equations to calculate the parameters. After that, interrupt would be activated to enable the calculation of parameters. This would be followed by obtaining the output waveform or binary code from a look-up table (assembly language) or an array (C language). With all those ready, interrupt would be de-activated and output waveform would be displayed based on the binary code and the values of parameters. The process would be repeated when a new input is inserted into the program. The flow of the program is not difficult to understand but the program code would involve excessive use of loops and functions which might be confusing at times. Therefore, it is important to make planning for the program writing part before executing the process of program writing. In the next few subtopics, each part of the process of C language program writing would be explained, starting from input counter to output display, as well as the description of important variables, arrays and C language library functions provided by CCS C Compiler. 32 3.2.4.1 Variables and Arrays The C language program writing process requires different variables and functions. In this project, most of the variables are either taken from the main mathematical equations as shown in Chapter 2 or others such as loop counters, input and output variables and so on. Table 3.2 shows the list of variables declared and used in the program of this project. All these variables would be described in their respective C language functions in the next subtopics. Table 3.2: List of variables used in the program of project Name of variables Variables Type of variables Time variables ts, ta, tb, t0, tmag Float numbers up Job variables phase, phaset1, counters Loop Rounding Calculation of time Purpose Phase variables phaset2, thetha, Float numbers thetha1, thetha2 Modulation index modin Float numbers Voltages variables vref, vdc Float numbers Initial variables XX Float numbers Resulting variables result, integral, integral1, integral2 Float numbers End variables YY Integers Sector identification i Integers Output display j Integers Input counter h Integers Arrays, on the other hand, are vital as it contains a string of binary codes located in consecutive addresses in the memory of the micro-controller and they would be used whenever called upon. In this project, there are two situations which require the use of arrays. One is for displaying the output pattern of the SVM signal generator while the other purpose is to provide spaces in the memory storage for the 33 calculated time variables to be used during the process of output display which is named as “timema[8]”. S 2 S 1 S 0 t0 ta tb t0 t0 tb ta t0 Figure 3.11: Output pattern for sector 1 Table 3.3: List of array and binary code for each sector Sector 1 Name of array and the binary code involved outta1[8] = {0b00000000, 0b00000100, 0b00000110, 0b00000111, 0b00000111, 0b00000110, 0b00000100, 0b00000000} 2 outta2[8] = {0b00000000, 0b00000010, 0b00000110, 0b00000111, 0b00000111, 0b00000110, 0b00000010, 0b00000000} 3 outta3[8] = {0b00000000, 0b00000010, 0b00000011, 0b00000111, 0b00000111, 0b00000011, 0b00000010, 0b00000000} 4 outta4[8] = {0b00000000, 0b00000001, 0b00000011, 0b00000111, 0b00000111, 0b00000011, 0b00000001, 0b00000000} 5 outta5[8] = {0b00000000, 0b00000001, 0b00000101, 0b00000111, 0b00000111, 0b00000101, 0b00000101, 0b00000000} 6 outta6[8] = {0b00000000, 0b00000100, 0b00000101, 0b00000111, 0b00000111, 0b00000101, 0b00000100, 0b00000000} 34 To describe further on arrays of the output pattern display, let us look at Figure 3.11. Since port B (pin 0, 1 and 2) of micro-controller PIC16F876A are used, only the first 3 bits (starting from LSB) of the 8 bit code would vary according to the output pattern for each time column. This eventually means that switching states or phases S2, S1 and S0 refer to pin 2, 1 and 0 for port B respectively. For example, for time column ta of sector 1, the binary code for output of port B would be “0b00000100”. Same could be said for time column tb, where the binary code would be “0b00000110”. The binary code would then be synthesized repeatedly for other time columns. Therefore, each sector has an array consisting of 8 binary codes for 8 time columns. Table 3.3 shows all the arrays for every sector of output pattern. 3.2.4.2 Library Functions One of the main advantages of using C language for programming purposes is the availability of various library functions. C language provides various library functions especially in terms of mathematical equations and functions. However, before these library functions are available for use, the C language program has to add header files to access different library functions. For example, PIC16F876A header or 16F876A.h is used to get access to main C language functions from the CCS C Compiler, math header or math.h is used to have access to mathematical functions and float header or float.h is used to enable the use of float numbers. In this project, the use of trigonometry function (sine) and other related mathematical function are vital for processing the input (phase, voltage and time variables) so as to obtain and display the output pattern required. Besides, library functions that are related to interface the C language program with the PIC microcontroller. Note also that some library functions must be used together with predefined functions such as “#use delay” to enable the application of library function “delay_us()” and “delay_ms()”. 35 The mathematical functions used are listed in Table 3.4 and Table 3.5 which are obtained from the CCS C Compiler help menu [1] . The main functions are listed in Table 3.6 and 3.7 which are also obtained from the same source.[1] Table 3.4: Description of modf() function Syntax: result= modf (value, & integral) Parameters: value and integral are floats Returns: result is a float Function: The modf function breaks the argument value into integral and fractional parts, each of which has the same sign as the argument. It stores the integral part as a float in the object integral. Requires: math.h Examples: float result, integral; must be included result=modf(123.987,&integral); // result is .987 and integral is 123.0000 Table 3.5: Description of sin() function Syntax: val = sin (rad) Parameters: rad is a float representing an angle in radians -2pi to 2pi. val is a float with the range -1.0 to 1.0. Value is a float. Returns: rad is a float representing an angle in radians -pi/2 to pi/2 val is a float with the range -1.0 to 1.0. rad1 is a float representing an angle in radians 0 to pi rad2 is a float representing an angle in radians -pi to pi Result is a float Functions: Returns the sine value of the parameter (measured in radians) Requires: math.h Examples: float phase; must be included // Output one sine wave for(phase=0; phase<2*3.141596; phase+=0.01) set_analog_voltage( sin(phase)+1 ); 36 Table 3.6: Description of output_b() function Syntax: output_b (value) Parameters: value is a 8 bit int Returns: undefined Functions: Requires: Output an entire byte to a port. The direction register is changed in accordance with the last specified #USE *_IO directive. Nothing Examples: OUTPUT_B(0xf0); Table 3.7: Description of delay_us() function Syntax: delay_us (time) Parameters: time - a variable 0-65535(int16) or a constant 0-65535 Returns: undefined Functions: Creates code to perform a delay of the specified length. Time is specified in microseconds. Shorter delays will be INLINE code and longer delays and variable delays are calls to a function. This function works by executing a precise number of instructions to cause the requested delay. It does not use any timers. If interrupts are enabled the time spent in an interrupt routine is not counted toward the time. The delay time may be longer than requested if an interrupt is serviced during the delay. The time spent in the ISR does not count toward the delay time. Requires: #use delay Examples: #use delay(clock=20000000) do { output_high(PIN_B0); delay_us(duty); output_low(PIN_B0); delay_us(period-duty); } while(TRUE); 37 3.2.4.3 Initialization The initialization process is a process required to interface the computer language program with the micro-controller. The main purpose is to activate the required functions and important pins on the micro-controller as well as the I/O ports to function either as an input or as an output. This process is vital so as to ensure the output and input of the whole project on the PIC micro-controller. Based on the scope of this project, the PIC micro-controller would only be initialized to have outputs since the input will be internally (in the computer program itself) generated. The process of initialization requires basic knowledge of the micro-controller especially in C language since C is used in this project. As mentioned earlier, header files such as 16F876A.h, math.h and float.h must be included in order to enable important library functions, C commands and operations can be applied in the C language program. Besides, important knowledge on the configuration bits of the micro-controller must be applied so as to activate necessary configuration bits in the project. Figure 3.12 shows part of the header files used in the project. #include <16F876A.h> #include <float.h> #include <math.h> #use delay(clock=20000000) #fuses HS,NOWDT,NOPROTECT,PUT,NOWRT,BROWNOUT,NOLVP Figure 3.12: Header files included in the C language program of project 38 Since this project only involves 3 output ports, the initialization of I/O ports involve only port B. Using the PIC version of the initialization of I/O port commands, input and output can be activated on a particular chip by using an example command (based on C Language) shown in Figure 3.13. #define #define #define #define #define #define TRISA TRISB TRISC Port_Ai Port_Bi Port_Ci 0b00000000 0b00000000 0b00000000 0b00000000 0b00000000 0b00000000 //Initial valua for Port A //Initial valua for Port B //Initial valua for Port C Figure 3.13: Command for I/O port initialization of the PIC micro-controller For PIC16, setting a bit in TRISA register defines the corresponding port pin (port A for TRISA) as input, and clearing a bit in TRISA register defines the corresponding port pin as output. The initial value for each port can also be set to the desired bit for each pin depending on the project itself. Therefore, since 3 output ports are needed, all TRISA, TRISB and TRISC are set to 00000000 to indicate all ports are output ports 3.2.4.4 Input Counter Input counter is generally a counter involving the increment of phase from 0 to 360 degrees. This counter would repeat once it reaches 360 degrees. Note that the phase represents the angle of the rotating VREF. In this project, the unit degrees would 39 be used to indicate the phase counter instead of the unit radians for ease of verification purposes. So in each period of the input counter, a particular number of samples will be taken within 0 to 360 degrees to be used for calculation of time variables and display of output signal. Note that the angle in degrees would then be converted into unit radians in the program itself for calculation purposes. Input Counter (Degrees) 360 0 Time fundamental period, Tf Figure 3.14: Input Counter Output The input counter graph as shown in Figure 3.14 is a graphical description of a loop with counter of 0 to 360 degrees used to represent the input counter, since the input to the program is not included in this project. Note that the period of each pulse (of the output signal for each state S1, S2 and S3) can be estimated from the fundamental period, Tf using the following relationship: Pulse period, T p = Tf 360 40 3.2.4.5 Sector Identification As mentioned in Chapter 2, each degree would fall into different sectors and the output pattern for all phases or states (S1, S2 and S3) based on different sectors would differ from one and another. Thus, sector identification is vital to ensure that the output pattern is correct for a particular sector and also the ensure the accuracy of calculation of time variables. To identify and determine which degree falls into which sector, a simple rule has been designed to make sure that the condition applies to all degrees fro 0 to 360 degrees. Referring to equations (2.8) from Chapter 8, the equation in the argument of sine of Ta and Tb were used. Let them be phaset1 and phaset2. Then, refer to the flow chart in Figure 3.15. n π −θ 3 n −1 phaset2 = θ − π 3 phaset1 = (3.1) The reason of using phaset1 and phaset2 in the sector identification process is that if the certain angle (for instance 145 degrees) is not in the correct sector (145 degrees is in sector 3), both values for phaset1 and phaset2 would have opposite signs (one would be positive and the other would be negative). If the angle is in the correct sector, both phaset1 and phaset2 would be positive in sign. The following calculation would clear things up. 41 For θ = 145 degrees (2.53 radians), let n be 1. 1 phaset1 = π − 2.53 = −1.48 3 1 −1 phaset2 = 2.53 − π = 2.53 3 Then let n be 3. 3 phaset1 = π − 2.53 = 0.611 3 3 −1 phaset2 = 2.53 − π = 0.436 3 Figure 3.16 shows the sector identification function in the program, known as idsec(). As mentioned in 3.2.4.4, the angle (in degrees) would all be converted to radians for calculation purposes and thus there is a need to add the conversion formula in idsec() function. Figure 3.15: Flow chart of the sector identification section of the program 42 void idsec() { for(i=1;i<=6;i++) { phaset1 = i*3.142/3; phaset1 = phaset1 - phase; phaset2 = phase - (i - 1)*3.142/3; if((phaset1 >=0) && (phaset2 >=0)) { n = i; } } } Figure 3.16: Command for sector identification function, idsec() 3.2.4.6 Calculation of Time Variables In this project, the calculation of time variables would be the core element of the project. As explained in Chapter 2, the time variables Ta, Tb and T0 can be calculated using the equations (2.8). All the calculation would be done in a function known as tcal(). Ta = 3 × Ts × VREF 2VDC 3 × Ts × VREF n sin π − θ 3 n −1 sin θ − π 2V DC 3 T − Ta − Tb , where 1 ≤ n ≤ 6 , n ∈ integer T0 = T7 = s 2 Tb = (2.8) 43 void tcal() { ts = 1000/100; thetha = phase; thetha1 = (n*3.142/3) - thetha; thetha2 = thetha - (n - 1)*3.142/3; tmag = (sqrt(3))*(modin)*ts/4; //moin=vref1/vdc1 ta = (tmag)*(sin(thetha1)); //test time tb = (tmag)*(sin(thetha2)); //test time t0 = ts - ta - tb; t0 = t0/2; rdjob(); //Putting times into timema array timema[0]=t0; timema[3]=t0; timema[4]=t0; timema[7]=t0; timema[1]=ta; timema[6]=ta; timema[2]=tb; timema[5]=tb; } Figure 3.17: Command of the time calculation function, tcal() In this function, the value of the sampling period is set to the desired value (the value of sampling period would be discussed in Chapter 4). At first, calculation of the argument of sine function for both equations involving Ta and Tb (or ta and tb in the C language program) are calculated. Next, as the coefficient in front of the sine function is then calculated which involves variables modin and ts. Bear in mind that the arguments of sine function have to be in unit radians. After calculating ta and tb, t0 is then calculated just as shown in Figure 3.18. After all time variables are obtained, a set of array (which is declared at the beginning of the program) is then used to store the time variables ta, tb and t0 into a specific sequence. This sequence is actually derived from the symmetrical sequence pattern as shown in Figure 2.8 in Chapter 2. All the time variables have also been calculated using Microsoft Excel (refer to Appendix) so as to enable checking and verification of the C language program. 44 Figure 3.18: Sequence of time variables inserted into timema array 3.2.4.7 Rounding Up Job The rounding up job function is a self written function to cater to the needs of the C Language library function, which is the delay function (delay(), delay_us() and delay_ms()). As shown in Table 3.7, the variable used in delay functions must be integers but the time variables calculated are all in float numbers. Fortunately enough, the delay functions include delay in milliseconds and microseconds, which totally fits the project well as most of the time variables are in microseconds. However, since the time variables are in float numbers, there is no choice but to round up the numbers to the nearest integer. To round up the numbers, library function modf() is used to ease the rounding up process. As described in Table 3.4, modf() function separates a float number into its integer and its decimal numbers. For instance, 1.97 can be separated into 1 and 0.97 using the function. Thus the logic shown in Figure 3.20 is used to obtain rounded numbers. Note that XX and YY are intermediate variables used for rounding up purposes. From Figure 3.18, after the calculation of time variables, a function known as rdjob() would be reached. This function actually leads to rounding up of time 45 variables ta, tb and t0 before inserting these values into the timema array. This rdjob() is shown in Figure 3.23. Figure 3.19: Flow chart of rounding up function //Function to round up ta, tb and t0 void roundup() { result=modf(XX,&integral); YY = integral; if ((result >=0) && (result <0.5)) { YY = YY + 0; } else{ if ((result >= 0.5) && (result < 1)) { YY = YY + 1; } } } Figure 3.20: Command for roundup() function 46 //Function to collect and re-insert rounded up numbers for important time variables void rdjob() { XX = ta; roundup(); ta = YY; XX = tb; roundup(); tb = YY; XX = t0; roundup(); t0 = YY; } Figure 3.21: Command for rdjob() function 3.2.4.8 Output Function Output display is the final part of the C language program for this project. Before reaching this part, time calculation has been conducted through the tcal() function. In this part, the time variables would be obtained from the array timema and be used for output display. The method of obtaining the time variable for displaying the output pattern is based on each time column. For example, referring to Figure 3.22, each time column has a time variable represented by different colours. The output pattern starts with blue column with time variable t0. For this column, the time variables would be obtained from the array timema, whereby timema[0], timema[3], timema[4] and timema[7] are equal to the value of time variable t0 (refer to subtopic 3.2.4.7). The blue coloured time column is then followed by the yellow coloured time column where it features time variable ta. The same procedure is repeated for this 47 column whereby timema[1] and timema[6] both are equal to the value of ta. For the next column till the end of the pattern, the same steps are taken. S 2 S 1 S 0 t0 ta tb t0 t0 tb ta t0 Figure 3.22: Time columns for output pattern It is important to note that each sector has different pattern and also different values of ta, tb and t0 as the value of phase or angle differs from time to time. However, for a single sector, the pattern would alter in terms of pulse size when the phase increases from the initial angle of the sector till the final angle of the sector. For instance, for sector 1, the pulse size for all three switching states (or phases) would alter starting from the 1st degree till the 60th degree, but the output pattern would be the same in the range of phase of 1 degree to 60 degrees. To simplify the output pattern (featuring each switching states) for every sector, Table 3.8 is formulated. The output pattern has been shown graphically in Figure 2.8 of Chapter 2. The entire process in the function showout() is described in the flow chart in Figure 3.23. After the tcal() function, the program would enter showout() function and start identifying the correct sector number in order to obtain the correct output pattern from the arrays declared earlier (outta1, outta2, outta3, outta4, outta5, outta6). The arrays have been explained in subtopic 3.2.4.1 in detail. 48 Table 3.8: Time variables involved for each switching state for every sector Sector Time Variables number, n State S1 State S2 State S3 1 T0 + Ta + Tb T0 + Tb T0 2 T0 + Tb T0 + Ta + Tb T0 3 T0 T0 + Ta + Tb T0 + Tb 4 T0 T0 + Tb T0 + Ta + Tb 5 T0 + Tb T0 T0 + Ta + Tb 6 T0 + Ta + Tb T0 T0 + Tb Now that the correct output array and sector number had been identified. Thus, the program would proceed by entering a loop with counter 8 as each output pattern has 8 time columns (note that each array contains 8 binary codes in it). For each looping, one binary code is taken from the output array and then sent to Port B through library function output_b() to be displayed. Next, one binary code is taken from the timema array to be inserted into the library function delay_ms()(or delay_us()) to enable the output pattern to be delayed for a certain amount of time (based on the time variable of the time column). For instance, based on sector 1, for the 1st looping, a binary code from outta1 (the binary code is outta1[0] = 0b00000000) is obtained and then sent to Port B through the library function output_b() to be displayed. Then, a binary code is then taken from timema array (the code is timema[0] = t0) to be inserted into library function delay_us(). The pattern (based on outta1[0]) is then delayed for t0 time. The procedure is then repeated until the counter ends. The command for the function showout() would give a clearer insight into the flow of the output display process. 49 Figure 3.23: Flow chart for the output display function 50 //Function to transfer output from array to output port void showout(){ if(n == 1) { for(j=0;j<8;j++) { output_b(outta1[j]); delay_us(timema[j]); } } if(n == 2) { for(j=0;j<8;j++) { output_b(outta2[j]); delay_us(timema[j]); } } if(n == 3) { for(j=0;j<8;j++) { output_b(outta3[j]); delay_us(timema[j]); } } if(n == 4) { for(j=0;j<8;j++) { output_b(outta4[j]); delay_us(timema[j]); } } if(n == 5) { for(j=0;j<8;j++) { output_b(outta5[j]); delay_us(timema[j]); } } if(n == 6) { for(j=0;j<8;j++) { output_b(outta6[j]); delay_us(timema[j]); } } } Figure 3.24: Command for the process of output 51 CHAPTER 4 RESULTS AND DISCUSSION This chapter will discuss the results obtained from the implementation process of the project. Problems and situations that arose during the implementation process will also be explained and discussed. 4.1 Implementation of Project To implement this project, the first step was to determine the values for all parameters used to obtain the time variables. These parameters, shown in Table 4.1, would influence the values of time variables and also the pulse width of the output pattern. Besides, the fundamental frequency and period were set to the desired value in order to see the output pattern for a particular amount of samples taken. The implementation process of the project was initially conducted for high frequency. Therefore, the original initial parameters shown in Table 4.1 were used. However, during the implementation period, it was found that the there were some problems on the output pattern at high frequency. The reason would be discussed in the following subtopic. Because of these problems, another set of initial parameters 52 were used whereby its sampling frequency has been changed to low frequency. This would also be discussed in the following subtopic. Table 4.1: Initial Parameters for Calculation and Implementation Purposes (High Frequency) Parameters Value Internal clock cycle 20 MHz Fundamental Period 100 ms Sampling time, frequency Ts = 100 µs, fs = 10000 Hz Ta = Time variables (ta, tb, t0) 3 × Ts × V REF 2VDC n sin π − θ 3 3 × Ts × VREF n −1 sin θ − π 2VDC 3 T − Ta − Tb , where 1 ≤ n ≤ 6 , n ∈ integer T0 = T7 = s 2 Tb = 1 Modulation index (modin) Table 4.2: Initial Parameters for Calculation and Implementation Purposes (Low Frequency) Parameters Value Internal clock cycle 20 MHz Sampling time, frequency Ts = 200 ms, fs = 5 Hz Ta = Time variables (ta, tb, t0) 3 × Ts × V REF 2VDC n sin π − θ 3 3 × Ts × VREF n −1 sin θ − π 2VDC 3 T − Ta − Tb , where 1 ≤ n ≤ 6 , n ∈ integer T0 = T7 = s 2 Tb = n = sector number Modulation index (modin) 1 53 4.2 Results of Project 4.2.1 Results For High Frequency The results shown in Figure 4.1 were obtained at 10 kHz sampling frequency. Bear in mind that within 100 µs of fundamental period, one cycle (0 to 360 degrees) is taken and thus the 5 samples would change its output pattern based on each sector, starting from sector 1 to sector 6. Based on the pulses on this figure, it can be seen that the time gap between pulses was large, approximately about 16 ms. Note that the sampling frequency of these pulses was supposed to be 100 µs. Due to this problem, only a total number of 5 samples were taken for a fundamental period of 100 µs. Even so, the output pattern changed from sector 1 until sector 6 according to what had been described and shown in Figure 2.8 in Chapter 2.Yet, the only problem with the output pattern now is that the time gap between pulses taken from the project does not match with what we want at high frequency. 4.2.2 Results For Low Frequency Due to the problem occurred for high frequency, a much lower frequency for was taken for the sampling frequency in order to overcome the time gap between pulses (16 ms for high frequency). For low frequency though, the fundamental period of the input counter was not set. A number of 100 samples were taken for one cycle (0 to 360 degrees). The output pattern obtained is shown in Figure 4.2 54 Note that the time period obtained from the output at low frequency were roughly 250 ms, which still differ from the sampling period of 200 ms. However, since the difference of 50 ms is smaller compared to the sampling period, the gap between the pulses did not seem to be large and thus a clearer series of pulses can be seen. The variation of output pattern from one sector to another sector can also be seen clearly, with the pulses widening and narrowing according to the time calculated. To understand how the pulse size changes, refer to the calculation of time variables in Appendix B and subtopic 3.2.4.8 for further information. Figure 4.1: Results obtained at high frequency of 10 kHz 55 Sector 1 Sector 2 Sector 3 Sector 4 Sector 5 Sector 6 Figure 4.2: Results taken at low frequency of 50 Hz 56 Line-to-Line Signal (S3 – S1) Line-to-Line Signal (S3 – S2) Line-to-Line Signal (S2 – S1) Figure 4.3: Line-to-line signal obtained on the oscilloscope at low frequency Apart from that, there were other analyses that could be obtained based on the output pattern obtained at low frequency. Since the pulses have a less significant time gap between each other, the line to line signal also could be seen. Line-to-line signal was obtained by subtracting output signal of one phase or switching state with the other. The reason for observation of the line-to-line signal was to determine 57 whether the algorithm of the sequence is correct, and to verify calculation of time variables. Since the algorithm of the output pattern is in symmetrical form as shown in Figure 4.3, the line-to-line signal would show bipolar form (positive and negative magnitudes) as output pattern for each phase based on each sector differs from each other. This can be explained and verified using Figure 4.4, where both positive pulse and negative pulse can be obtained while taking the line-to-line signal. The line-toline signal graph would enable us to obtain the fundamental period. Referring to Figure 4.3, it can be seen that the period of the line-to-line signal is roughly 25 to 26 seconds. This period signifies the fundamental period, whereby it matches 100 samples with a sampling period of roughly 250 ms (100 × 250 ms = 25 s). S3 S3 S1 S1 S3 – S1 t0 ta tb t0 t0 S3 – S1 tb Positive Pulse ta t0 t0 ta tb t0 t0 tb ta t0 Negative Pulse Figure 4.4: Subtracting pulse of one phase with another It is noteworthy that the concept of SVM is generally a combination of SPWM and third harmonic injected to it. Even though such combination is done in Third-Harmonic PWM, this concept still applies for SVM, whereby each phase 58 would have a third harmonic component in it. Therefore, the frequency response of the output pattern for each phase is as shown in Figure 4.5. Fundamental waveform Distorted waveform 3rd Harmonic frequency Third Harmonic Fundamental frequency Sampling frequency Figure 4.5 Waveforms and frequency response for one phase Figure 4.6: Frequency Response of the output pattern for one phase Figure 4.5 shows the frequency response of the output pattern of one of the phases, S3. We know that the fundamental period estimated was roughly 25 seconds, which gives us a fundamental frequency of 0.04 Hz. As the fundamental frequency is 59 small, the third harmonic could not be seen clearly from the frequency response taken from the oscilloscope. The sampling frequency though, valued at roughly 4 to 5 Hz, can be observed. The overall frequency response pattern was deemed to be correct. 4.3 Discussion and Explanation Both set of results have been taken for high and low frequency (10 kHz and 50 Hz). As mentioned earlier, the results at high frequency was not satisfactory due to the large time gap between pulses (roughly 16 ms) and thus results were retaken for low frequency in order to make the difference of time between actual sampling period and time period obtained from output less significant. Several reasons have been touted to have caused the problem. The main cause of such situation is the use of float number or floating points in the C language program. Note that calculation of time variables involved the use of float numbers in order to obtain accurate time variables. However, it is noticed that C language is not the main language for PIC micro-controller. Note that regardless of whatever computer language used for PIC microcontroller programming, all these languages would be translated back into assembly language for compiling purposes. In C language, the use of float numbers may seem easy but that is not the case with assembly language. A simple command of float number might take a few assembly language commands to execute. Therefore, it is suspected that because of this reason, more time is taken to process the float numbers to obtain the time variables. This reason has been considered into the design of program and thus interrupt has been suggested even in the earlier stages of the program writing process. Unfortunately, when the program was written, all the functions written worked 60 properly, except for the interrupt function. The interrupt function was not discussed in Chapter 3 due to this reason. This interrupt function is known to be a crucial part of the project because it can halt the internal clock of the micro-controller and proceed with the calculation of time variables while the internal clock is halted. Once this is done, the large time gap between pulses can be eliminated. However, that was not the case as it failed to function even after much discussion regarding this problem with some other experts in application of this PIC micro-controller. Since PIC micro-controllers are complicated devices, it usually takes a person to fully understand its functions and applications a lot of time to do that. As my knowledge on PIC micro-controllers is not deep enough, I can still handle a lot of basic aspects of PIC micro-controllers. Familiarity with complex parts of a PIC micro-controller might be the key towards successfully achieving the overall objectives of this project. Because of its complexity as well, problems in PIC microcontrollers sometimes are hard to detect, especially when it involves both hardware and software problems. 61 CHAPTER 5 CONCLUSION AND SUGGESTIONS FOR FURTHER RESEARCH 5.1 Summary The rapid development of high switching frequency power electronics devices in the past decade leads towards wider application of voltage source inverters (VSI) in AC power generation. Therefore, this prompts the need for a modulation technique with less THD, less switching and commutation losses, and wider linear modulation range. SVM provides a better technique compared to the more commonly used Pulse Width Modulation (PWM), Sinusoidal PWM and so fourth. With the increasing usage of micro-controllers in electrical engineering, this project presents another solution to implement SVM, by using PIC micro-controller to generate SVM signal. Space Vector Modulation (SVM) refers to a special switching sequence which is based on the upper switches of a 3 phase voltage source inverter (VSI). The aim of SVM is to approximate the reference voltage vector, VREF using the eight switching topologies of a VSI. Since PIC micro-controller is used, hardware and software development are involved and the crucial section of the project focuses on the software development. In the circuit, PIC micro-controller acts as the “brain” of the system by obtaining input, processing them and then displaying the correct output pattern according to the 62 sector number. PIC micro-controller would function as a center for time variable calculation and output display. By using an input counter, the variation of pulse from one sector to another sector (1 to 6) can be obtained. 5.2 Conclusion and Suggestions In conclusion, the development and implementation of micro-controller-based SVM signal generator has been partially successful as the output pattern at high frequency had a much larger time gap/period due to certain problems that occurred. The reason is that there were only a few minor problems to be solved, particularly in the software part of the project, in order to achieve all objectives of the project. As mentioned in Chapter 4, solving the large time gap between pulses would be vital to enable this micro-controller-based SVM signal generator to function to its fullest potential and the possible method of solution would be to focus on improvising the implementation of interrupt function in the program. This can be done by fully understanding the interrupt function of the PIC micro-controller used in future projects. Besides, there is a possibility that other micro-controllers can be used to implement SVM to generate SVM signal in other various sequence (other than symmetrical sequence). However, this has to be done only if one fully understands the features and characteristics of the micro-controller in order to avoid unnecessary problems such as what have been encountered in this project. Larger memory and higher frequency range are some of the features that can be taken into consideration for choosing the suitable micro-controller to be used in such SVM projects. 63 REFERENCES 1. CCS, CCS C Compiler v.4 Help File. Custom Computer Services Incorporated, 2007. 2. J.F. Moynihan, M.G.Egan, J.M.D Murphy, Theoretical Spectra of Space-Vector Modulated Waveforms, IEE Proc.-Electr. Power Appl., Vol. 145, No. 1, January 1998. 3. Keliang Zhou and Daniel Wang, Member, IEEE. Relationship Between Space Vector Modulation and Three Phase Carrier-Based PWM: A Comprehensive Analysis. IEEE Transactions on Industrial Electronics, Vol. 49, No. 1, February 2002 4. L. Zhang, C. Wathanasarn, F. Hardan, An Efficient Microprocessor-Based PulseWidth Modulator using Space Vector Modulation Strategy, IEEE, pp.91-96, 1994 5. Microchip, PIC16F87XA Data Sheet: 28/40/44 - Pin Enhanced Flash Microcontrollers. Microchip Technology Inc. 2003. 6. Muhammad H. Rashid, Power Electronics: Circuits, Devices and Applications Third Edition. Prentice Hall 7. NEC, 78K0 Application Note: An Introduction to Space Vector Modulation using NEC’s 8-bit Motor Control Microcontrollers. NEC Corporation, 2004. 64 8. Ned Mohan, Tore M Undeland, William P Robbins, Power electronics : converters, applications, and design 2nd Edition.New York : John Wiley & Sons, 1995 9. Parekh, Rakesh. AN955 Application Note: VF Control of 3-Phase Induction Motor Using Space Vector Modulation. Microchip Technology, 2005. 10. STMicroelectronics, AN2154 Application Note: Space Vector Modulation Using 8Bit ST7FMC Microcontroller AND AK-ST7FMC Starter Kit. STMicroelectronics Worldwide. 2005. 11. Wei Chong Low, Implementation of SVM Signal Generator for a 3 Phase Inverter Employing Altera FPGA. Thesis of Bachelor Degree. Universiti Teknologi Malaysia; 2006. 65 APPENDIX A 66 //*************************************************************************************** //*************************************************************************************** //********** Micro-controller Based SVM Signal Generator ********** //********** ********** //********** Written by Kelvin Lye ********** //********** ********** //*************************************************************************************** //*************************************************************************************** #include <16F876A.h> #include <float.h> #include <math.h> //#device *=16 ADC=8 //16bit pointer, 8-bit ADC #use delay(clock=20000000) #fuses HS,NOWDT,NOPROTECT,PUT,NOWRT,BROWNOUT,NOLVP #define TRISA #define TRISB #define TRISC #define Port_Ai #define Port_Bi #define Port_Ci typedef struct int1 int1 int1 int1 int1 int1 int1 int1 } flags; 0b00000000 0b00000000 0b00000000 0b00000000 0b00000000 0b00000000 //Initial valua for Port A //Initial valua for Port B //Initial valua for Port C { bit0; bit1; bit2; bit3; bit4; bit5; bit6; bit7; //Important time variables float ts, ta, tb, t0, tmag; //time related variable //Important phase variables float phase, phaset1; //to identify sector number float phaset2, thetha, thetha1, thetha2; //to calculate related time variables float modin; //modulation index float ZZ; //to convert angles larger than 360 degrees into the scale of 0 to 360 degrees //Important voltage related variables float vref, vdc; //to calculate modulation index //Other variables int8 i, j, h; //counter float nsamp, result1; //condition for one complete cycle int8 n; //sector number //Variables for Rounding up Process float result, integral, integral1, XX; // variables for rounding up process int8 YY, integral2; float testa1; //Interrupt Bit flags sys01; #define flg_10ms sys01.bit0 //Arrays of Outputs of Each Sector (1 to 6) int8 outta1[8]={0b00000000,0b00000100,0b00000110,0b00000111,0b00000111,0b00000110,0b00000100, 0b00000000}; //test mar int8 outta2[8]={0b00000000,0b00000010,0b00000110,0b00000111,0b00000111,0b00000110,0b00000010, 0b00000000}; //test mar 67 int8 outta3[8]={0b00000000,0b00000010,0b00000011,0b00000111,0b00000111,0b00000011,0b00000010, 0b00000000}; //test mar int8 outta4[8]={0b00000000,0b00000001,0b00000011,0b00000111,0b00000111,0b00000011,0b00000001, 0b00000000}; //test mar int8 outta5[8]={0b00000000,0b00000001,0b00000101,0b00000111,0b00000111,0b00000101,0b00000101, 0b00000000}; //test mar int8 outta6[8]={0b00000000,0b00000100,0b00000101,0b00000111,0b00000111,0b00000101,0b00000100, 0b00000000}; //test mar int8 timema[8]; //Initialization void init(){ setup_timer_1(T1_INTERNAL | T1_DIV_BY_8); // enable_interrupts(INT_RDA); enable_interrupts(GLOBAL); enable_interrupts(INT_TIMER1); } //Function to transfer output from array to output port void showout(){ if(n == 1) { for(j=0;j<8;j++) { output_b(outta1[j]); delay_ms(timema[j]); } } if(n == 2) { for(j=0;j<8;j++) { output_b(outta2[j]); delay_ms(timema[j]); } } if(n == 3) { for(j=0;j<8;j++) { output_b(outta3[j]); delay_ms(timema[j]); } } if(n == 4) { for(j=0;j<8;j++) { output_b(outta4[j]); delay_ms(timema[j]); } } if(n == 5) { for(j=0;j<8;j++) { output_b(outta5[j]); delay_ms(timema[j]); } } if(n == 6) { for(j=0;j<8;j++) { 68 output_b(outta6[j]); delay_ms(timema[j]); } } } //Function to round up ta, tb and t0 void roundup() { result=modf(XX,&integral); YY = integral; if ((result >=0) && (result <0.5)) { YY = YY + 0; } else{ if ((result >= 0.5) && (result < 1)) { YY = YY + 1; } } } //Function to identifying sector number void idsec() { for(i=1;i<=6;i++) { phaset1 = i*3.142/3; phaset1 = phaset1 - phase; phaset2 = phase - (i - 1)*3.142/3; if((phaset1 >=0) && (phaset2 >=0)) { n = i; } } } //Function to collect and re-insert rounded up numbers for important time variables void rdjob() { XX = ta; roundup(); ta = YY; XX = tb; roundup(); tb = YY; XX = t0; roundup(); t0 = YY; } //Function to obtain input details void in_put() { vdc = 10; vref = 10; //fundamental frequency of 10 Hz (100 samples) phase = 2*3.142*h*0.01; } // Calculation of time ta, tb, ts and t0 69 void tcal() { ts = 1000/100; thetha = phase; thetha1 = (n*3.142/3) - thetha; thetha2 = thetha - (n - 1)*3.142/3; tmag = (sqrt(3))*(modin)*ts/4; //moin=vref1/vdc1 ta = (tmag)*(sin(thetha1)); //test time tb = (tmag)*(sin(thetha2)); //test time t0 = ts - ta - tb; t0 = t0/2; rdjob(); //Putting times into timema array timema[0]=t0; timema[3]=t0; timema[4]=t0; timema[7]=t0; timema[1]=ta; timema[6]=ta; timema[2]=tb; timema[5]=tb; } //Main function void main() { Mainloop: nsamp = 100; result1=modf(nsamp,&integral1); integral2=integral1+1; h=1; do { in_put(); idsec(); tcal(); h++; } while (h < integral2); goto Mainloop; } Appendix A: Source code of program of this project 70 APPENDIX B 71 Degree 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 thetha 0.063 0.126 0.188 0.251 0.314 0.377 0.44 0.503 0.565 0.628 0.691 0.754 0.817 0.88 0.942 1.005 1.068 1.131 1.194 1.257 1.319 1.382 1.445 1.508 1.571 1.634 1.696 1.759 1.822 1.885 1.948 2.011 2.073 2.136 2.199 2.262 2.325 2.388 2.45 2.513 2.576 2.639 2.702 2.765 2.827 2.89 2.953 3.016 n 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ta 1.8E-05 1.72E-05 1.64E-05 1.55E-05 1.45E-05 1.34E-05 1.24E-05 1.12E-05 1E-05 8.81E-06 7.55E-06 6.26E-06 4.94E-06 3.61E-06 2.26E-06 9.07E-07 1.85E-05 1.78E-05 1.7E-05 1.61E-05 1.51E-05 1.41E-05 1.31E-05 1.2E-05 1.08E-05 9.63E-06 8.39E-06 7.12E-06 5.82E-06 4.5E-06 3.16E-06 1.81E-06 4.53E-07 1.83E-05 1.75E-05 1.67E-05 1.58E-05 1.48E-05 1.38E-05 1.27E-05 1.16E-05 1.04E-05 9.22E-06 7.97E-06 6.69E-06 5.38E-06 4.06E-06 2.71E-06 tb 1.36E-06 2.71E-06 4.06E-06 5.38E-06 6.69E-06 7.97E-06 9.22E-06 1.04E-05 1.16E-05 1.27E-05 1.38E-05 1.48E-05 1.58E-05 1.67E-05 1.75E-05 1.83E-05 4.53E-07 1.81E-06 3.16E-06 4.5E-06 5.82E-06 7.12E-06 8.39E-06 9.63E-06 1.08E-05 1.2E-05 1.31E-05 1.41E-05 1.51E-05 1.61E-05 1.7E-05 1.78E-05 1.85E-05 9.07E-07 2.26E-06 3.61E-06 4.94E-06 6.26E-06 7.55E-06 8.81E-06 1E-05 1.12E-05 1.24E-05 1.34E-05 1.45E-05 1.55E-05 1.64E-05 1.72E-05 t7 1.53E-05 1.5E-05 1.48E-05 1.46E-05 1.44E-05 1.43E-05 1.42E-05 1.42E-05 1.42E-05 1.42E-05 1.43E-05 1.45E-05 1.46E-05 1.49E-05 1.51E-05 1.54E-05 1.55E-05 1.52E-05 1.49E-05 1.47E-05 1.45E-05 1.44E-05 1.43E-05 1.42E-05 1.42E-05 1.42E-05 1.43E-05 1.44E-05 1.45E-05 1.47E-05 1.49E-05 1.52E-05 1.55E-05 1.54E-05 1.51E-05 1.49E-05 1.46E-05 1.45E-05 1.43E-05 1.42E-05 1.42E-05 1.42E-05 1.42E-05 1.43E-05 1.44E-05 1.46E-05 1.48E-05 1.5E-05 72 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 3.079 3.142 3.204 3.267 3.33 3.393 3.456 3.519 3.581 3.644 3.707 3.77 3.833 3.896 3.958 4.021 4.084 4.147 4.21 4.273 4.335 4.398 4.461 4.524 4.587 4.65 4.712 4.775 4.838 4.901 4.964 5.027 5.089 5.152 5.215 5.278 5.341 5.404 5.466 5.529 5.592 5.655 5.718 5.781 5.843 5.906 5.969 6.032 6.095 6.158 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 1.36E-06 1.88E-05 1.8E-05 1.72E-05 1.64E-05 1.55E-05 1.45E-05 1.34E-05 1.24E-05 1.12E-05 1E-05 8.81E-06 7.55E-06 6.26E-06 4.94E-06 3.61E-06 2.26E-06 9.07E-07 1.85E-05 1.78E-05 1.7E-05 1.61E-05 1.51E-05 1.41E-05 1.31E-05 1.2E-05 1.08E-05 9.63E-06 8.39E-06 7.12E-06 5.82E-06 4.5E-06 3.16E-06 1.81E-06 4.53E-07 1.83E-05 1.75E-05 1.67E-05 1.58E-05 1.48E-05 1.38E-05 1.27E-05 1.16E-05 1.04E-05 9.22E-06 7.97E-06 6.69E-06 5.38E-06 4.06E-06 2.71E-06 1.8E-05 9.61E-21 1.36E-06 2.71E-06 4.06E-06 5.38E-06 6.69E-06 7.97E-06 9.22E-06 1.04E-05 1.16E-05 1.27E-05 1.38E-05 1.48E-05 1.58E-05 1.67E-05 1.75E-05 1.83E-05 4.53E-07 1.81E-06 3.16E-06 4.5E-06 5.82E-06 7.12E-06 8.39E-06 9.63E-06 1.08E-05 1.2E-05 1.31E-05 1.41E-05 1.51E-05 1.61E-05 1.7E-05 1.78E-05 1.85E-05 9.07E-07 2.26E-06 3.61E-06 4.94E-06 6.26E-06 7.55E-06 8.81E-06 1E-05 1.12E-05 1.24E-05 1.34E-05 1.45E-05 1.55E-05 1.64E-05 1.72E-05 1.53E-05 1.56E-05 1.53E-05 1.5E-05 1.48E-05 1.46E-05 1.44E-05 1.43E-05 1.42E-05 1.42E-05 1.42E-05 1.42E-05 1.43E-05 1.45E-05 1.46E-05 1.49E-05 1.51E-05 1.54E-05 1.55E-05 1.52E-05 1.49E-05 1.47E-05 1.45E-05 1.44E-05 1.43E-05 1.42E-05 1.42E-05 1.42E-05 1.43E-05 1.44E-05 1.45E-05 1.47E-05 1.49E-05 1.52E-05 1.55E-05 1.54E-05 1.51E-05 1.49E-05 1.46E-05 1.45E-05 1.43E-05 1.42E-05 1.42E-05 1.42E-05 1.42E-05 1.43E-05 1.44E-05 1.46E-05 1.48E-05 1.5E-05 73 99 100 6.22 6.283 6 1 1.36E-06 1.88E-05 1.8E-05 1.39E-20 1.53E-05 1.56E-05 Appendix B: Calculation of time variables using Microsoft Excel 74 APPENDIX C 75 76 77 78 79 80 81 82 83 84 85 86 Appendix C: Part of Data Sheet of PIC16F87