View Single Post
Old 17-12-2008, 12:03 PM   #14
han_nang_008
Đệ tử 1 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 19
:
bác namqn giúp em thêm cái này nữa, em viết đoặn chtr điều khiển tốc độ động cơ dùng triết áp, điểm đầu và chuối mắc vào 0 và 5V, điểm giữa đưa vào AN0 của 30F4011, dùng L298,
với động cơ chưa có tải, và em để PWM là kich chuyển đổi ADC thì em chỉnh chiết áp thì tốc độ thay đổi rất trươn ko có vấn đề j cả, nhung em cho thêm cái tải là em dùng dây cô doa nối sang 1 động cơ khác thôi, là tụ nhiên 2 chạy rất giật, điều chỉnh tốc độ cũng bị giật mà để em 1 vị trí tốc độ thì nó chạy dc vài vông lại giật 1 cái, ở dải tốc độ thấp cả 2 con đều ko chay, em có chuyển sang dùng timer3 kích chuyển đổi thì có vẻ chạy ko bị giật hơn và ở giải tốc đọ thấp vẫn điều khiển dc, nhung chỉ cần hơi vặn nhanh triết áp 1 tí là vdk bị đơ và dc đứng yên. anh xem hộ em vơi
đây là code của em
Code:
------------------------------------------------------------------------------*/
#include <p30f4011.h>
#include <pwm.h>
#include <adc10.h>

	_FOSC(CSW_FSCM_OFF & FRC_PLL4);
	_FWDT(WDT_OFF);
	_FBORPOR(PBOR_OFF & MCLR_EN);
	_FGS(CODE_PROT_OFF);

//------------------------------------------------------------------------------
//Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh)
#define	PWM_PORT	PORTE		//Cac tin hieu PWM nam o cong E
#define	PWM_TRIS	TRISE		//Thanh ghi 3 trang thai cho cac tin hieu PWM
#define	PWM_LAT		LATE		//Thanh ghi chot cac tin hieu PWM

//Cac prototype cho cac chuong trinh con
void Init_PORTS(void);
void INT_MCPWM(void);
void INT_ADC10BIT(void);

//Chuong trinh Khoi tao Module MCPWM
//------------------------------------------------------------------------------
void INT_MCPWM(void)
{
	unsigned int config1, config2, config3;
	unsigned int period, sptime;

	
	period = 368; 					// Oche do Free run PTPER = fcy/fpwm/PTMRprescaler - 1 
									// fcy = 7.37 Mhz, Fpwm = 20 KHz, PTMRprescaler = 1 ==> PTPER = 
	sptime = 0;						//Thiet lap thanh ghi SEVTCMP cho viec tao ngat su kien dac biet(neu can)
		
	config1 = 	PWM_EN & 			//PWM Module Enable
				PWM_IDLE_STOP&		//Idle Mode Operation
				PWM_OP_SCALE1& 		//Output post scaler 1:1
				PWM_IPCLK_SCALE1& 	//input prescaler 1:1
				PWM_MOD_FREE; 		//mode of free run
	
	config2 = 	PWM_MOD1_IND&		//Dung cac chan PWM L&H 1 cach doc lap
				PWM_MOD2_IND&
				PWM_MOD3_IND&			
				PWM_PDIS1H&			//Chi dung chuc nang PWM voi chan PWM1L
				PWM_PDIS2H&
				PWM_PDIS3H&
				PWM_PEN1L&
				PWM_PDIS2L&
				PWM_PDIS3L ;
	
	config3 = 	PWM_SEVOPS16& 		//Special event post scaler
				PWM_OSYNC_TCY& 		//output Override synchronization
				PWM_UEN; 			//PWM update enable/disable
	
	OpenMCPWM(period, sptime, config1, config2, config3);

	PDC1=0;	
	}

//Chuong trinh Khoi tao Module ADC 10bit
//------------------------------------------------------------------------------
void INT_ADC10BIT(void)
{
	unsigned int config1, config2, config3, configport, configscan;
	unsigned int channel;
	
	
	channel =  ADC_CH0_POS_SAMPLEA_AN0 ;     // A/D Chan 0 pos i/p sel for SAMPLE A is AN0
	SetChanADC10(channel);
	
	config1 = 	ADC_MODULE_ON&
				ADC_IDLE_STOP&
				ADC_FORMAT_INTG&			//dinh dang ket qua là canh phai (right justify)
				ADC_CLK_MPWM&				//Module PWM cham dut lay mau va kich hoat
				ADC_SAMPLE_INDIVIDUAL &				
				ADC_AUTO_SAMPLING_OFF&		//bat dau lay mau khi SAMP =1
				ADC_SAMP_ON;				//Khoi dong che do tu dong lay mau
	
	config2 = 	ADC_VREF_AVDD_AVSS&			//lay Vdd va Vss lam dien ap tham chieu
				ADC_SCAN_OFF&
				ADC_CONVERT_CH0&
				ADC_SAMPLES_PER_INT_1&		//co bao AIDF va bit DONE duoc set sau 1 lan lay mau (so lan lay mau tu 1 den 16 do bit  SMPI <3:0>
				ADC_ALT_BUF_OFF&
				ADC_ALT_INPUT_OFF;
			
	config3 = 	ADC_SAMPLE_TIME_1&			//Thoi gian lay mau bang 1 Tad
				ADC_CONV_CLK_SYSTEM&
				ADC_CONV_CLK_2Tcy;		
	
	configport = ENABLE_AN0_ANA;			//Enable chân AN0 la chan analog
	
	configscan = SCAN_NONE;		
	
	OpenADC10(config1, config2, config3, configport, configscan);
	_ADIF = 0;								//Xoa co ngat ADC
	_ADIE = 1;								//Cho phep ngat ADC
	_ADON = 1;								//Bat module ADC
	
}
//Trinh phuc vu ngat cho ADC
//------------------------------------------------------------------------------
void _ISR _ADCInterrupt(void)
{	
	PDC1 = ADCBUF0;		//Cap nhat cac thanh ghi dem chu ky nhiem vu	
	_ADIF = 0;
}

//------------------------------------------------------------------------------
//Chuong trinh chinh
int main(void) {
	Init_PORTS();			//Khoi tao cac cong I/O
	INT_MCPWM();			//Khoi tao module PWM
	INT_ADC10BIT();			//Khoi tao module ADC
	while (1) Nop();
}

//Chuong trinh con khoi tao cac cong I/O, de xuat cac tin hieu PWM, va doc tin
//hieu dieu chinh cua bien tro tai AN0
void Init_PORTS(void) {
	PWM_LAT = 0;			//Xoa thanh ghi chot cac tin hieu PWM
	PWM_TRIS = 0xFFC0;		//Cac tin hieu PWM nam tai RE0..RE5
	TRISB = 0x0071;			//Chan RB6 la ngo vao analog AN6, cac chan khac
							//la ngo ra
	_LATE2 = 0;
}
và em đang mong anh chỉ bảo cho em cách dùng nhiều hơn 1 chân analog như ở bài trc em đã hỏi.
han_nang_008 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn