em vừa nhận 1 bài tâp như sau:
thiết kế 1 mạch điều khiển động cơ DC bằng thysistor(không đảo chiều). Về phần cứng em đã thiết kế được nhưng phần mêm thi lai lỗi ở phần xuất PWM.
em dùng time0 và time2 để điều khiển xung PWm xuất ra 2 chân RC1 (PWM1) và RC2 (PWM2). khi viết riêng phần nay thi no chạy ngon lanh nhưng khi ghép nó vào chương trình chính thi chỉ có PWM xuất ra ở chân RC2. em tìm hết cách mà vẫn vậy mong mn giup em với.
đây ra osilo em đo khi chạy riêng 2 PWM:
đây là osilo khi chương trình chính của em chạy:
đây là chương trinh và mach cua em:
mong mn giup em voi!!!!!!!!
thiết kế 1 mạch điều khiển động cơ DC bằng thysistor(không đảo chiều). Về phần cứng em đã thiết kế được nhưng phần mêm thi lai lỗi ở phần xuất PWM.
em dùng time0 và time2 để điều khiển xung PWm xuất ra 2 chân RC1 (PWM1) và RC2 (PWM2). khi viết riêng phần nay thi no chạy ngon lanh nhưng khi ghép nó vào chương trình chính thi chỉ có PWM xuất ra ở chân RC2. em tìm hết cách mà vẫn vậy mong mn giup em với.
đây ra osilo em đo khi chạy riêng 2 PWM:
đây là osilo khi chương trình chính của em chạy:
đây là chương trinh và mach cua em:
Code:
#include <16f877a.h> #device *=16 adc=10 #use delay(clock=4000000) #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT #include <lcd.c> #include <math.h> #use fast_io(a) #use fast_io(b) #use fast_io(c) #use fast_io(d) int a0=0,b0=0,a1=0,b1=0; float adc=0,adc1=0; int dem=0,dem2=0, value=0; #INT_TIMER0 void TIMER0_isr(void) { if(input(PIN_C0)==1){ dem++; if(dem>=value)output_high(PIN_C1); if(dem>=100){dem=0;output_low(PIN_C1);} output_low(PIN_C2); }} #INT_TIMER2 void TIMER2_isr(void) { if(input(PIN_C0)==0){ dem2++; if(dem2>=value)output_high(PIN_C2); if(dem2>=100){dem2=0;output_low(PIN_C2);} output_low(PIN_C1); }} void doc_adc_0() { set_adc_channel(0); delay_us(10); adc=read_adc(); delay_us(100); adc=(adc)/2.048; a0=(int)adc/10; b0=(int)adc-a0*10; } void doc_adc_1() { set_adc_channel(1); delay_us(10); adc1=read_adc(); adc1=(adc1)/2.048; delay_us(100); a1=(int)adc1/10; b1=(int)adc1-a1*10; } void hienthi() { lcd_init(); lcd_gotoxy(1,1);lcd_putc("dat_DC:"); lcd_gotoxy(12,1);lcd_putc(a0+0x30);lcd_putc(b0+0x30);lcd_putc("V"); lcd_gotoxy(1,2);lcd_putc("dienap_DC:"); lcd_gotoxy(12,2);lcd_putc(a1+0x30);lcd_putc(b1+0x30);lcd_putc("V"); } void main() { set_tris_a(0b00011111);//4 chan RA0-RA3 nhan du lieu tu ban phim set_tris_c(0x00); set_tris_d(0x00);//port D la port xuat du lieu ra LCD setup_adc_ports(ALL_ANALOG); setup_adc(ADC_CLOCK_INTERNAL); output_low(PIN_C1);output_low(PIN_C2);input(PIN_C0); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); set_timer0(155); // timer0 s? tràn sau m?i 100us enable_interrupts(INT_TIMER0); setup_timer_2(T2_DIV_BY_1,99,1); enable_interrupts(INT_TIMER2); enable_interrupts(GLOBAL); while(true) {value=80; // giá tri dieu khien do rong xung PWM1,PWM2 if(dem2==value) {delay_us(10); doc_adc_0(); doc_adc_1(); hienthi(); } } }
Comment