em cảm ơm anh namqn,em cũng đã đọc kỹ các hướng dẫn trong CCS và cũng đẫ thay đổi các option trong setup_power_pwm_pins(),mà vẫn không được anh ạ. anh xem đoạn code em viết có sai không nhé
Code:
#include <18F4431.h>
#include <DEF_18F4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, BRGH1OK)
int16 counter=0;
int16 soxung=0;
int16 period;
int1 BLINK=1;
int16 ch=16383;
#int_EXT
EXT_isr()
{
output_bit(PIN_D7, BLINK); //đo xung trên chân D7 xem đã vào ngắt chưa
counter++;
BLINK = !BLINK;
output_bit(PIN_D7, BLINK);
}
#INT_TIMER1
void ngat_timer() {
int i;
set_timer1(0xEC78); // sets timer to interrupt in 1ms
soxung=counter;
counter = 0; // reset counter
}
void main() {
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); // setup interrupts
enable_interrupts(INT_TIMER1);
enable_interrupts(global);
enable_interrupts(int_ext);
ext_int_edge(H_to_L);
enable_interrupts(GLOBAL);
period = 4095; //Frequency = Fosc / (4 * (period+1) * postscale)
setup_power_pwm_pins (PWM_ODD_ON, PWM_ODD_ON, PWM_OFF, PWM_OFF);
setup_power_pwm (PWM_CLOCK_DIV_4|PWM_FREE_RUN, 1, 0, period, 0, 1, 0); //add dead time
while (true)
{
ch = getc();
set_power_pwm0_duty(ch);
set_power_pwm2_duty(ch);
putc(ch);
}
}
khi em chưa truyền tham số xuống cho bộ PWM từ máy tính ,mà động cơ đã chạy luôn rồi anh ạ .khi em truyền các tham số khác nhau thì chip chỉ out ra một giá trị PWM duy nhất,em chưa biết lỗi của nó anh ạ. Em dùng bộ PWM0 và PWM1 để điều khiển 2 động cơ ,chương trình em viết vẫn còn thiếu nhiều và em chưa sử dụng bộ QEI của nó,em sẽ viết tiếp và anh kiểm tra hộ em nhé