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.