PDA

View Full Version : Xin hỏi về "override" của bộ PWM


doi_gio_hu
20-04-2008, 10:12 PM
Các bác cho em hỏi:
Em đang phát xung PWM cho bộ nghịch lưu cầu 3 pha để cấp cho động cơ BLDC.Em muốn hỏi về 6 bit POVDx (OVDCON<13:8>) và 6 bit POUTx (OVDCON<5:0>)của thanh ghi OVDCON trong dspic30F4011.Trong datasheet của nó viết là:6 bit POVDx xác định chân PWM nào sẽ được ưu tiên(which PIM I/O pins will be overridden),còn các chân POUTx thì xác định trạng thái của các chân PWM(determine the state of the PWM I/O pins when PWM a particular output is overridden manually). Như vậy là sao hả các bác?
Trong khi em cần chọn bảng lookup có 1 kênh H và 1 kênh L dẫn ở mỗi thời điểm(tuần tự)
trong file hướng dẫn AN957 của microchip có phần hướng dẫn khai báo bảng đó như sau:
unsigned int stateLotable[]={0x0000,0x0210,0x2004,0x0204,0x0801,0x0810,0x2001 ,0x0000};
và dùng bảng đó để quy định kênh ưu tiên của các kênh PWM phát ra bằng lệnh:
OVDCON=stateLotable[hallvalue]
với hallvalue là một biến đọc về để xác định vị trí để phát xung của em.
Như thế có phải là quy định có hai kênh được đưa xung ra trong 1 thời điểm ko?
Nếu vậy thì giả thích như thế nào với những gì được viết trong datasheet?
Em đang làm đồ án và cần gấp câu trả lời,mong các bác giúp em!

namqn
21-04-2008, 12:36 AM
Các bác cho em hỏi:
Em đang phát xung PWM cho bộ nghịch lưu cầu 3 pha để cấp cho động cơ BLDC.Em muốn hỏi về 6 bit POVDx (OVDCON<13:8>) và 6 bit POUTx (OVDCON<5:0>)của thanh ghi OVDCON trong dspic30F4011.Trong datasheet của nó viết là:6 bit POVDx xác định chân PWM nào sẽ được ưu tiên(which PIM I/O pins will be overridden),còn các chân POUTx thì xác định trạng thái của các chân PWM(determine the state of the PWM I/O pins when PWM a particular output is overridden manually). Như vậy là sao hả các bác?
Trong khi em cần chọn bảng lookup có 1 kênh H và 1 kênh L dẫn ở mỗi thời điểm(tuần tự)
trong file hướng dẫn AN957 của microchip có phần hướng dẫn khai báo bảng đó như sau:
unsigned int stateLotable[]={0x0000,0x0210,0x2004,0x0204,0x0801,0x0810,0x2001 ,0x0000};
và dùng bảng đó để quy định kênh ưu tiên của các kênh PWM phát ra bằng lệnh:
OVDCON=stateLotable[hallvalue]
với hallvalue là một biến đọc về để xác định vị trí để phát xung của em.
Như thế có phải là quy định có hai kênh được đưa xung ra trong 1 thời điểm ko?
Nếu vậy thì giả thích như thế nào với những gì được viết trong datasheet?
Em đang làm đồ án và cần gấp câu trả lời,mong các bác giúp em!
Các bit POVDxH và POVDxL sẽ chọn chân tương ứng bị overriden (bị đè trạng thái), còn các bit POUTxH và POUTxL sẽ trạng thái logic của chân khi đang bị overriden. Lấy ví dụ cụ thể, khi bạn có POVD3H = '1' và POUT3H = '1', chân PWM3H sẽ mang trạng thái của bit POUT3H, tức là = '1', chứ trạng thái của nó không còn do module PWM3 quyết định. Với POVD3H = '1' và POUT3H = '0' thì chân PWM3H sẽ bị gán trạng thái '0', bất chấp trạng thái điều khiển từ module PWM3 cho chân PWM3H.

Chú ý: phần này đã giải thích sai, do Microchip thiết kế các bit POVDxH và POVDxL có mức tích cực thấp (một cách ngược đời), hãy đọc phần đính chính trong post #4.

Như vậy, mỗi khi muốn override trạng thái của một chân PWM thì cần cập nhật 2 bit của OVDCON, một cách lý tưởng là thực hiện việc cập nhật trong 1 chu kỳ lệnh. Do đó, người ta thường dùng bảng tra để đảm bảo việc override, như ví dụ trên đã cho thấy. Bạn chú ý là trong code của họ có 2 bảng StateLoTable[], khác nhau cho 2 trường hợp điều khiển open và closed loop.

Thân,

doi_gio_hu
25-04-2008, 12:33 AM
Xem phần hướng dẫn của anh Nam,em lại thắc mắc: nếu như anh nói:khi POVD3H=1 thì nếu POUT3H=1 thì PWM3H=1 và nếu POUT3H=0 thì PWM3H=0 phải không ạ? Nếu thế thì làm sao có thể chọn được chân PWM3H băm xung theo bộ phát xung PWM trong pic của mình được nhỉ? Sao em xem ví dụ của file manual (70046E.pdf) của dspic lại thấy rằng khi POVD3H=1 và POUT3H=0 thì PWM3H được băm theo bộ phát xung PWM đấy chứ? Theo đó thì chỉ khi nào POVDxx=0 thì đầu ra PWMxx sẽ phụ thuộc vào giá trị của POUTxx.Bác xem lại ở trang 15-31 và 15-32 giúp em cái xem có đúng vậy không?(có file gửi kèm)
Cảm ơn bác !
(em vẫn chưa biết cách up file nên không biết dùng mục "tải file từ máy" có được không,nếu không được mong bác search file 70046E.pdf-em down từ diễn đàn mình xuống mà-rồi xem hộ em)

namqn
25-04-2008, 12:51 AM
Xem phần hướng dẫn của anh Nam,em lại thắc mắc: nếu như anh nói:khi POVD3H=1 thì nếu POUT3H=1 thì PWM3H=1 và nếu POUT3H=0 thì PWM3H=0 phải không ạ? Nếu thế thì làm sao có thể chọn được chân PWM3H băm xung theo bộ phát xung PWM trong pic của mình được nhỉ? Sao em xem ví dụ của file manual (70046E.pdf) của dspic lại thấy rằng khi POVD3H=1 và POUT3H=0 thì PWM3H được băm theo bộ phát xung PWM đấy chứ? Theo đó thì chỉ khi nào POVDxx=0 thì đầu ra PWMxx sẽ phụ thuộc vào giá trị của POUTxx.Bác xem lại ở trang 15-31 và 15-32 giúp em cái xem có đúng vậy không?(có file gửi kèm)
Cảm ơn bác !
(em vẫn chưa biết cách up file nên không biết dùng mục "tải file từ máy" có được không,nếu không được mong bác search file 70046E.pdf-em down từ diễn đàn mình xuống mà-rồi xem hộ em)
Bạn nói đúng rồi. Các bit POVDxx tích cực mức thấp (tôi không hiểu tại sao Microchip lại thiết kế theo kiểu ngược đời như vậy). Phần giải thích ở post trên tôi chỉ suy luận theo cách đặt tên của các bit POVDxx, và đã không chú ý rằng Microchip thiết kế phần này ngược đời như vậy.

Nói tóm lại, khi các bit POVDxx = 0 thì các ngõ ra PWMxx tương ứng sẽ mạng trạng thái của các bit POUTxx tương ứng.

Thân,

hungbkhn
25-04-2008, 02:44 PM
***OVDCON ?

--> extract from AN957 page 4:
"The OVDCON register has two 6 bit fields in it. Each of the six bit fields corresponds to an output pin. The high byte portion of the OVDCON register, determines if the corresponding
output pin is driven by a PWM signal (when set to 1) or (when set to 0) driven Active/Inactive by the corresponding bit field in the low byte portion of the
OVDCON register. This feature allows the user to have PWM signals available, but not driving, at all output stages of the pins"

ý nghĩa của OVDCON là rõ ràng và hợp lí nếu hiểu là chân " is driven by a PWM signal"

*** ???
Trong khi em cần chọn bảng lookup có 1 kênh H và 1 kênh L dẫn ở mỗi thời điểm(tuần tự)
trong file hướng dẫn AN957 của microchip có phần hướng dẫn khai báo bảng đó như sau:
unsigned int stateLotable[]={0x0000,0x0210,0x2004,0x0204,0x0801,0x0810,0x2001 ,0x0000};
và dùng bảng đó để quy định kênh ưu tiên của các kênh PWM phát ra bằng lệnh:
OVDCON=stateLotable[hallvalue]
với hallvalue là một biến đọc về để xác định vị trí để phát xung của em.
Như thế có phải là quy định có hai kênh được đưa xung ra trong 1 thời điểm ko?
Nếu vậy thì giả thích như thế nào với những gì được viết trong datasheet?
Em đang làm đồ án và cần gấp câu trả lời,mong các bác giúp em![/QUOTE]

---> bạn có thể tham khảo AN885 page 11 để xem một ví dụ và tự viết cho mình.
Với 2 cái bảng có trong ví dụ, tôi chưa hiểu ý nó đặt ra nhưng hình như nó hơi chuối thì phải, nó không theo trinh tự ở hình 1, trang 1 AN957. Vi du khi HallValue = 2 thì firing Q2, Q6 nhưng OVDCON =0b 0010 0000 0000 0100 ???
Mong trao đổi với các bạn.
Chúc cuối tuần vui vẻ.

doi_gio_hu
25-04-2008, 08:58 PM
Em xem lại và thấy cái bảng ng][ì ta lập trong file AN957 là đúng rồi đó anh ạ.
Lý do của việc lập bảng không theo tuần tự là do tín hiệu Hall thu về cũng không theo tuần tự và bảng này được lập là để phù hợp với tín hiệu Hall đó.
Tín hiệu Hall thu về của ta không như trong tài liệu AN85 cung cấp đâu.Em đã tiến hành đo thực tế và thu được bảng tín hiệu Hall như sau:011;001;101;100;110;010
Nếu đem so sánh với bảng trong file AN957 thì hoàn toàn phù hợp về thứ tự dẫn của các pha.
Em đang làm và gặp phải một vấn đề:em không vào được ngắt của ADC. Chương trình của em như sau:

#define _dsPIC30F4011_
#include "C:\Program Files\Microchip\MPLAB C30\support\h\p30F4011.h"
//Macros for Configuration Fuse Registers
_FOSC(CSW_FSCM_OFF & FRC_PLL4); //Set up for Crystal multiplied by 4x PLL
_FWDT(WDT_OFF); //Turn off the Watch-Dog Timer.
_FBORPOR(PBOR_OFF & MCLR_EN); //Enable MCLR reset pin and turn off the power-up timers
_FGS(CODE_PROT_OFF); //Disable Code Protection


void Init_ADC10(void) {
ADPCFG = 0xFFFE; //Cac chan khac la digital, chan AN0/RB0 la analog
ADCON1 = 0x0060; //Module PWM cham dut lay mau va kich hoat
//viec chuyen doi A/D
// ADCON1 = 0x0040; //Timer 3 cham dut lay mau va kich hoat
//viec chuyen doi A/D
ADCON2 = 0;
ADCHS = 0; //Kenh 0 doc tin hieu giua AN0 va AVss
ADCSSL = 0; //Khong quet cac ngo vao
ADCON3 = 0x0103; //Dung 1 TAD cho lay mau, dung clock he thong,
//TAD = 2xTcy = 250 ns
/* TMR3 = 0; //Xoa thanh ghi dem cua Timer 3
PR3 = 0x03E8; //Nguong delay cho TMR3 la khoang 1 ms
T2CON = 0x8010; //Prescale = 1:8, bat cho TMR3 chay
*/
_ADIF = 0; //Xoa co ngat ADC
_ADIE = 1; //Cho phep ngat ADC
_ADON = 1; //Bat module ADC
_ASAM = 1; //Khoi dong che do tu dong lay mau
}

//Trinh phuc vu ngat cho ADC
void _ISR _ADCInterrupt(void)
{
_LATF0=0;
_ADIF = 0;
}


int main(void)
{
TRISF = 0xFFCC; //4 chan led la 4 chan ra
TRISB = 0xFFFF; //cac chan cong B deu la cac chan vao
ADPCFGbits.PCFG3=1;
LATF=0xFFFF; //tat cac led

while(1)
{
_LATF1=0;
if (_RB3) _LATF4=0; else _LATF4=1;
}
}
//Chú thích:em dùng các chân RF0,RF1,Rf4,Rf5 để lắp và các led để test,nếu _LATRx= 0 thì led sẽ sáng.
Nếu như em vào được ngắt cho ADC thì _LATF0đã về 0 tức là led của em đã sáng,nhưng nó lại không sáng???
EM cũng không hiểu tại sao em cho _LATF1= 0 rồi mà đo vẫn được 3,2V???
Mong các bác trả lời giúp!Cảm ơn!!!!

doi_gio_hu
25-04-2008, 09:31 PM
Theo em hiểu thì hai bảng Lookup ở chương trình open Loop và closed Loop trong file AN957 chỉ là cách họ đổi van băm xung:trong bảng của chương trình Open loop, người ta cho van nhóm H băm xung còn van nhóm L thì dẫn trong toàn dải,còn trong chương trình Closed Loop thì người ta làm ngược lại,cho van nhóm L băm xung còn van nhóm H dẫn trong toàn dải. Anh xem như vậy có đúng không ạ?

namqn
25-04-2008, 10:48 PM
...
Em đang làm và gặp phải một vấn đề:em không vào được ngắt của ADC.
...
//Chú thích:em dùng các chân RF0,RF1,Rf4,Rf5 để lắp và các led để test,nếu _LATRx= 0 thì led sẽ sáng.
Nếu như em vào được ngắt cho ADC thì _LATF0đã về 0 tức là led của em đã sáng,nhưng nó lại không sáng???
EM cũng không hiểu tại sao em cho _LATF1= 0 rồi mà đo vẫn được 3,2V???
Mong các bác trả lời giúp!Cảm ơn!!!!
Chương trình của bạn dùng module MCPWM để kích hoạt chuyển đổi A/D, nhưng bạn chưa khởi tạo module MCPWM. Do đó, chương trình của bạn đã lấy mẫu tín hiệu analog, nhưng không chuyển đổi tín hiệu đó, do đó không xảy ra ngắt ADC. Bạn xem lại tutorial của tôi nhé.

Thân,

hungbkhn
26-04-2008, 10:57 PM
Em xem lại và thấy cái bảng ng][ì ta lập trong file AN957 là đúng rồi đó anh ạ.
Lý do của việc lập bảng không theo tuần tự là do tín hiệu Hall thu về cũng không theo tuần tự và bảng này được lập là để phù hợp với tín hiệu Hall đó.
Tín hiệu Hall thu về của ta không như trong tài liệu AN85 cung cấp đâu.Em đã tiến hành đo thực tế và thu được bảng tín hiệu Hall như sau:011;001;101;100;110;010
Nếu đem so sánh với bảng trong file AN957 thì hoàn toàn phù hợp về thứ tự dẫn của các pha.
-->
trong tài liệu 885, trang 5
Based on the physical position of the Hall sensors, there are two versions of output. The Hall sensors may be at 60° or 120° phase shift to each other. Based on this, the motor manufacturer defines the commutation sequence, which should be followed when controlling the motor". Bạn có thể xem trang 4 và ví dụ mà tôi nói là 120°. Cái ở 957 là 60° và ko cần đo cũng biết chắc chắn đầu ra là vậy.
Tuy nhiên tôi cho là là 2 cái bảng StateLoTable[] trong 2 trường hợp điều khiển của an957 là không hợp lí như tôi đã đưa ra. Bạn đã chạy thực tế thì kết quả thế nào ?

hungbkhn
26-04-2008, 11:04 PM
Theo em hiểu thì hai bảng Lookup ở chương trình open Loop và closed Loop trong file AN957 chỉ là cách họ đổi van băm xung:trong bảng của chương trình Open loop, người ta cho van nhóm H băm xung còn van nhóm L thì dẫn trong toàn dải,còn trong chương trình Closed Loop thì người ta làm ngược lại,cho van nhóm L băm xung còn van nhóm H dẫn trong toàn dải. Anh xem như vậy có đúng không ạ?

---> đúng như bạn nói đoạn này tuy nhiên thứ tự mở van cua hai bảng là không đúng ???
còn việc đổi ngược cặp "băm xung-dẫn trong toàn dải" trong vòng lặp đóng so với vòng lặp mở tôi không thấy gì khác nhau. Không biết thực tế có gì khác không :-).

doi_gio_hu
11-05-2008, 02:55 PM
Bảng lookup trong AN957 em post lên nh] vậy đúng rồi anh Hùng ạ!
Thứ tự chuyển mạch anh bảo là chưa đúng là chưa đúng ở điểm nào ạ?
Này nhé: bảng các giá trị của Hall thực tế đưa về em đã post ở trên rồi,em tự đo đó.
Anh quy chuẩn ra hệ 10 rồi lắp vào các phần tử của bảng lookup sẽ thấy đúng mà???
Tuy nhiên,cần lưu ý rằng trong bảng đó,2 trạng thái nằm sat nhau trong ảng không phải là hai trạng thái liên tiếp nhau trong chế độ chuyển mạch mà các trạng thái kế tiếp nhau trong chế độ chuyển mạch được quy định bởi giá trị của các cảm biến Hall.
Em đã từng chạy thử vòng hở và dùng đúng bảng này
kết quả là chạy được,không bị chập đâu.
Anh coi lại xem nhé!