TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28335: 在项目中想产生正弦信号,其中2833x_SGENT1例子中关于正弦的算法不理解,第一次请教的时候让我到英文论坛提问但我无法在英文论坛,故请帮我在英文论坛提问,不胜感谢,谢谢!

Part Number:TMS320F28335Other Parts Discussed in Thread:CONTROLSUITE

2833x_SGENT1例子中的代码如下

// =====================================================================================
//  This software is licensed for use with Texas Instruments C28x
//  family DSCs.  This license was provided to you prior to installing
//  the software.  You may review this license by consulting a copy of
//  the agreement in the doc directory of this library.
// -------------------------------------------------------------------------------------
//Copyright (C) 2010-2011 Texas Instruments, Incorporated.
//All Rights Reserved.
//======================================================================================
/* ==============================================================================

System Name:Signal Generator Module demo 

File Name:SGENT1.C

Description:Primary System file for demonstrating the Signal Generator module

Originator:Digital control systems Group - Texas Instruments

Target dependency:  C28x

Description:
============The "C" frame work, for demonstrating the signal generator module is given below________________________|||||| X1=OUT  |EVMDAC||  SGENT_1  |-------->|DLOG_4CH  ||||PWMDAC||___________||_____________|

*/
//######################################################################################
// $TI Release: C28x SGEN Library Version v1.01 $
// $Release Date: September 30, 2011 $
//######################################################################################

#include "DSP28x_Project.h"// Device Headerfile and Examples Include File
#include <sgen.h>

#define SIGNAL_LENGTH 512

/* Create an instance of Signal generator module*/
SGENT_1 sgen = SGENT_1_DEFAULTS;
#pragma DATA_SECTION(ipcb, "SGENipcb");
int ipcb[SIGNAL_LENGTH];
int xn,yn;

void main()
{unsigned long i;InitSysCtrl();DINT;InitPieCtrl();IER = 0x0000;IFR = 0x0000;InitPieVectTable();EINT;// Enable Global interrupt INTMERTM;// Enable Global realtime interrupt DBGM

		/* Signal Generator module initialisation*/ 
		sgen.offset=0;
		sgen.gain=0x7fff; /* gain=1 in Q15 */
		sgen.freq=5369; /* freq = (Required Freq/Max Freq)*2^15 */
		/* = (50/305.17)*2^15 = 5369 */
		sgen.step_max=1000; /* Max Freq= (step_max * sampling freq)/65536 */
		sgen.alpha=8192;/* phase_norm =(pi/4/(2*pi))*2^16=8192*/
		
		/* So call step_max is normalized fmax in Q16 format*/
		/*  step_max=fmax/fs*65536*/
		/*  f/fmax*2^15=freq											*/for(i=0;i<SIGNAL_LENGTH;i++){	ipcb[i]=0;}for(i=0;i<SIGNAL_LENGTH;i++){	sgen.calc(&sgen);	xn=sgen.out;	ipcb[i]=xn;}
		
		for(;;);

} /* End: main() */



这部分代码请解释一下,谢谢!

/* Signal Generator module initialisation */ sgen.offset=0;
sgen.gain=0x7fff; /* gain=1 in Q15 */
sgen.freq=5369; /* freq = (Required Freq/Max Freq)*2^15 */
/* = (50/305.17)*2^15 = 5369 */
sgen.step_max=1000; /* Max Freq= (step_max * sampling freq)/65536 */
sgen.alpha=8192; /* phase_norm =(pi/4/(2*pi))*2^16=8192 */
/* So call step_max is normalized fmax in Q16 format */
/* step_max=fmax/fs*65536 */
/* f/fmax*2^15=freq

另外关于这个算法的文章是英文版本我也看不懂 请指点,Signal Generator Library.pdf 谢谢!

Cherry Zhou:

您好我们已收到您的问题并升级到英文论坛,因感恩节假期,预计答复您的时间将稍晚。敬请谅解!

,

jun liu:

谢谢您的解答!

,

Cherry Zhou:

您好,请您参阅以下文档:

controlSUITE\libs\DSP\SGEN\V101\doc\ 第 11 页介绍了 SGENT_1 函数还有其input和output。

,

jun liu:

 这个文档我早都提到过的  关键是英文 以前这个问题你让我英文论坛提问 我都说了邮箱无法更改还有英文水平有限 麻烦您给翻译或者解释一下 谢谢 

,

Cherry Zhou:

好的,您稍等,我看下帮您翻译一下哈。

,

jun liu:

谢谢 实在是不好意思 我这英文水平有限  

,

Cherry Zhou:

您好,您可以直接圈出来或者po一下您具体哪里看不太懂吗?这样我可以直接帮您翻译。谢谢!

,

jun liu:

 我是一点都看不懂 就想弄明白怎么生成正弦波就可以 谢谢

,

Cherry Zhou:

您好,非常抱歉,目前该文档只有英文版本,如果查阅有困难,我们建议您可以借助翻译软件来提供帮助。如果您在查阅后仍有技术问题,请随时联系我。敬请谅解!

,

jun liu:

麻烦解释一下这个例子是怎么生成正弦波?采用什么算法?sgen.calc函数体部分在哪里?我想看到这个函数具体是怎么实现的?

/* Signal Generator module initialisation */ sgen.offset=0; sgen.gain=0x7fff; /* gain=1 in Q15 */ sgen.freq=5369; /* freq = (Required Freq/Max Freq)*2^15 */ /* = (50/305.17)*2^15 = 5369 */ sgen.step_max=1000; /* Max Freq= (step_max * sampling freq)/65536 */ sgen.alpha=8192; /* phase_norm =(pi/4/(2*pi))*2^16=8192 */ /* So call step_max is normalized fmax in Q16 format */ /* step_max=fmax/fs*65536 */ /* f/fmax*2^15=freq */

for(i=0;i<SIGNAL_LENGTH;i++) { ipcb[i]=0; }

for(i=0;i<SIGNAL_LENGTH;i++) { sgen.calc(&sgen); xn=sgen.out; ipcb[i]=xn; }

,

Cherry Zhou:

好的已帮您跟进给工程师,有新的消息会尽快给到您。

,

jun liu:

好的  谢谢 

,

Cherry Zhou:

jun liu 说:这个例子是怎么生成正弦波?

假设调用速率为 20kHz,该例子会返回一个 Q15 值,该值与 50Hz 正弦波相对应。for loop的操作是使用这些lookup值预先填充array,这样当调用 ISR 时,它可以通过 ipcb[] 数组递增,而不用实时调用 sgen 函数。该示例在之前提到的文档的第13页有。

此liabrary中还有增加的分辨率函数,这些函数将lookup table和 interpolation组合在一起。

jun liu 说:采用什么算法

这些函数使用基准正弦查找表( sine lookup table)与模数算术(modulo arithmetic)相组合,形成差频正弦波。这样 SW 能够灵活地创建特定的正弦波,而不用存储specific特定正弦波的lookup table。

在典型环境下,假设只使用一个设定的频率,ipcb array会被硬编码到器件中。

jun liu 说:sgen.calc函数体部分在哪里?

如果您使用的是 controlSUITE 中包含的example,那sgen calcs 位于地址 0xEC00 开始。 正弦表从 0xFC00 开始加载。

jun liu 说:我想看到这个函数具体是怎么实现的?

这取决于系统的需求。 如果希望创建特定频率的输出信号,那么 ipcb[] 中存储的值将以 ISR 速率反馈发送到 DAC。

同时,在创建AC电压波形时,会用到inverters等应用(在该处系统需要匹配grid frequency–考虑到 C2000 应用的作用,可能是产生该频率的原因)–)。 请注意, sine generator有双相和三相版本 (120 度分离)。

,

jun liu:

谢谢您的答复 这个回复太专业了 十分感谢

,

jun liu:

谢谢

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28335: 在项目中想产生正弦信号,其中2833x_SGENT1例子中关于正弦的算法不理解,第一次请教的时候让我到英文论坛提问但我无法在英文论坛,故请帮我在英文论坛提问,不胜感谢,谢谢!
分享到: 更多 (0)

© 2024 TI中文支持网   网站地图 鲁ICP备2022002796号-1