PDA

View Full Version : ADC với 2 chân vào analog ?


bktb
05-03-2008, 02:12 AM
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é .

namqn
05-03-2008, 04:05 AM
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é .
Chu kỳ lấy mẫu của dòng điện và điện áp có quan hệ với nhau ra sao (cứ 10 mẫu dòng điện thì có 1 mẫu điện áp, hoặc ngược lại, hay là thế nào)? Hay là bạn muốn lấy mẫu một cách ngẫu nhiên.

Thân,

bktb
05-03-2008, 11:23 AM
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 ?

namqn
05-03-2008, 05:17 PM
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 ?
Xin lỗi bạn là tôi nhầm tốc độ thành điện áp.

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,

bktb
05-03-2008, 11:14 PM
Đâ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 :

/* 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 ;

}