Đệ 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;
}
|