View Single Post
Old 07-04-2009, 11:03 PM   #7
mtuankct
Đệ tử 6 túi
 
Tham gia ngày: Apr 2006
Bài gửi: 125
:
Em đã làm được cái động cơ này quay với con IR2103
con IR2110 thì chỉ khác con IR2103 là nó cả 2 đầu vào HI và LI đề là đầu vào tích cực cao, nó cũng không có bộ tạo deadtime bên trong, không có phần logic chống ngắt mạch do mở 2 van cùng lúc
Em post đoạn code config pwm lên đây các bác xem có đúng không hộ em
Code:
	
	_PTSIDL = 0; 	// pwm time base run in idle mode
	_PTOPS = 0;		// pwm time base postscale select bit 1:1
	_PTCKPS = 0;	// pwm time base input clock prescale select bit
											// 11 -> 1:64
											// 10 -> 1:16
											// 01 -> 1:4
											// 00 -> 1:1
	// PTMR config (PWM time base register)

	// PTPER config (PWM time base priod register)
	PTPER = (Fcy/Fpwm - 1);
	// SEVTCMP config (special event compare register)
	SEVTCMP = PTPER;
	// PWMCON1 config
	_PMOD3 = 0;		// PMODx = 1 pwm I/0 pin pair is in the independent ouput mode
					// PMODx = 0 pwm I/0 pin pair is in the complementary output mode
	_PMOD2 = 0;
	_PMOD1 = 0;
	
	_PEN3H = 1;		// =1 to enable for pwm output
	_PEN3L = 1;
	_PEN2H = 1;
	_PEN2L = 1;
	_PEN1H = 1;
	_PEN1L = 1;
	// PWMCON2 config
	
	// DTCON1 config (dead time control register)
	_DTAPS = 3;		// Dead time unit A prescale select bit
					// = 3 -> 1:8
					// = 2 -> 1:4
					// = 1 -> 1:2
					// = 0 -> 1:1
	_DTA = 63;		// Unsigned 6 bit Dead time value bits for dead time unit A
	// FLTACON config (Fault A control register)
	// FLTBCON config
	// OVDCON config (Override control register)
	OVDCON = 0x0000;	// all pwm pin are control by the value in the corresponding POUTxx bit
					// POUTxx = 0	
	PDC1 =(unsigned int) (PTPER *0.4);
	PDC2 =(unsigned int) (PTPER *0.4);
	PDC3 =(unsigned int) (PTPER *0.4);
	PWMCON2 = 0x0F00;		//Postscale = 1:16

	PTCON = 0x8000;			//Kich hoat module PWM
	Delay_ms(10);
	SD = 0;          // day la chan shutdown của IR
	Delay_ms(1);
	_POUT1L = 1;// bat may chan Lowside để nạp điện đầy cho tụ, sẵn sàng chạy
	_POUT2L = 1;
	_POUT3L = 1;
còn đây là chương trình em dùng để test cái động cơ nó quay
Code:
void BLDC_test_forward(void){

	if((HallA == 0) & (HallB == 1) & (HallC == 1)){ // CASE 1
		OVDCON = (1 << BL) + (1 << CH_P);	// BL & CH
		return;
	}
	if((HallA == 0) & (HallB == 0) & (HallC == 1)){ // CASE 2
		OVDCON = (1 << BL) + (1 << AH_P);	// BL & AH
		return;
	}
	if((HallA == 1) & (HallB == 0) & (HallC == 1)){ // CASE 3
		OVDCON = (1 << CL) + (1 << AH_P);	// CL & AH
		return;
	}
	if((HallA == 1) & (HallB == 0) & (HallC == 0)){ // CASE 4
		OVDCON = (1 << CL) + (1 << BH_P);	// CL & BH
		return;
	}
	if((HallA == 1) & (HallB == 1) & (HallC == 0)){ // CASE 5
		OVDCON = (1 << AL) + (1 << BH_P);	// AL & BH
		return;
	}
	if((HallA == 0) & (HallB == 1) & (HallC == 0)){ // CASE 6
		OVDCON = (1 << AL) + (1 << CH_P);	// AL &CH
		return;
	}
}
em xin giải thích một tẹo ở đây các hằng số được định nghĩa như sau:
Code:
#define AL 0
#define AH 1
#define BL 2
#define BH 3
#define CL 4
#define CH 5

#define AL_P 8
#define AH_P 9
#define BL_P 10
#define BH_P 11
#define CL_P 12
#define CH_P 13
có nghĩa là nếu muốn pha A dẫn phía L và pha C dẫn phía H thì em sẽ ghi giá trị 1 vào POUT1L và đặt 3H ở chế độ xung pwm
mtuankct vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn