PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 10-04-2010, 10:58 AM   #1
Hard
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Huế
Bài gửi: 26
:
Send a message via Yahoo to Hard
Xử lý nhiễu này thế nào?

Hi,
Mình vừa viết thử một đoạn code để điều khiển bipolar stepper motor sử dụng chip 18F4550. Chương trình chạy rất tốt nếu như được nối với máy tính ở bất kỳ vị trí nào và đường tín hiệu nào. Chỉ cần có đụng một chút gì vào máy tính thì nó chạy, cách ly hoàn toàn với máy tính thì chương trình đứng. Nếu muốn chương trình chạy khi cách ly với máy tính thì phải lấy tay đụng vào một vị trí nào đó trên mạch hoặc cầm ngoài vỏ bọc của dây cấp nguồn (từ biến áp), nếu bỏ tay ra thì chương trình đứng. Mình đã thử thay 3 bộ nguồn khác nhau kết quả vẫn không đổi.
Chỗ mình làm kế bên cột anten của mobifone hay viettel gì đó, không biết có ảnh hưởng gì không?
Anh em có ai gặp tình trạng như mình và có cách khắc phục thì xin chia sẽ cho mình nhé, xin cảm ơn.
Thân ái.
Hard vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-04-2010, 05:49 PM   #2
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
thông tin bạn đưa ra quá it để tôi có thể giúp bạn. nếu có thể bạn hãy đưa mạch của mình lên để mọi người có thể dễ dàng giúp bạn hơn.
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-04-2010, 05:50 PM   #3
nhatson.elec
Đệ tử 4 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 84
:
tách nguồn của pic với nguồn motor ra là ổn ah, kích mở công sất cách ly luôn đi ah

b.r
nhatson.elec vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-04-2010, 09:39 AM   #4
Hard
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Huế
Bài gửi: 26
:
Send a message via Yahoo to Hard
Thêm cái ảnh cho các bạn dễ hình dung
Hình Kèm Theo
File Type: jpg DSCF0718.JPG (710.0 KB, 8 lần tải)
Hard vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-04-2010, 04:54 PM   #5
Hard
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Huế
Bài gửi: 26
:
Send a message via Yahoo to Hard
Hi,
Mình đã thử loại bỏ nhiễu từ testboard bằng cách chạy trên testkit của mình. Mạch chạy ổn định hơn cho dù cách ly với PC tuy nhiên thỉnh thoảng chạy không chính xác. Cái led mình cho chớp theo chu kỳ 2s thỉnh thoảng bị khựng lại trong khi động cơ vẫn quay bình thường. Có nghĩa là bị lỗi cục bộ chổ nào chăng? task chớp led và chạy động cơ đều ngang mức ưu tiên với nhau, tại sao một task lại bị bỏ qua?
Vẫn là câu hỏi đầu tiên, tại sao khi tiếp xúc với máy tính thì nhiễu do testboard (điện dung ký sinh) bị loại bỏ?
Thân ái.
Nhân tiện mình post luôn cái ảnh khi dùng testkit.
Hình Kèm Theo
File Type: jpg DSCF0737.JPG (666.7 KB, 4 lần tải)
Hard vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-04-2010, 09:20 AM   #6
Hard
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Huế
Bài gửi: 26
:
Send a message via Yahoo to Hard
Hi,
Thực ra stepper nhỏ xíu chẳng hút dòng bao nhiêu nên chẳng cần cách ly nguồn làm gì, nếu nó bị nhiễu thì đã bị khi có tiếp xúc với máy tính rồi. Nhiễu ở đây nó kiểu như làm chậm clock của CPU nên chương trình chạy rất chậm, thỉnh thoảng bị khựng lại (test qua 1 đèn nháy dễ dàng nhận thấy điều này). Nếu cách ly với máy tính mà đưa tay đến gần PIC thì nó lại hoạt động bình thường, nếu bỏ tay ra xa thì lại bị chậm clock lại. Mạch điện thì quá đơn giản nên chẳng cần post lên làm gì, những cách xử lý nhiễu nguồn cơ bản như tụ lọc 100nF tại chân nguồn đều đã được áp dụng.
Thân ái.
Hard vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-04-2010, 09:53 AM   #7
ngocthanh07
Đệ tử 2 túi
 
Tham gia ngày: Mar 2007
Bài gửi: 44
:
Đo thử và kiểm tra nguồn của biến thế và nguồn ra tại PIC,

Ngắt những gì dính liếu đến cái motor ra để cô lập lại hiện tượng,
Nếu vẫn bị vụ chậm clock gì đó thì lỗi ko phải tại cái motor,
Tiếp tục thay hai cái tụ cho thạch anh, tốt nhất là hàn hiếc gì đó cho dính chắc ăn, thạch anh có 2-3 ngàn cục mà chắc ko sao đâu, nếu vẫn sợ nhiễu clock gì đó mua luôn con thạch anh bốn chân cấp nguồn nữa là chắc ăn,
Còn con PIC thì khỏi thay rồi.

Nhưng qua tất cả những việc trên tớ nghĩ bạn chỉ cần lấy mạch ra hàn dây nhợ đàng hoàn là ko bị gì nữa đâu, cấm cấm này dễ bị ảnh hưởng này nọ lắm.
ngocthanh07 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-04-2010, 10:58 AM   #8
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi Hard View Post
Hi,
Thực ra stepper nhỏ xíu chẳng hút dòng bao nhiêu nên chẳng cần cách ly nguồn làm gì, nếu nó bị nhiễu thì đã bị khi có tiếp xúc với máy tính rồi. Nhiễu ở đây nó kiểu như làm chậm clock của CPU nên chương trình chạy rất chậm, thỉnh thoảng bị khựng lại (test qua 1 đèn nháy dễ dàng nhận thấy điều này). Nếu cách ly với máy tính mà đưa tay đến gần PIC thì nó lại hoạt động bình thường, nếu bỏ tay ra xa thì lại bị chậm clock lại. Mạch điện thì quá đơn giản nên chẳng cần post lên làm gì, những cách xử lý nhiễu nguồn cơ bản như tụ lọc 100nF tại chân nguồn đều đã được áp dụng.
Thân ái.
Test board tại VN có chất lượng không ổn định. Các mạch có xung clock cỡ 10 MHz trở lên không nên thử trên test board (có thể vẫn chạy chứ không nhất thiết là sẽ không chạy). Với loại mạch mà bạn đang thử, từ lâu rồi tôi không tin tưởng vào test board nữa.

Bạn nên xem lại mạch nguồn, reset, và mạch dao động. Hiện tượng đưa tay đến gần làm cho PIC chạy khác đi đã được đề cập nhiều lần trên diễn đàn này, và nhiều diễn đàn khác.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-04-2010, 10:02 AM   #9
Hard
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Huế
Bài gửi: 26
:
Send a message via Yahoo to Hard
Mã nguồn:
[CODE]
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CP UDIV1,VREGEN
#use delay(clock=48000000)
#use fast_io(all)
#priority rtcc, rb
#byte FocusStepper = 0x0F81 // Port B
#byte TwoWiresStepper = 0x0F84 // Port E
// Control data for Wave Drive (1 phase on) mode
//BYTE const WaveDrive[4] = {0x01, 0x02, 0x04, 0x08};

// Control data for Full Step Drive (2 phases on) mode
//BYTE const FullStepDrive[4] = {0x03, 0x06, 0x0C, 0x09};

// Control data for Full Step Drive using 2 wire
//BYTE const FullSetpDrive2Wire[4] = {0x01, 0x03, 0x02, 0x00};

// Control data for Half Step Drive (1 & 2 phases on) mode
//BYTE const HalfStepDrive[8] = {0x01, 0x03, 0x02, 0x06, 0x04, 0x0C, 0x08, 0x09};

// Two wires drive
BYTE const TwoWiresDrive[4] = {0x00, 0x01, 0x03, 0x02};
// Control data for Bipolar stepper
BYTE const BipolarDrive[4] = {0x0A, 0x06, 0x05, 0x09};
#define COUNTER_MAX 1000
#define FOCUS_DELAY_TIMEOUT 20
#define TWO_WIRES_DELAY_TIMEOUT 10

volatile int1 FocusRun, FocusDirection;
volatile int1 TwoWiresRun, TwoWiresDirection;

#int_rtcc
void rtcc_isr(void)
{
unsigned int16 Counter;
static unsigned char focus_step, two_wires_step;
static unsigned char focus_delay, two_wires_delay;

set_rtcc(-2500); // reset interval 1ms
if(Counter++ >= COUNTER_MAX)
{
Counter = 0;
output_toggle(PIN_A0);
}
if(FocusRun)
{
if(focus_delay++ >= FOCUS_DELAY_TIMEOUT)
{
focus_delay = 0;
focus_step %= 4;
FocusStepper = BipolarDrive[focus_step];
if(FocusDirection)
focus_step++;
else
focus_step--;
}
}
else
FocusStepper |= 0x0F;
if(TwoWiresRun)
{
if(two_wires_delay++ >= TWO_WIRES_DELAY_TIMEOUT)
{
two_wires_delay = 0;
two_wires_step %= 4;
TwoWiresStepper = TwoWiresDrive[two_wires_step];
if(TwoWiresDirection)
two_wires_step++;
else
two_wires_step--;
}
}
}
#int_rb
void port_b_isr(void)
{
static unsigned char last_b;
unsigned char changes;

changes = last_b ^ input_b();
last_b = input_b();

if (bit_test(changes, 4)&& !bit_test(last_b, 4))
{
//b4 went low
FocusDirection = !FocusDirection;
TwoWiresDirection = !TwoWiresDirection;
}

if (bit_test(changes, 5)&& !bit_test (last_b, 5))
{
//b5 went low
FocusRun = !FocusRun;
TwoWiresRun = !TwoWiresRun;
}
delay_ms (20); //debounce
}
void main(void)
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
set_rtcc(-2500); // interval 1ms
enable_interrupts(INT_RTCC);
enable_interrupts(INT_RB);
enable_interrupts(GLOBAL);
set_tris_a(0x00);
set_tris_b(0xF0); // pin 0:3 out, pin 4:7 in
set_tris_c(0x00);
set_tris_d(0x00);
set_tris_e(0x00);
FocusRun = 1;
FocusDirection = 0;
TwoWiresRun = 0;
TwoWiresDirection = 0;
while(1)
{
}
}
[\CODE]
Hard vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-04-2010, 10:06 AM   #10
Hard
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Huế
Bài gửi: 26
:
Send a message via Yahoo to Hard
Tại sao việc đụng chạm tới máy tính nó có thể xử hết những cái tạo ra nhiễu trên? Nếu giải thích được thì đó chính là nguyên nhân. Nhưng mà mình nghĩ mãi không hiểu được.
Hard vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-04-2010, 11:57 AM   #11
Hard
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Huế
Bài gửi: 26
:
Send a message via Yahoo to Hard
Code trên có nhầm một chỗ set Timer0 interval, giá trị chính xác để được tick 1ms là -6000 vì clock lúc này là 48MHz (qua PLL) không còn là 20MHz. Tuy nhiên vấn đề nhiễu không liên quan, tình trạng vẫn như cũ.
Hard vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 12-04-2010, 05:48 PM   #12
hopeman
Đệ tử 6 túi
 
hopeman's Avatar
 
Tham gia ngày: Jul 2007
Bài gửi: 146
:
việc bạn không cách ly đã là một vấn đề khá lớn để gây ra các bất ổn trên mạch của bạn. bạn cung nên xem lại phần reset mạch vì phần này cũng có thể dẫn tới việc chip chạy chập chờn
__________________
mạch nạp - kit phát triển - linh kiện điện tử www.PNLabvn.com
hopeman vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-05-2010, 12:53 AM   #13
Hard
Đệ tử 2 túi
 
Tham gia ngày: May 2006
Nơi Cư Ngụ: Huế
Bài gửi: 26
:
Send a message via Yahoo to Hard
Trích:
Nguyên văn bởi hopeman View Post
việc bạn không cách ly đã là một vấn đề khá lớn để gây ra các bất ổn trên mạch của bạn. bạn cung nên xem lại phần reset mạch vì phần này cũng có thể dẫn tới việc chip chạy chập chờn
Có lẽ nào chân Reset lại lợi hại đến thế? Chân Reset của PIC tui lại nối với Vpp của ICD2 nên nó chỉ có thêm 1 điện trở 10K nối với Vcc, cái tụ 10uF đã bị loại bỏ (vì có cái tụ này thì không program chip được).
Hard vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-05-2010, 08:59 PM   #14
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi Hard View Post
Có lẽ nào chân Reset lại lợi hại đến thế? Chân Reset của PIC tui lại nối với Vpp của ICD2 nên nó chỉ có thêm 1 điện trở 10K nối với Vcc, cái tụ 10uF đã bị loại bỏ (vì có cái tụ này thì không program chip được).
Bạn nên kiếm cái oscilloscope đo để coi lỗi do phần nào!

Trích:
Nguyên văn bởi namqn View Post
Bạn nên xem lại mạch nguồn, reset, và mạch dao động. Hiện tượng đưa tay đến gần làm cho PIC chạy khác đi đã được đề cập nhiều lần trên diễn đàn này, và nhiều diễn đàn khác.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-05-2010, 09:34 PM   #15
herrtien
Banned
 
Tham gia ngày: Nov 2006
Bài gửi: 107
:
Có 2 con tụ nối với 2 chân của thạch anh có giá thị từ 20p-33p, bạn nên sử dụng tụ 33p, nó sẽ giúp mạch của bạn chạy ổn định hơn, tuy nhiên khởi động thì chậm hơn khi sử dụng tụ có giá nhỏ hơn.
herrtien vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 06:10 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam