Hệ thống điều khiển số sử dụng vi điều khiển kết hợp với máy tính cá nhân

Một phần của tài liệu Giáo trình điều khiển số ứng dụng (Trang 84 - 94)

Vi điều khiển AVR Atmega16 có thể ghép nối với máy tính qua bộ nhận và truyền nối tiếp đa năng đồng bộ và không đồng bộ (Universal Synchronous and Asynchronous serial Receiver and Transmitter /USART). Hình 7.2 là sơ đồ khối của hệ thống điều khiển số sử dụng máy tính.

Hình 7.2. Sơ đồ khối hệ thống điều khiển số sử dụng máy tính

Khi đó vi điều khiển sẽ thực hiện chức năng truyền thông. Toàn bộ thuật toán điều khiển số sẽ nằm trong máy tính đ−ợc viết bằng ngôn ngữ Visual Basic. D−ới đây là code ch−ơng trình viết bằng ngôn ngữ C thực hiện chức năng truyền thông nối tiếp với máy tính. Ngoài ra vi điều khiển AVR còn có nhiệm vụ tạo ra tín hiệu có độ rộng xung thay đổi tần số là 725 Hz để điều khiển tốc độ động cơ. Bộ chuyển đổi ADC 8 bit đ−ợc sử dụng để nhận tín hiệu phản hồi tốc độ.

a) Code ch−ơng trình cho chức năng truyền thông của vi điều khiển Atmega16: /*****************************************************

This program was produced by the CodeWizardAVR V1.25.8 Professional Automatic Program Generator

â Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com Project : Version : Date : 3/3/2008 Author : F4CG Company : F4CG Comments:

Chip type : ATmega16 Program type : Application Clock frequency : 12.000000 MHz Memory model : Small

External SRAM size : 0 Data Stack size : 256

*****************************************************/ #include <mega16.h>

// Standard Input/Output functions #include <stdio.h>

#include <delay.h>

#define ADC_VREF_TYPE 0x20 // Read the 8 most significant bits // of the AD conversion result

Bộ điều khiển PID RS232 USART Timer0 ADC 8 bit Mạch băm Động cơ Tốc độ Phản hồi Vi điều khiển Atmega 16

unsigned char read_adc(unsigned char adc_input) {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage delay_us(10);

// Start the AD conversion ADCSRA|=0x40;

// Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10; return ADCH; }

// Declare your global variables here void main(void)

{

// Declare your local variables here int outdata;

// Input/Output Ports initialization // Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T PORTB=0x00;

DDRB=0x08;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;

DDRD=0x00;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 187.500 kHz // Mode: Fast PWM top=FFh // OC0 output: Non-Inverted PWM TCCR0=0x6B;

TCNT0=0x00; OCR0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped

// Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00;

TCCR2=0x00; TCNT2=0x00; OCR2=0x00;

// External Interrupt(s) initialization // INT0: Off

// INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00;

// USART initialization

// Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: On

// USART Transmitter: On // USART Mode: Asynchronous // USART Baud Rate: 9600 UCSRA=0x00;

UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x4D;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

SFIOR=0x00; // ADC initialization

// ADC Clock frequency: 750.000 kHz // ADC Voltage Reference: AREF pin // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x84;

while (1) {

// Place your code here putchar(read_adc(7)); outdata = getchar(); OCR0 = outdata; };

}

b) Ch−ơng trình điều khiển bằng máy tính:

Ch−ơng trình điều khiển bằng máy tính thực hiện chức năng của một bộ điều khiển PID số. Ch−ơng trình đ−ợc viết bằng ngôn ngữ Visual Basic bao gồm hai phần:

-Phần 1: Giao diện ng−ời sử dụng nh− hình 7.3 cho phép ng−ời sử dụng có thể giám sát và đặt các thông số.

-Phần 2: Là code ch−ơng trình cho quá trình truyền thông nối tiếp và bộ điều khiển PID số.

Hình 7.3. Giao diện ng−ời sử dụng Code ch−ơng trình điều khiển viết bằng ngôn ngữ Visual Basic '---

' Digital Control System Design based on Ziegler-Nichols algorithm: ' ' -P controller: Kp = T1/K/Td ' ' -PI controller: Kp = 0.9*T1/K/Td ' Ti = 3.3*Td ' ' -PID controller: Kp = 1.2*T1/K/Td ' Ti = 2*Td

' Tde = 0.5*Td '

' Implementation of digital PID controller

' In s-domain, the output signal of the PID controller ' can be expressed as follows:

' / \ ' | 1 |

' E(s)= Kp |1 + --- + Td*s |E(s) (1) ' | Ti*s |

' \ /

' Using the the following properties of the z-transform: '

' 1 z 1 ' --- = --- = --- ' s z - 1 1 - z^(-1) '

' We can derive the z-form of the PID controller: ' / \ ' | T Td*[1 - z^(-1)] | ' U(z)= Kp |1 + --- + ---|E(z) (2) ' | Ti*[1 - z^(-1)] T | ' \ / '

' Kp is the propotional constant ' Ti is the integral time constant ' Ts id the derivative time constant ' T is the sampling interval

' ' Let: ' Kp*T Kp*Td ' a = Kp b = --- c = --- ' Ti T '

' Equation (2) can therefore be expressed as follows '

' 1

' U(z)= a*E(z) + b*---*E(z) + c*[1 - z^(-1)]*E(z) (3) ' [1 - z^(-1)] ' ' U(z)= a*E(z) + P(z) + Q(z) (4) ' 'where ' ' 1 ' P(z)= b*---*E(z) (5) ' [1 - z^(-1)] ' ' Q(z) = c*[1 - z^(-1)]*E(z) (6) ' '

' From (5), we can write '

' P(kT) = P(kT-T) + b*E(kT) (7) '

' From (6), we have '

' Q(kT) = c*[E(kT) - E(kT-T)] (8) '

'

'Reference: page 251 "Microcontroller Based Applied Digital Control" '-D. Ibrahim

'(c) 2006 John Wiley & Sons, Ltd '

'

' Copyright (c) 2004 - 2005 Son Nguyen ' University of Technology, Sydney ' E-mail: Son.NguyenThanh@uts.edu.au

'--- Option Explicit

Dim Serial_Data As String Dim feedback As String Dim High_Byte As Long Dim Low_Byte As Long Dim Two_Byte As Long Dim Kp As Single Dim Tin As Single Dim Tde As Single Dim Ts As Single Dim a As Single Dim b As Single Dim c As Single Dim rkt As Single Dim ykt As Single Dim ykt_1 As Single Dim ekt As Single Dim ekt_1 As Single Dim pkt As Single Dim pkt_1 As Single Dim qkt As Single Dim qkt_1 As Single Dim ukt As Single Dim Vmax As Integer Dim Vmin As Integer

Private Sub Command2_Click() Unload Me

End Sub

Private Sub Form_Load() MSComm1.RThreshold = 2 MSComm1.InputLen = 2 MSComm1.CommPort = 2 MSComm1.Settings = "9600,N,8,1" MSComm1.PortOpen = True HScroll1.Min = 0 HScroll1.Max = 50 Picture1.AutoRedraw = True Picture1.ScaleLeft = 0 Picture1.ScaleWidth = 50 End Sub

If MSComm1.CommEvent = comEvReceive Then Serial_Data = MSComm1.Input ' Get data High_Byte = Asc(Mid$(Serial_Data, 1, 1)) ' Get 1st byte Low_Byte = Asc(Mid$(Serial_Data, 2, 1)) ' Get 2nd byte Two_Byte = JoinHighLow(High_Byte, Low_Byte)

End If End Sub

Private Sub PID_parameters(m As Integer) Kp = Format(Val(Text3.Text), "0.00") Tin = Format(Val(Text4.Text), "0.00") Tde = Format(Val(Text5.Text), "0.00") Ts = 0.01

End Sub

Private Sub PI_Click() a = Kp b = (Kp * Ts) / Tin c = 0 ekt_1 = 0 pkt_1 = 0 qkt_1 = 0 End Sub

Private Sub PID_Click() a = Kp b = (Kp * Ts) / Tin c = (Kp * Tde) / Ts ekt_1 = 0 pkt_1 = 0 qkt_1 = 0 End Sub

Private Sub Reset_Click() a = 0 b = 0 c = 1 ekt_1 = 0 pkt_1 = 0 qkt_1 = 0 End Sub

Private Sub Timer1_Timer() PID_parameters (1) feedback = Low_Byte rkt = HScroll1.Value Text9.Text = Format(rkt * 10, "0.00") Text1.Text = Format(feedback * 10, "0.00") DrawScale CStr(HScroll1.Value) Standard_PID (1) End Sub

Private Function JoinHighLow(lHigh As Long, lLow As Long) As Long JoinHighLow = (lHigh * &H100) Or lLow 'Join High Byte and Low Byte End Function

Private Sub DrawScale(Variable As Long) Picture1.Cls

Picture1.Line (0, 0)-(Variable, 400), vb3DShadow, BF End Sub

Private Sub Form_Unload(Cancel As Integer) MSComm1.PortOpen = False

End Sub

Private Sub Standard_PID(m As Integer)

'Zero Order Holding approximation(Standard PID controller) ykt = feedback

ekt = rkt - ykt 'the Error pkt = b * ekt + pkt_1 'the I term qkt = c * (ekt - ekt_1) 'the D term ukt = a * ekt + pkt + qkt 'the PID output

'Prevent the controller from the "integral windup" Vmax = 2550

Vmin = 0

If ukt > Vmax Then pkt = pkt_1 ukt = Vmax End If

If ukt < Vmin Then pkt = pkt_1 ukt = Vmin End If

'Save the variables pkt_1 = pkt

ekt_1 = ekt

'Output the control signal

Text2.Text = Format(ukt / 25.5, "0.00") MSComm1.Output = Chr(Round(ukt / 10)) End Sub

Mục lục

Lời mở đầu

Ch−ơng 1. Các hệ thống điều khiển số và biến đổi z

1.1 Định nghĩa về các hệ thống điều khiển số...1

1.2 Quy trình lấy mẫu và giữ mẫu...1

1.3 Biến đổi z...4 1.3.1 Hàm b−ớc đơn vị...5 1.3.2 Hàm ramp...5 1.3.3 Hàm mũ...5 1.3.4 Hàm mũ tổng quát...5 1.3.5 Hàm sin...6 1.3.6 Hàm cos...6 1.3.7 Hàm xung rời rạc...7 1.3.8 Hàm xung rời rạc có trễ...7 1.3.9 Bảng biến đổi z...7

1.3.10 Tìm biến đổi z qua biến biến đổi Laplace...7

1.3.11 Các tính chất của biến đổi z...9

1.3.12 Biến đối z ng−ợc...11

1.4 Hàm truyền xung và thao tác các sơ đồ khối...15

1.4.1 Các hệ thống vòng hở...15

1.4.2 Đáp ứng thời gian vòng hở...18

1.4.3 Các hệ thống vòng kín...23

1.4.4 Đáp ứng thời gian của hệ thống vòng kín...26

1.5 Sử dụng Matlab để tìm biến đổi z và biến đổi z ng−ợc...28

1.5.1 Biến đổi z...28

1.5.2 Biến đổi z ng−ợc...29

Ch−ơng 2. ổn định của hệ thống điều khiển số 2.1 ánh xạ từ mặt phẳng p vào mặt phẳng z...32

2.2 Tiêu chuẩn Jury...34

2.3 Tiêu chuẩn Routh-Hurwitz...37

2.4 Quỹ tích gốc (Root Locus)...40

Ch−ơng 3. Các bộ điều khiển số 3.1 Các bộ điều khiển số ...44

3.1.1 Bộ điều khiển “dead-beat”...45

3.1.2 Bộ điều khiển Dahlin...46

3.2 Bộ điều khiển tỷ lệ-tích phân-vi phân (PID controller)...48

Ch−ơng 4. thực thi các bộ điều khiển số 4.1 Cấu trúc trực tiếp (Direct Structure)...50

4.1.1 Cấu trúc chuẩn trực tiếp (Direct Canonical Structure)...50

4.1.2 Cấu trúc không chuẩn trực tiếp (Direct Noncanonical Structure)...52

4.2 Cấu trúc song song...53

4.3 Bộ điều khiển PID số...55

Ch−ơng 5. đạI CƯƠNG Về Cấu trúc phần cứng và phần mềm CHO ĐIềU KHIểN Số động cơ điện một chiều

iii

5.1 Vi điều khiển...58

5.1.1 Vi điều khiển AVR Atmega16...58

5.1.2 Ghép nối vi điều khiển AVR Atmega16 với máy tính...60

5.2 Động cơ điện một chiều...61

5.3 Phản hồi tốc độ...61

5.4 Tải của động cơ...61

5.5 Van đóng cắt của mạch băm...61

5.6 Diod mắc song song ng−ợc với tải động cơ...62

5.7 Cuộn kháng lọc...62

5.8 Điều khiển động cơ điện một chiều sử dụng phản hồi tốc độ...62

5.9 Một số đặc điểm ch−ơng trình phần mềm trong điều khiển số...63

Ch−ơng 6. Xây dựnghàm truyền của động cơ điện một chiều 6.1 Hàm truyền chính xác của động cơ điện một chiều...64

6.2 Hàm truyền gần đúng của động cơ điện một chiều...66

6.3 Hàm truyền gần đúng của động cơ điện một chiều Lab-Volt trong phòng thí nghiệm...68

6.3.1 Hệ thống truyền động xung áp mạch đơn-động cơ điện một chiều...69

6.3.2 Phần cứng và phần mềm để đo phản ứng của động cơ...71

6.3.3 Xây dựng hàm truyền của động cơ theo ph−ơng pháp Ziegler-Nichols...75

Ch−ơng 7. Thực thi các hệ thống điều khiển số Động cơ điện một chiều sử dụng vi điều khiển và máy tính cá nhân 7.1 Hệ thống điều khiển số sử dụng vi điều khiển...78

7.2 Hệ thống điều khiển số sử dụng vi điều khiển kết hợp với máy tính cá nhân...82

Một phần của tài liệu Giáo trình điều khiển số ứng dụng (Trang 84 - 94)

Tải bản đầy đủ (PDF)

(94 trang)