case 0xB611:// voltage (phase A)
g_MessageBoard.EEPROMOpPending = 1;
Request_RMS(RMS_VOLTAGE_REQUEST);
SpinTaskWheel();
while(!(DSP_CTRL & 0x20))
SpinTaskWheel();
*value = Get_RMS() / 1000;
g_MessageBoard.EEPROMOpPending = 0;
贴片电感
*size = 2;
break;
这个例子阐明了一个重要事实,即任何任务都不能挂起任务轮。case的第一条语句将消息板中的EEPROMOpPending标志位置为高。然后它要求DSP函数计算RMS电压值,并在DSP函数忙时递归调用任务轮。当EEPROMOpPending标志位置为高后,执行一次任务轮循环,并且不调用寄存器管理器,从而避免了无限递归。一旦DSP函数完成,将提取RMS值并清除EEPROMOpPending标志位。
请注意,对于这种类型的只读寄存器,不必在MAXQ3120RD.h文件中添加结构来保留EEPROM存储空间。也不必向ProcessRegisterNumber表添加成员。在处理基于EEPROM的寄存器之前,寄存器管理器主程序总要调用GetSpecialRegis一体成型电感ter。
定制DSP程序
参考设计的DSP程序是一套汇编语言模块,它负责处理从ADC到脉冲生成以及报告电压、电感厂电流、功率和用电量的整个信号流。大部分程序不需要修改,但也许你希望修改以下方面:
采用一个不同的电流或电压变换器差模电感,从而需要不同的增益因子。
改 变系统生成电表脉冲的方式。
改变前端滤波。
DSP程序是如何工作的,以及你可以安全地改变哪些单元,以下部分从较高的层次对此进行了说明。
注意:DSP模块以预编译的目标文件形式公开发布。只有在签署了保密协议(NDA)的情况下才可以提供汇编语言源代码。更多信息,请联系Dallas SEMiconductor/Maxim。
存储
DSP程序用到RAM空间的低地址部分。在DSP模块中搜索“Data Memory Map”,可以看到DSP程序用到的一系列RAM变量。前两个字节是一组控制DSP函数运行的数据位。
常数
可通过调整两个常数来设置电压和电流通道的满量程读数。它们分别是W_V_Scale和W_I_Scale。缺省情况下,这两个常量被设置为400V和250A。电压被设置为正常条件下不会超越的电平值(280VRMS以上),而电流设定值与可能的电表分流值相一致(250μ至500μ,典型值)。
接口程序
用户程序可以直接使用一些内置程序的返回值。如果可能,你应该通过这些内置程序与DSP函数接口,而不是直接与DSP函数使用的内部变量接口。
Get_and_Clear_Usage: 这是C代码用来提取电量累计值的主程序。通常情况下,需要对用电量进行累计时,DSP程序会通知异步事件管理器。然而,随时都可以调用这个程序以获取精确的用电量读数(截至当前)。注意,IAR编译器会自动传递A[0]内的函数参数,并将结果返回给A[0]。
Get_Frequency: 返回0.1mHz步长的线路频率。值得注意的是,这个子程序缺省情况下并未加载;DL/T 645标准并未要求频率结果。
Get_Power_Factor: 返回负载的功率因子。
Get_Power: 根据参数不同,返回无功或有功功率。
Get_MaxD: 返回自上次调用该函数后,电表记录的最大需量(功率)值。
Request_RMS: 根据参数不同,要求DSP计算RMS电流或电压值。
Get_RMS: 返回最近一次请求的RMS值。
set_E_pulse: 接受一个电表常数,并设置适当的DSP变量以使该电表常数生效。
中断服务程序
参考设计只使能了一个中断:就是AFE中断,ADC上有一组新的采样数据时产生该中断。因为ADC采样周期为48μs,实际上中断服务程序会很快地结束它的工作,并返回到主代码中―在两个中断之间只有384个指令周期!
中断服务程序执行以下功能:
生成输出脉冲:如果需要一个脉冲,则启动它。如果脉冲正在进行中,则递减持续贴片电感时间计数器的值,并在计数器回零时终止脉冲。
累加求和:将最近的能量采样值累加到所有适当的寄存器中。
累计RMS值:如果被请求,则累计I2或V2。
检查电压下限:如果电压低于门限值,则递增一个计数器值。
过零检测:如果电压信号正向过零,则设置一个标志位。
如何发现并解决FPGA设计中的时序问题耗费数月精力做出的设计却无法满足时序要求,这确实非常令人伤心。然而,试图正确地对设计进行约束以保证满足时序要求的过程几乎同样令人费神。找到并确定时序约束本身通常也是非常令人头痛的问题。时序问题的恼人之
Stellaris™系列微控制器的ADC过采样技术(ADCSequenceConfigure(ADC_BASE, 0, ADC_TRIGGER_TIMER, 0); ADCSoftwareOversampleConfigure(ADC_BASE, 0,
利用可编程逻辑实现灵活高效的多媒体信号处理从非常简单的消费类音/视频播放器到在专业制作环境中使用的高度复杂的音视频捕捉、编辑和回放系统,多媒体设备或系统的应用范围非常广泛。人们在实现这类应用系统时会使用特殊应用标准产品(ASSP)、专用数字信
6/6 首页 上一页 4 5 6