PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > dsPIC - Bộ điều khiển tín hiệu số 16-bit

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

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
Prev Previous Post   Next Post Next
Old 08-05-2008, 04:48 PM   #1
trieutuan_vnu
Đệ tử 1 túi
 
trieutuan_vnu's Avatar
 
Tham gia ngày: Sep 2006
Bài gửi: 14
:
Anh Nam Cho Em Hỏi Một Vấn Đề Lớn, Chắc Chỉ Có Anh Mới Trả Lời Được

Cám ơn anh trước.
Em tạo một tín hiệu sin bằng việc đặt tra theo bảng sau;
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};
và dưới đây là một tín hiệu hình sin có biên độ và tần số giống như trên nhưng dịch di 90 độ
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};
bây giờ em có một tín hiệu được chuyển đổi ADC (có tần số bằng tần số của hai tín hiệu trên)
=> vậy bây giờ em muốn có hai tín hiệu mới :I = sin_table x input_sig và Q = sin_table_s90 x input_sig. và sau đó cho hai tín hiệu qua bộ lọc FIR(bộ lọc được hỗ trợ ngay trong con dspic) để được tín hiệu I,Q cuối cùng thì em phải làm cách nào, em làm rồi mà nó chạy không đúng

Chương trình của em:
Code:
=================ISR_Timer
#include "p30f4011.h"
#include "common.h"
#include "dsp.h"
void Init_Timers( void );
void Init_Timers( void )
{
	TMR1 = 0;			//Xoa so dem trong TMR1
	PR1 = 200;		//TMR1 tran moi ms
	_T1IF = 0;			//Xoa co ngat cua Timer 1
	T1CON = 0x0020;		//Dung fcy lam clock, prescale = 1:64, tat Timer 1
	_T1IE = 1;			//Cho phep ngat Timer 1

	T2CON = 0;				// chon he so chia la 1, tat timer 2
	IFS0bits.T2IF = 0;		// Xoa co ngat
	IPC1bits.T2IP = 5;		// Uu tien ngat
	PR2 = SAMPCOUNT;		// chu ky lay mau
	TMR2 = 0;				// Xoa so dem trong timer 2
	IEC0bits.T2IE = 1;		// Cho phep ngat khi tran

	// set up TMR3 to generate signals for the ADC convert
	// tan so lay mau 320kHz
 	TMR3 = 0x0000;    		//chon he so chia la 1, tat timer 3		
    PR3 = SAMPCOUNT;		// chu ky lay mau
    IFS0bits.T3IF = 0;
    IEC0bits.T3IE = 0;

	// delay turning the output timer on until the main loop
	T2CONbits.TON = 0;
}
==========================main
#include <p30f4011.h>
#include <stdio.h>
#include "common.h"
#include "dsp.h"
#include "lcd8bit.h"
#include "delay.h"
#include "string.h"

	_FOSC(CSW_FSCM_OFF & XT_PLL16);
	_FWDT(WDT_OFF);
	_FBORPOR(PBOR_OFF & MCLR_EN);
	_FGS(CODE_PROT_OFF);
extern FIRStruct lowpassexample_psvFilter;  /*Contains filter structures for FIR-LPF*/
fractional i_Ptr_sig[NUMSAMP];
fractional ref_input_sig[NUMSAMP];
fractional ref_input_s90_sig[NUMSAMP];
fractional input_I_signal[NUMSAMP];
fractional input_Q_signal[NUMSAMP];
fractional output_I_signal[NUMSAMP];
fractional output_Q_signal[NUMSAMP];
//fractional output_REF_signal[NUMSAMP];
//fractional output_REF2_signal[NUMSAMP];


fractional* ref_input_s90;
fractional* ref_input;
fractional* i_Ptr;
fractional* o1_Ptr;
fractional* o2_Ptr;
fractional* i1_Ptr;
fractional* i2_Ptr;
volatile fractional fin;
volatile fractional fqn;


unsigned int doFilterFlag;

int main(void)
{
	float fI,fQ,adc,in;
	float mag,phi;
	char sBuff[40];
	fractional tI,tQ;
	TRISE = 0xFFF0;

	ref_input		=&	ref_input_sig[0];
	ref_input_s90	=&	ref_input_s90_sig[0];
	i_Ptr 			=&	i_Ptr_sig[0];

	input_I_signal[0] = (i_Ptr_sig[0])*(ref_input_sig[0]);
	input_Q_signal[0] = (i_Ptr_sig[0])*(ref_input_s90_sig[0]);



//	i1_Ptr =&input_I_signal[0];
//	i2_Ptr =&input_Q_signal[0];

	o1_Ptr =&output_I_signal[0];
	o2_Ptr =&output_Q_signal[0];

//	ref_input =&output_REF_signal[0];
//	ref_input_s90 =&output_REF2_signal[0];
//	i_Ptr =&input[0]; 



	FIRDelayInit(&lowpassexample_psvFilter);

	Init_Timers();
	Init_ADC();
	TMR1 = 0;
	TMR2 = 0;
	TMR3 = 0;
	T1CONbits.TON = 1;
	T2CONbits.TON = 1;
	T3CONbits.TON = 1;
while(!doFilterFlag);
        while (1)              
        {                   

           	if (doFilterFlag)
	 {	

		
	o1_Ptr = FIR(NUMSAMP,&output_I_signal[0],&input_I_signal[0],&lowpassexample_psvFilter);
	o2_Ptr = FIR(NUMSAMP,&output_Q_signal[0],&input_Q_signal[0],&lowpassexample_psvFilter);
	
	fin = output_I_signal[0];
	fqn = output_Q_signal[0];
	
	
	tI = fin;
	tQ = fqn;

	fI = Fract2Float(tI);
	fQ = Fract2Float(tQ);
	
	in= *i1_Ptr;
	adc= i_Ptr_sig[0];
	mag=sqrt(fI*fI+fQ*fQ);
	phi=atan2(fQ,fI)*180.0f/PI; 
	Init_LCD();
	lcd_cmd(lcd_homeL1);
	sprintf(sBuff," Mag = %8.5f ",mag);
//	sprintf(sBuff," Iout = %8.5f ",in);
	puts_lcd(sBuff,strlen(sBuff));

	lcd_cmd(lcd_homeL2);
	sprintf(sBuff," Phi = %8.3f ",phi);
//	sprintf(sBuff," ADC =%8.3f ",adc);
	puts_lcd(sBuff,strlen(sBuff));

		doFilterFlag = 0;

			}
        }
        return 0;

}
// TOÀN BỘ CHƯƠNG TRÌNH CỦA EM NHƯ FILE GỬI
// ĐỀ TÀI EM LÀM LÀ VỀ BỘ KHUYẾCH ĐẠI LOCK IN
File Kèm Theo
File Type: rar 00_Program.rar (263.4 KB, 33 lần tải)
File Type: doc Chương I.doc (214.5 KB, 15 lần tải)

thay đổi nội dung bởi: falleaf, 08-05-2008 lúc 05:34 PM.
trieutuan_vnu vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 04:28 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam