EDN China > 技术文章 > 微处理器与DSP > 多媒体处理器 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

(多图) 基于MAXQ微控制器构建增强型智能4-20mA变送器

来源:maxim-ic.com.cn?? 2007年06月21日 ?? 收藏0

  HART调制解调器的实现

  如果系统包含1 200Hz和2200Hz (分别代表1和0)频率编码器,同时要对这些频率进行检测,可以采用MAC实现HART调制解调器要求的这些功能。

  要产生所需的正弦波形,可以利用下述差分方程描述的两极点滤波器形式实现递归数字式谐振器:

  Xn = k * Xn-1 - Xn-2,

  式中,常数k等于2 cos(2*频率/采样率)。可以预先计算k的两个值,并存在ROM中。例如,要用8kHz采样率产生1200Hz频率,该值为k = 2 cos(2*1200/8000)。

  必须计算能使振荡器开始振荡的初始激励。如果 Xn-1和 Xn-2都为0,接下来的每个Xn也都将为0。要启动振荡器,将 Xn-1设为0, Xn-2采用如下设置:

  Xn-2 = -A*sin[2(频率/采样率)]

  在本例中,假设采用单位幅度的正弦波,该式简化为 Xn-2 = -1sin[(2(1200/8000)]。为进一步简化编码,首先,初始化两个中间变量(X1, X2)。X1初始化为0,X2为初始激励值(上面的计算结果),以启动振荡器。这样,要产生一个正弦波的采样,可进行下列运算:

  

X0 = kX1 - X2

  ?X2 = X1

  ?X1 = X0

  每个新的正弦值都需要一次乘法运算和一次减法运算。利用MAXQ ?C的单周期硬件MAC,可以采用如下操作产生正弦波:

  move DP[0], #X1 ???; DP[0] -> X1

  move MCNT, #INIT_MAC ??; Initialize MAC unit

  move MA, #k ????; MA = k

  move MB, @DP[0]++ ???; MB = X1, MC="k"*X1, point to X2

  move MA, #-1 ????; MA = -1

  move MB, @DP[0]-- ???; MB = X2, MC="k"*X1-X2, point to X1

  nop ??????; wait for result

  move @--DP[0], MC ???; Store result at X0.

  因为我们只需要检测两种频率,所以采用改进的Goertzel算法,这种算法可以用简单的二阶滤波器实现(图8)。

利用简单的二阶滤波器实现Goertzel算法

图8. 利用简单的二阶滤波器实现Goertzel算法

  要使用Goertzel算法检测特定频率,编译时要首先使用下式计算出常数:

  ?k = tone frequency/sampling rate

  ?a1 = 2cos(2k)

  随后,将中间变量D0、D1和D2初始化为0,并对每个收到的采样X进行下列计算:

  ?D0 = X + a1*D1 - D2

  ?D2 = D1

  ?D1 = D0

  得到足够多的采样值以后(采用8kHz采样率时,通常为205个采样),用最新计算出的D1和D2值进行下列计算:

  ?P = D12 + D22 - a1 * D1 * D2.

  这时,P包含了输入信号中测试频率的平方。

  要对两种频率解码,我们用两个滤波器处理每个采样。每个滤波器都有自己的k值和自己的一组中间变量,每个变量都是16位长,所以,整个算法需要48字节的中间存储器空间。


上一页123下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

MAXQ? 微控制器? 电流环? 控制-监视?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈