chào các bác !!! chương trình sau của em ko biết sai ở chỗ nào mà khi mô phỏng thì ko thể thay đổi độ rộng xung được.
ý em là khi vặn biến trở thì độ rộng xung cũng theo đó mà thay đổi. các phím dùng để thay đổi chiều của động cơ.
Code:
//chuong trinh:
...........
#define stop RB1
#define start RB2
#define left RB3
#define right RB4
int8 value; //khai bao bien luu tru ket qua ADC
void quay_trai(){
SET_PWM1_DUTY(0);
DELAY_MS(100);
value = read_adc();
SET_PWM2_DUTY(VALUE);
}
void quay_phai(){
set_pwm2_duty(0);
DELAY_MS(100);
value = read_adc();
set_pwm1_duty(value);
}
void stop_DC(){
set_pwm1_duty(0);
set_pwm2_duty(0);
}
//====================CHUONG TRINH CHINH========================//
void main(void)
{
//=================== KHOI TAO CHO ADC=========================//
setup_adc(adc_clock_internal); //chon xung xung clock cho bo ADC
setup_adc_ports(sAN0|VSS_VDD); //thiet lap cong AN0 la dau vao ADC
set_adc_channel(0); //chon chan AN0 cho lenh doc ADC tiep
delay_us(10);
//====================KHOI TAO CHO PWM=========================//
setup_ccp1(CCP_PWM); //cau hinh cho ccp1 lam dau ra PWM
setup_ccp2(CCP_PWM); //-------------ccp2---------------
setup_timer_2(T2_DIV_BY_1,255,1); //chon tan so dau ra cho bo PWM
set_tris_B(0x1E); //thiet lap cac chan RB1-RB4 la input (00011110b = 1Eh)
set_pwm1_duty(0); //tat dong co
set_pwm2_duty(0); //-----------
delay_ms(50);
START:
while(1){
IF(stop == 0){
stop_DC();
}
ELSE IF(left == 0){
quay_trai();
}
ELSE IF(right==0){
quay_phai();
}
}
}
Em có gửi cả sơ đồ nguyên lý bên dưới:
http://www.mediafire.com/?sharekey=0...4e75f6e8ebb871
mong các bác chỉ giùm