7. Ngày hoàn thành đồ án:
5.2.3. Thực hiện thuật toán điều chế vector không gian
Trong điều kiện giới hạn về thời gian cũng như trình độ làm mạch, đề tài này chỉ thực hiện phần thuật toán điều chế vector không gian, tức là module xuất xung đầu ra dựa trên cơ sở điện áp đặt ở đầu vào. Đây chỉ là mạch vòng hở. Để minh họa rõ ràng hơn, ta sẽ thực hiện một mạch lọc thông thấp đơn giản ở đầu ra. Mạch lọc R-C có thông số : R = 5.5 K và C = 10 nF (tụ gốm 103). Mạch lọc này sẽ giúp ta quan sát dạng điện áp ra pha-pha có đúng dạng hình sine hay không, từ đó giúp phát hiện xem thuật toán của
chúng ta đúng hay sai. Dưới đây là mô tả về chức năng của hàm SVM(unsigned int
phase) trong chương trình.
Đầu vào của hàm tính SVM là biến góc angle, ngoài ra có thể dùng thêm một biến nữa đại diện cho lượng điện áp cần điều khiển, nhưng để đơn giản ta chỉ dùng 1 biến. Trong phương pháp điều chế vector không gian, ta sẽ cho 1 vector quay từ 0 3600 với vận tốc là 400Hz. Module MCPWM được cấu hình như trên cho phép ngắt ở đầu mỗi chu kỳ băm xung. Mỗi khi có ngắt, góc mới sẽ được cập nhật. Từ giá trị góc mới này, ta sẽ tính toán giá trị sine của các góc được chuẩn hóa theo sector hiện thời từ bảng sine 600 lập sẵn. Sau đó ta sẽ nhân giá trị sine này với giá trị tối đa của thời gian thực hiện PWM được chuẩn hóa. Cuối cùng, các thanh ghi PDCx sẽ được cập nhật các giá trị mới. Các giá trị này được tính dựa trên cơ sở các mẫu xung SVM và sector hiện tại mà góc đang nằm trên.
Bảng sine được tạo có tất cả 1024 x (60/360) = 171 phần tử, do vậy để truy cập bảng này, ta dùng con trỏ số nguyên 10bit. Với việc dùng biến góc để tra giá trị bảng sine, mà biến góc lại là số nguyên 16 bit không dấu từ 0x0000 0xFFFF, do vậy, để có thể tra được, ta phải dùng phép dịch 6 bit để lấy 10bit cao nhất của biến góc này để tra bảng sine. Do bảng chỉ có 171 phần tử, để tiết kiệm bộ nhớ, ta dùng lệnh ép kiểu dữ liệu unsigned char đối với biến góc được chuẩn hóa angle 1 và 2. Cuối cùng là phép scale theo biến tpwm. Để đạt được độ chính xác cao nhất, ta dùng phép nhân được ép kiểu long (số nguyên 32bit). Trong dsPIC, phép nhân này có thể được thực hiện bằng lệnh assembly như sau.
Chương 5. Thực hiện thuật toán SVM dùng vi điều khiển dsPIC30F4011
//--- asm(“MOV t1, W4”); // Nạp giá trị t1
asm(“MOV tpwm, W5”); // nạp tpwm
asm(“MOV #_Result, W0”); // Nạp địa chỉ lưu kết quả vào thanh ghi W0
asm(“MPY W4*W5, A”); // Thực hiện phép nhân số thập phân, lưu vào thanh chứa Accumulator.
asm(“SAC A, [W0]”); // Lưu kết quả nhân vào biến kết quả có địa chỉ ở W0. //--- // Khối lệnh trên tương đương với 1 lệnh C như sau
_result = t1*tpwm; //
//--- Các phép nhân trên tận dụng khả năng tính toán mạnh mẽ của khối DSP trong dsPIC. Mỗi lệnh chỉ mất 1 chu kỳ lệnh trong dsPIC. Và do vậy, để thực hiện phép nhân chỉ mất vài chu kỳ lệnh, hoàn toàn thỏa mãn điều kiện ngắt cần được tính toán nhanh để nạp giá trị vào PDC.