![]() |
|
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 |
![]() |
#1 |
Đệ tử 2 túi
Tham gia ngày: Jan 2007
Bài gửi: 34
: |
Cách sử dụng nhiều ADC! giúp em
![]() Em đang lập trình dsp30F4011 để thực hiện mạch này. Hiện em đang có một số vướng mắc này mong các anh chỉ giáo ạ: - Em dung 3 cái ADC: + AN2 để phản hồi điện áp ra (tần số trích mẫu 10Hz), + AN0 để phản hồi điện áp sau chỉnh lưu Vg (và tính điện áp trung bình của Vg), + AN1 để phản hồi dòng điện (tần số 2kHz). Hiện em chưa biết phải sử dụng khối ADC theo cách nào để có thể thực hiện lấy mãu theo các tần số khác nhau như vậy. - Em cũng chưa biết cách lập trình để có thể dùng 3 ADC với 3 nhiệm vụ khác nhau như trên, các anh có thể cho em một vài ví dụ lập trình sử dụng nhiều ADC được không, có sử dụng ngắt ADC, chế độ kích hoạt chuyển đổi bằng timer ấy ạ Em cảm ơn nhìu |
![]() |
![]() |
![]() |
#2 | |
Đệ tử 5 túi
Tham gia ngày: Sep 2007
Bài gửi: 94
: |
Trích:
http://www.microchip.com/stellent/id...pnote=en536650 Bạn có thể tham khảo thêm ở mục 10-bit ADC trong cuốn dsPic30F_reference_manual. |
|
![]() |
![]() |
![]() |
#3 |
Đệ tử 2 túi
Tham gia ngày: Jan 2007
Bài gửi: 34
: |
Em có thâm khảo cái code mẫu của nó rồi, tuy nhiên nó viết bằng ASM, mà em mới làm quen với con này chưa có điều kiện tìm hiểu vè asm cho dòng này, với lại em quen lập trình bằng C rùi, nên em muốn thuật toán lập trình dùng C. Anh làm rùi thì chỉ giáo em với. Có ví dụ về xử Lý ADC kiểu này thì cho em càng tốt ạ
|
![]() |
![]() |
![]() |
#4 |
Đệ tử 2 túi
Tham gia ngày: Aug 2008
Bài gửi: 40
: |
Đoạn code và hình vẽ này có thể giúp gì được bạn không?
Code:
#include <16F877a.h> #include <DEF_16F877a.h> #fuses HS,NOWDT,NOPROTECT,NOLVP #device 16F877*=16 ADC=8 #use delay(clock=4000000) #use rs232(baud=19200,parity=n,xmit=pin_C6,rcv=pin_C7) Int8 adc; main() { setup_adc(adc_clock_internal); setup_adc_ports(AN0_AN1_AN3); while(true) { set_adc_channel(0); adc=read_adc(adc_start_and_read); delay_us(10); output_B(adc); set_adc_channel(1); adc=read_adc(adc_start_and_read); delay_us(10); output_D(adc); } } |
![]() |
![]() |
![]() |
#5 | ||
Đệ tử 2 túi
Tham gia ngày: Jan 2007
Bài gửi: 34
: |
Em lập trình cho mạch trên như sau:
Trích:
Trích:
Cách anh làm ơn giúp em với thay đổi nội dung bởi: cuongthinh, 12-05-2009 lúc 08:59 AM. |
||
![]() |
![]() |
![]() |
#6 |
Đệ tử 2 túi
Tham gia ngày: Jan 2007
Bài gửi: 34
: |
Sao ko có anh nào chỉ cho em vậy? E dang làm đồ án về cái PFC này chỉ vướng cái này nữa mà chưa giải quyết được. Có ai ra tay giúp em với
|
![]() |
![]() |
![]() |
#7 | |
Đệ tử 5 túi
Tham gia ngày: Sep 2007
Bài gửi: 94
: |
Trích:
bạn thấy phần linker script người ta tạo một file gld là linkerscript.gld như sau: SEARCH_DIR(..\..\..\..\lib) SEARCH_DIR(..\..\..\..\support\gld) INPUT(-ldsp) INPUT(-lpic30) INPUT(-lm) INPUT(-lc) INCLUDE p30f4011.gld Tôi cũng không biết họ link kiểu gì, nhưng khi tôi đặt project của tôi vào thư mục PFC đặt trong đường dẫn : C:\Program Files\Microchip\MPLAB C30\examples\dsPIC30F\ thì kết quả là không con lỗi như của bạn nữa. Nếu bạn chưa có cách nào thì cứ làm tạm theo cách của tôi. |
|
![]() |
![]() |
![]() |
#8 |
Đệ tử 2 túi
Tham gia ngày: Jan 2007
Bài gửi: 34
: |
Anh tungnh cũng làm PFC số rồi ạ, anh xem với cái sơ đồ như trên chương trình của em có lỗi gì không sao em test thử mà không thấy có xung ra ở chân PWM. sau một hồi mày mò, xem xét em vẫn chưa tìm được lỗi sai ở đâu, mong anh và các cao thủ ra tay giúp đỡ!
|
![]() |
![]() |
![]() |
#9 | |
Đệ tử 5 túi
Tham gia ngày: Sep 2007
Bài gửi: 94
: |
Trích:
Thứ nhất : chắc bạn chưa hiểu về PI. Bởi hệ thống PI phải là liên tục , mà trong đoạn code của bạn không để hàm điều khiển trong vòng while hay ngắt. Tôi khuyên bạn nên thực hiện khâu PI trong ngắt ADC. Thứ 2 Không ai người ta cấu hình ADC nhiều lần như bạn,Tôi gợi ý cho bạn thế này : thực chất với bài toán này không phải bạn lấy mẫu với tần số khác nhau với mỗi chân ANx mà lấy kết quả việc chuyển đối AD với mỗi chân là không đồng thới. Để làm điều này bạn thực hiện quét kênh với mỗi các ANx khác nhau. ví dụ bạn chọn kênh 0 gồm các chân AN3,AN4 và AN0,AN1,AN2, ở kênh 1,2,3 chẳng hạn,kênh 0 là kênh quét, đầu tiên là cho AN3 quét trước . sau đó bạn cấu hình cho việc ngắt sau số lần lấy mẫu và chuyển đổi ví dụ ADCON2bits.SMPI =1 ( ngắt sau lấn sample/convert thứ hai) . Ta chọn AN3 quét trước ,sau lần sample/convert đầu tiến ta có kết quả của AN3,AN0,AN1,AN2 lần lượt là ADCBUF0,1,2,3 và sau lần sample/convert thứ hai , tức AN4 quét kết quả của AN4,AN0,AN1,AN2 là ADCBUF4,5,6,7. Như vậy là các chân AN0,1,2 có 2 kết quả trong khi đó AN3,4 chỉ có 1. Bạn có thể tham khảo ở dspic30f_reference_manual để hiểu . |
|
![]() |
![]() |
![]() |
#10 |
Đệ tử 2 túi
Tham gia ngày: Jan 2007
Bài gửi: 34
: |
Em cảm ơn anh, đúng là em chưa biết cách lập trình cho 3 cái ADC nên ngay từ đầu thread em đã đặt ra câu hỏi. Cũng do việc xử lý ADC không tốt nên em đành phải làm thủ công như thế, rồi dẫn đến việc phải gọi hàm PI bằng các biến đếm. Em đã tìm hiểu mấy cái tutorial của anh Nam nhưng kô thấy nhắc đến việc quét kênh ADC như anh nói. Em sẽ về tìm hiểu thêm, hy vọng sẽ lập trình xong sớm, sắp phải nộp đồ án rồi mà vẫn chưa lập trình xong! Híc!
|
![]() |
![]() |
![]() |
|
|