![]() |
|
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 |
![]() |
#3 |
Đệ tử 1 túi
Tham gia ngày: Sep 2006
Bài gửi: 14
: |
Sory anh, em có gửi kem file 00_program.rar mà. Trong đó có hàm khởi tạo sóng sin reference, hàm sin này sử dụng 4 bít, nó điều khiển và cho ra sóng sin sau khi qua bộ biến đổi dac r-2r network. Vả sau đó là qua bộ lọc thông thấp để làm mịn tín hiệu(Đo ra miột tín hiệu rất đẹp_cái này đã làm được và em đã kiểm tra rồi ko sai gì cả)Tín hiệu này sau khi được hình thành sẽ cung cấp cho 1 sensor(cấu tạo theo kiểu cầu trở) tín hiệu từ senor ra sẽ có tần số đúng bằng tần số của tín hiệu reference tạo ra.
-Ở đây em chỉ muốn hỏi anh là để nhân tín hiệu sau khi biến đổi ADC với tín hiệu referen em tạo ra theo bảng thì nhân như thế nào. ///==============Hàm tạo tín hiệu reference============== #include <p30f4011.h> #include "common.h" #include "dsp.h" volatile unsigned char _sinTableIndex; extern fractional* ref_input_s90; extern fractional* ref_input; static unsigned char sinTable[] = {5,6,7,8,9,9,10,10,10,10,10,9,9,8,7,6,5,4,3,2,1,1, 0,0,0,0,0,1,1,2,3,4}; static unsigned char sinTable_s90[] = {10,10,10,9,9,8,7,6,5,4,3,2,1,1,0,0,0,0,0,1,1,2,3, 4,5,6,7,8,9,9,10,10}; void __attribute__((__interrupt__,no_auto_psv)) _T2Interrupt( void ) { _sinTableIndex++; _sinTableIndex &= 0b00011111; LATE = (sinTable[_sinTableIndex]); *ref_input = (sinTable[_sinTableIndex]); *ref_input_s90 = (sinTable_s90[_sinTableIndex]); IFS0bits.T2IF = 0; // Xoa co ngat } #include "p30f4011.h" #include "common.h" #include "dsp.h" //extern fractional input_I_signal[NUMSAMP]; //extern fractional input_Q_signal[NUMSAMP]; //extern fractional output_I_signal[NUMSAMP]; //extern fractional output_Q_signal[NUMSAMP]; extern unsigned int doFilterFlag; // extern int sample; extern fractional* i_Ptr; //extern fractional* i1_Ptr; //extern fractional* i2_Ptr; void Init_ADC(void); void __attribute__((__interrupt__)) _ADCInterrupt(void); void Init_ADC(void) { /* ADCON1bits.FORM = 3; // 1.15 fractional //number format. // signed fractional ADCON1bits.SSRC = 2; // Timer 3 cham dut lay mau va kich hoat ADCON1bits.ASAM = 1; // Khoi dong che do tu dong lay mau ADCON2bits.SMPI = 0; // ngat sau moi mau thu duoc; ADCON3bits.SAMC = 31; ADCON3bits.ADCS = 63; ADCHS = 0x0008; // Kenh 8 doc tin hieu giua AN8 va AVss ADCSSL = 0x0000; // Khong quet cac ngo vao ADPCFG = 0xFFFF; ADPCFGbits.PCFG8 = 0; IFS0bits.ADIF = 0; // xoa co ngat ADC IEC0bits.ADIE = 1; // cho phep ngat ADC ADCON1bits.ADON = 1; // bat ADC T3CONbits.TON = 1; // bat timer 3 */ ADCON1bits.FORM = 3; // 1.15 fractional ADCON1bits.SSRC = 2; // Timer 3 cham dut lay mau va kich hoat ADCON1bits.ASAM = 1; // Khoi dong che do tu dong lay mau ADCON1bits.SIMSAM = 0; // Samples multiple channels individually in sequence ADCON2bits.SMPI = 0; // ngat sau moi mau thu duoc; ADCON2bits.CHPS = 0; // ADCON2=0; ADCON3bits.SAMC = 1; // dung 1TAD cho lay mau ADCON3bits.ADCS = 3; // dung clock he thong,TAD = 2xTcy = 250 ns ADCHS = 0x0008; //Kenh 0 doc tin hieu giua AN8 va AVss ADCSSL = 0x0000; //Khong quet cac ngo vao ADPCFG = 0xFFFF; ADPCFGbits.PCFG8 = 0; // AN8 la ADC con lai la digital IFS0bits.ADIF = 0; // xoa co ngat IEC0bits.ADIE = 1; // cho phep ngat ADCON1bits.ADON = 1; // bat modul ADC } void __attribute__((__interrupt__)) _ADCInterrupt(void) { //Clear the Timer3 Interrupt Flag IFS0bits.T3IF = 0; // sample = ADCBUF0; // int format *i_Ptr = ADCBUF0; doFilterFlag = 1; IFS0bits.ADIF = 0; } |
![]() |
![]() |
|
|