Lưu đồ thuật toán điều khiển động cơ BLDC

Một phần của tài liệu Nghiên cứu triển khai điều khiển động cơ một chiều không chổi than (Brushless DC motos) và ứng dụng trong lĩnh vực cơ điện tử (Trang 54)

Hình 47. Lưu đồ thuật toán điều khiển BLDC

Giải thích qua về sơ đồ trên như sau:

Khi bắt đầu cài đặc các chế độ cho điều khiển PWM (ở đây là MCPWM), chế độ ADC và các port được cấu hình là đầu vào hay đầu ra.

Khi có nút khởi động được ấn thì vi điều khiển đọc giá trị của sensor Hall và Load vào một bảng (thực chất là load vào thanh ghi OVDCON). Có chu trình

quét xem nút khởi động có được ấn hay không. Nếu có thực hiện như trên, ngược lại nếu nút không được ấn thì lặp lại chu trình quét này.

Tiếp theo vi điều khiển tính toán giá trị tốc độ thực của động cơ dựa vào đó để xuất xung PWM phù hợp theo luật điều khiển PID (ở ứng dụng này sử dụng luật PI).

Chu trình quét kiểm tra xem nút stop có được ấn hay không. Nếu không thì vi điều khiển tiếp tục làm công việc như ở trên. Tức là cấp xung điều khiển động cơ theo luật PI. Ngược lại nếu nút stop được bấm thì động cơ xem dừng bằng cách dùng điều khiển MCPWM.

Ngoài ra chi tiết hơn chúng ta bàn đến việc thứ tự cấp xung của vi điều khiển cho động cơ BLDC. Muốn nhắc tới điều này cùng bàn tới việc đọc tín hiệu vào CN. Flow ngắt CN trình bày đơn giản như dưới đây:

KẾT LUẬN

Kết quả

Trong quá trình làm luận văn tác giả đã thực hiện thành công bo mạch driver điều khiển động cơ BLDC có ký hiệu NT dynamo của hãng Emerson Motor có phản hồi Hall sensor. Dưới đây là một số hình ảnh về mạch phần cứng, động cơ được sử dụng trong luận văn và ghép động cơ vào mạch driver để thực hiện nhiệm vụ điều khiển.

Hình 49. Bo mạch điều khiển đông cơ BLDC

Hình 51. Mạch nạp MPLab ICD3 của hang Microchip

Tóm lại các kết quả đã đạt được của luận văn:

- Tìm hiểu, phân tích được ưu điểm, nhược điểm của động cơ BLDC và phương pháp điều khiển loại động cơ này theo hai hướng: không có sensor và có sensor. Từ đó tập trung lựa chọn phương pháp điều khiển có sensor vòng lặp kín.

- Thiết kế, chế tạo bộ điều khiển động cơ BLDC điều khiển vòng lặp kín theo luật điều khiển PID. Mạch điều khiển có thể giao tiếp với máy tính thông qua cổng RS232.

- Mạch tích hợp làm cơ sở cho các nghiên cứu, giảng dạy và là cơ sở cho các thiết kế ở mức cao hơn, ứng dụng được vào thực tế hiện nay.

Hướng phát triển

Mặc dù luận văn đã thành công trong việc tìm hiểu về phương pháp điều khiển động cơ BLDC và tiến hành điều khiển thành công loại động cơ BLDC của hãng Emerson Motor nhưng việc áp dụng mạch driver này vào những loại động cơ có công suất lớn hơn, dòng tải lớn hơn cần được nghiên cứu tiếp tục. Với những loại động cơ này thì việc chọn cho chúng loại MOSFET và driver cầu thích hợp là một vấn đề rất quan trọng. Có thể với những loại động cơ dòng hoặc công suất lớn cần phải tách riêng phần mạch điều khiển và mạch lực. Như thế sẽ phải tìm hiểu và nghiên cứu lại việc chế tạo mạch driver. Ngoài ra thì vấn đề về nguồn điện dùng cho động cơ cũng cần được tìm hiểu ở trong một báo cáo khác. Nếu điều khiển các loại động cơ như đang được dùng trong thực tế hiện nay (xe đạp điện) thì cũng khá quan trọng khi phải nắm bắt được cách tự nạp điện cho ác qui, trang bị các kiến thức về UPS.

Bên cạnh các kết quả đã đạt được, tác giả hi vọng rằng sẽ tiếp tục tìm hiểu và phát triển luận văn này với những đề xuất nêu ở trên. Những đề xuất hướng phát triển hi vọng thành công sẽ mở ra một tương lai cho việc động cơ điện dần dần thay thế loại động cơ chạy bằng dầu. Điều này giải quyết một vấn đề lớn về kinh tế cũng như công nghệ.

TÀI LIỆU THAM KHẢO

Tài liệu tiếng việt:

1. Bùi Quốc Khánh và Nguyễn Văn Liễn, Cơ sở truyền động điện – NXB khoa học và kĩ thuật

2. Nguyễn Phùng Quang (1996), Điều khiển động cơ không đồng bộ xoay

chiều ba pha, NXB KHKT, Hà Nội.

3. Nguyễn Doãn Phước (2002), Lý thuyết điều khiển tuyến tính, NXB

KH&KT, Hà Nội, VN

Tài liệu tiếng anh:

1. High and Low Side Driver, Noninverting Inputs in a 8-lead SOIC package (datasheet IR2101S, Data Sheet No. PD60043-N), IRF [International Rectifier].

2. 75V Single N-Channel HEXFET Power MOSFET in a D-Pak package (datasheet IRFR2407), IRF [International Rectifier].

3. MCP6001/R/U/2/4, 1 MHz, Low-Power Op Amp, 2009 Microchip Technology Inc. (adsbygoogle = window.adsbygoogle || []).push({});

4. MCP6541/2/3/4 Data Sheet, 2009 Microchip Technology Inc.

5. Sinusoidal Control of PMSM Motors with dsPIC30F DSC, Jorge Zambada Microchip Technology, 2005 Microchip Technology Inc. 6. Sensored BLDC Motor Control Using dsPIC30F2010, Stan D’Souza

Microchip Technology, 2004 Microchip Technology Inc.

7. Sensorless BLDC Motor Control Using dsPIC30F2010, Stan D’Souza Microchip Technology, 2004 Microchip Technology Inc.

PHỤ LỤC

Code chương trình:

#define __dsPIC30F2010__

#include "c:\pic30_tools\support\h\p30F2010.h" #define FCY 10000000// xtal = 5.0Mhz; PLLx8

#define MILLISEC FCY/10000// 1 mSec delay constant #define FPWM 16000 #define Ksp1200 #define Ksi10 #define RPMConstant60*(FCY/256) #define S2!PORTCbits.RC14 void InitTMR3(void); void InitADC10(void); void AverageADC(void);

void DelayNmSec(unsigned int N); void InitMCPWM(void); void CalculateDC(void); void GetSpeed(void); struct { unsigned RunMotor : 1; unsigned Minus : 1; unsigned unused : 14; } Flags;

unsigned int HallValue; int Speed;

unsigned int Timer3; unsigned char Count;

unsigned char SpeedCount; int DesiredSpeed;

int ActualSpeed; int SpeedError; int DutyCycle; int SpeedIntegral;

void _ISR _CNInterrupt(void) {

IFS0bits.CNIF = 0; // clear flag

HallValue = PORTB & 0x0038; // mask RB3,4 & 5 HallValue = HallValue >> 3; // shift right 3 times

OVDCON = StateLoTable[HallValue];// Load the overide control register }

void _ISR _ADCInterrupt(void) {

IFS0bits.ADIF = 0;

DesiredSpeed = ADCBUF0; if (!Flags.RunMotor)

{

PDC1 = ADCBUF0; // get value ...

PDC2 = PDC1; // and load all three PWMs ... PDC3 = PDC1; // duty cycles

} }

{

LATE = 0x0000;

TRISE = 0xFFC0; // PWMs are outputs CNEN1 = 0x00E0; // CN5,6 and 7 enabled CNPU1 = 0x00E0; // enable internal pullups IFS0bits.CNIF = 0; // clear CNIF

IEC0bits.CNIE = 1; // enable CN interrupt SpeedError = 0; SpeedIntegral = 0; InitTMR3(); InitMCPWM(); InitADC10(); while(1) {

while (!S2); // wait for start key hit while (S2) // wait till key is released DelayNmSec(10); (adsbygoogle = window.adsbygoogle || []).push({});

// read hall position sensors on PORTB

HallValue = PORTB & 0x0038; // mask RB3,4 & 5

HallValue = HallValue >> 3; // shift right to get value 1, 2 ... 6

OVDCON = StateLoTable[HallValue];// Load the overide control register PWMCON1 = 0x0777; // enable PWM outputs

Flags.RunMotor = 1; // set flag T3CON = 0x8030; // start TMR3

while (Flags.RunMotor) // while motor is running if (!S2) // if S2 is not pressed

Một phần của tài liệu Nghiên cứu triển khai điều khiển động cơ một chiều không chổi than (Brushless DC motos) và ứng dụng trong lĩnh vực cơ điện tử (Trang 54)