Giúp em với, không biết code bị gì !
Mong các anh giúp em tìm nguyên nhân nổ mạch, không hiểu làm sao khi đổ code vào xe dò line, sau khi chạy được một đoạn thì xịt khói mạch sensor (adc tín hiệu line về vxl), chết con Pic, mạch công suất đứt cầu chì và hỏng 1 bên mạch công suất. Em đã kiểm tra phần đi dây, cách điện giữa các mạch, không thấy vấn đề gì. Hôm trước đã chạy pwm thì chạy bình thường ko có vấn đề, em dã test bộ dò line và mạch adc hoạt động bình thường, khi làm chương trình khác để dò line thì bị cháy..
Xe này em sử dụng các module :
- mạch line 8 led
- mach adc
- mach pic16f877a, 4Mhz
- mach công suất 2 động cơ
Em cảm ơn.
__________________________________________________ ______________________
#include <16f877a.h>
#include <math.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES WRT //Program Memory Write Protected
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
#define led pin_b0
#define kep 0
#define nha 1
#define dir1 PIN_C0
#define dir2 PIN_C3
#define en1 PIN_C1
#define en2 PIN_C2
//************************************************** ********************************
void main()
{
set_tris_D(0xFF);
unsigned char vitri;
setup_ccp1(ccp_pwm);
setup_ccp2(ccp_pwm);
setup_timer_2(t2_div_by_16,250,1);
set_pwm1_duty(255);
set_pwm2_duty(255);
// Toc do max tocdo = 0
// Toc do min tocdo = 255
// Dong co chay ccp_pwm = 0
// Huong Dco 1 tien la dir1 = 0
// Huong Dco 2 tien la dir2 = 0
// Dong co trai la pwm2
// Dong co phai la pwm1
while(1)
{
switch(input_d())
{
case 0b00000000: // ngoai san
set_pwm1_duty(255);
set_pwm2_duty(255);
delay_ms(500);
break;
case 0b00011000: // trung tam
output_bit(dir1,0);
output_bit(dir2,0);
set_pwm2_duty(200);
set_pwm1_duty(200);
vitri = 0;
break;
//---------------------------------------------------------------
case 0b00111000: // lech trai 1
case 0b00110000:
output_bit(dir1,0);
output_bit(dir2,0);
set_pwm1_duty(205);
set_pwm2_duty(200);
vitri = 1;
break;
case 0b01110000: // lech trai 2
case 0b01100000:
output_bit(dir1,0);
output_bit(dir2,0);
set_pwm1_duty(210);
set_pwm2_duty(200);
vitri = 2;
break;
case 0b11100000: // lech trai 3
case 0b11000000:
output_bit(dir1,0);
output_bit(dir2,0);
set_pwm1_duty(200);
set_pwm2_duty(215);
vitri = 3;
break;
case 0b10000000: // lech trai 4
output_bit(dir1,0);
output_bit(dir2,0);
set_pwm1_duty(195);
set_pwm2_duty(215);
vitri = 4;
break;
//---------------------------------------------------------------
case 0b00011100: // lech phai 1
case 0b00001100:
output_bit(dir1,0);
output_bit(dir2,0);
set_pwm1_duty(200);
set_pwm2_duty(205);
vitri = -1;
break;
case 0b00001110: // lech phai 2
case 0b00000110:
output_bit(dir1,0);
output_bit(dir2,0);
set_pwm1_duty(200);
set_pwm2_duty(210);
vitri = -2;
break;
case 0b00000111: // lech phai 3
case 0b00000011:
output_bit(dir1,0);
output_bit(dir2,0);
set_pwm1_duty(215);
set_pwm2_duty(200);
vitri = -3;
break;
case 0b00000001: // lech phai 4
output_bit(dir1,0);
output_bit(dir2,0);
set_pwm1_duty(215);
set_pwm2_duty(195);
vitri = -4;
break;
default:
if(vitri > 2)
{
output_bit(dir1,1);
output_bit(dir2,0);
set_pwm1_duty(200);
set_pwm2_duty(200);
}
if(vitri < -2)
{
output_bit(dir1,0);
output_bit(dir2,1);
set_pwm1_duty(200);
set_pwm2_duty(200);
}
break;
}
}
}
//************************************************** ********************************
|