|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
|
Ðiều Chỉnh | Xếp Bài |
|
05-03-2008, 02:12 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: Mar 2008
Bài gửi: 4
: |
ADC với 2 chân vào analog ?
Mình đang sử dụng Dspic để viết chương trình điều khiển dòng điện và tốc độ cho động cơ điện một chiều . Đê thực hiện chương trình ,tôi phải sử dụng ADC với 2 chân vào để nhận tín hiệu dòng điện và điện áp .
Chu kỳ trích mẫu của 2 tín hiệu là khác nhau ,trong khi đó trong khối ADC của DSpic nếu sử dụng Timer để xác định thời gian lấy mẫu thì chỉ cho phép ta xác định được một khoảng thời gian . Bạn nào đã sử dụng ADC với 2 kênh chuyển đổi có chu kỳ lấy mẫu khác nhau thì chỉ giúp mình nhé . |
05-03-2008, 04:05 AM | #2 | |
Trưởng lão PIC bang
|
Trích:
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 |
|
05-03-2008, 11:23 AM | #3 |
Nhập môn đệ tử
Tham gia ngày: Mar 2008
Bài gửi: 4
: |
Chu kỳ lấy mẫu của tốc độ lớn hơn của dòng điện khoảng 10 lần
Như vậy các bước thiết lập cho Module ADC, tôi phải thực hiện thế nào ?? Với 2 chân vào analog cho tín hiệu dòng điện và tốc độ. Như trong datasheet ,thanh ghi ADCON1 = 0x0040 cho phép ta sử dụng Timer để xác định khoảng thời gian lấy mẫu cho một tín hiệu ( ví dụ dòng điện ) ,thế còn chu kỳ lấy mẫu của tốc độ thì thiết lập ? |
05-03-2008, 05:17 PM | #4 | |
Trưởng lão PIC bang
|
Trích:
Tôi sẽ gợi ý cách làm cho bạn, còn bạn sẽ viết thử code. Nếu code chạy không đúng yêu cầu, bạn có thể post lên diễn đàn để nhờ hướng dẫn. Xin lỗi là tôi không giải bài tập giúp bạn. Bạn có thể giải quyết vấn đề bằng nhiều cách, tôi chỉ gợi ý 2 cách: Cách 1 - Dùng ADC như bình thường để lấy mẫu 2 kênh analog ở tốc độ của tín hiệu cần lấy mẫu nhanh hơn. Cứ 10 mẫu tốc độ thì bạn tính trung bình 10 mẫu dòng điện, và coi đó là 1 mẫu dòng điện cần lấy. Cách 2 - Dùng một timer để định thời gian lấy mẫu, cũng cho tín hiệu có tốc độ lấy mẫu cao hơn. Dùng thêm một biến đếm, chỉ lấy mẫu riêng tín hiệu tốc độ ở 9 lần đầu, lần thứ 10 thì lấy mẫu cả tốc độ lẫn dòng điện. Nếu bạn chưa theo link trong chữ ký của tôi thì bạn có thể xem qua để có thể đặt các câu hỏi một cách hiệu quả hơn. 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 |
|
05-03-2008, 11:14 PM | #5 |
Nhập môn đệ tử
Tham gia ngày: Mar 2008
Bài gửi: 4
: |
Đây là đoạn chương trình lấy mẫu mình thực hiện theo cách 2 của bạn :
Code:
/* Chuong trinh con khai bao ADC */ void Init_ADC(void) { ADPCFG = 0xFFFC ; // CHAN RB0;RB1; LA CHAN VAO ANALOG ADCON1 = 0x004C ; // TIMER 3 CHAM DUT VIEC LAY MAU VA KICH HOAT CHUYEN DOI ADCON2 = 0x0500; ADCHS = 0; // KENH 0 DOC TIN HIEU GIUA AN0 VA AVSS ADCSSL = 3; ADCON3 = 0x0002; // TAD = 2*TCY // chu ky lay mau cua dong dien TMR3 = 0; PR3 = 0x007D; // 1ms LAY MAU T3CON = 0x8010; // Cho phep bat dau dem ,pres cale 1:64 _ADIF = 0; // XOA CO NGAT _ADIE = 1; // BAT CO CHO PHEP NGAT _ADON = 1; // BAT MODULE ADC _ASAM = 1; // CHE DO LAY MAU TU DONG /* Thoi gian lay mau dong do T3 quy dinh; } /* Chuong trinh con phuc vu ngat ADC */ void _ISR _ADCInterrupt(void) { dong_dien_thuc = ADCBUF0 ; // gia tri dong dien do duoc n++ ; while (n >= 10) { n = 0; toc_do_thuc = ADCBUF1 ; // gia tri toc do do duoc } _ADIF = 0 ; } thay đổi nội dung bởi: bktb, 10-03-2008 lúc 04:08 PM. |
|
|