• MAX262使用说明


    1、概述

    利用开关电容滤波原理,可以搭建LP/HP/BP/NO滤波器。

    内部含有两个相同的滤波单元A/B,每个单元是两节滤波,故一片MAX262可以构成4阶滤波器。

      使用时要用到四个参数:中心频率f0,Q值,时钟频率,工作模式。滤波器的类型(LP/HP/BP/NOTCH)通过引脚连接确定,滤波器的截止频率f0通过fclk和参数FN共同决定,滤波器的Q值通过参数QN决定。

      参数测定可以较精确,但因为是开关电容滤波,故输出波形呈阶梯状。

    二、详细说明

    1、四种模式

      模式1 带通、低通。适用类型巴特沃斯、切比雪夫、贝塞尔。也可用于带阻滤波器,但有注意点,见PDF.

      模式2 全极点带通、低通

      模式3 椭圆带通、椭圆低通、高通

      模式4 全通

    2、fclk通过引脚CLKA/CLKB输入,可以同参数FN一起改变滤波器的截止频率fo.

    3、FN值是针对F0,Q的二进制数值的十进制表示。

      中心频率范围1HZ-100KHZ,MAX262中心频率最大可到140KHZ。

        中心频率或拐点频率计算方法:

      模式134:Fclk/f0=(26+N)pi/2;转换得f0=fclk*2/pi/(26+N)

      模式2:N= fclk/f0/1.11072-26·

    4、QN值范围0.5-64.0,最大模式可达90

      Q值控制字计算方法:

      模式134:N=128-64/Q

      模式2:N=128-90.51/Q

    5、工作模式、FN、QN都可以通过对MAX262的地址线、数据线、控制线的写操作存入MAX262内部ROM中,从而使系统工作。

      选择A0-A3ROM内的数据会更新,D0/D1为数据位。数据在WR信号上升沿写入。Fclk输入端电信号不会对数字信号端产生干扰。

    内部ROM分配如下:

    三、细节

    1、单片机向MAX262连接时中间加上锁存器可显著降低干扰。

    2、设置频率f0有两种方法:

         方法一:fclk固定,改变FN的值。因为FN范围只有[0-63],故步进值很小且精度低。

         方法二:FN固定,改变fclk。调节fclk可以得到满意的截止频率。

    四、MSP430代码(还需完善)

    点C文件

    #include "MAX262_Driver.h"
    /*******************************************
    函数名称:MAX262_Init
    功    能:将430与MAX262接口初始化
    参    数:无
    返回值  :无
    ********************************************/
    void MAX262_Init(void)
    {
       AddrOUT;
       DataOUT;
       DataWROUT;
       DataWR_H;
    }
    /*******************************************
    函数名称:WriteAddr
    功    能:向MAX262写入地址信号
    参    数:uchar addr.参考MAX262官方PDF,地址范围[0:15]
              超出地址范围默认写入地址0
    返回值  :无
    ********************************************/
    void WriteAddr(uchar addr)
    {
      switch(addr)
      {
        case 0:{Addr3_L;Addr2_L;Addr1_L;Addr0_L;break;}
        case 1:{Addr3_L;Addr2_L;Addr1_L;Addr0_H;break;}
        case 2:{Addr3_L;Addr2_L;Addr1_H;Addr0_L;break;}
        case 3:{Addr3_L;Addr2_L;Addr1_H;Addr0_H;break;}
        case 4:{Addr3_L;Addr2_H;Addr1_L;Addr0_L;break;}
        case 5:{Addr3_L;Addr2_H;Addr1_L;Addr0_H;break;}
        case 6:{Addr3_L;Addr2_H;Addr1_H;Addr0_L;break;}
        case 7:{Addr3_L;Addr2_H;Addr1_H;Addr0_H;break;}
        case 8:{Addr3_H;Addr2_L;Addr1_L;Addr0_L;break;}
        case 9:{Addr3_H;Addr2_L;Addr1_L;Addr0_H;break;}
        case 10:{Addr3_H;Addr2_L;Addr1_H;Addr0_L;break;}
        case 11:{Addr3_H;Addr2_L;Addr1_H;Addr0_H;break;}
        case 12:{Addr3_H;Addr2_H;Addr1_L;Addr0_L;break;}
        case 13:{Addr3_H;Addr2_H;Addr1_L;Addr0_H;break;}
        case 14:{Addr3_H;Addr2_H;Addr1_H;Addr0_L;break;}
        case 15:{Addr3_H;Addr2_H;Addr1_H;Addr0_H;break;}
        default:{Addr3_L;Addr2_L;Addr1_L;Addr0_L;break;}
      }
    }
    /*******************************************
    函数名称:WriteData
    功    能:向MAX262写入数据
    参    数:uchar data.参考MAX262官方PDF,数据范围[0:3]
              超出数据范围默认写入0
    返回值  :无
    ********************************************/
    void WriteData(uchar data)
    {
      DataWR_L;
      delay_us(1);
      switch(data)
      {
        case 0:{Data1_L;Data0_L;break;}
        case 1:{Data1_L;Data0_H;break;}
        case 2:{Data1_H;Data0_L;break;}
        case 3:{Data1_H;Data0_H;break;}
        default:{Data1_L;Data0_L;break;}
      }
      delay_us(1);
      DataWR_H;
      delay_us(1);
    }
    /*******************************************
    函数名称:SetAMode
    功    能:设置MAX262滤波器A工作模式
    参    数:uchar mode.参考MAX262官方PDF,数据范围[0:3]
    返回值  :无
    ********************************************/
    void  SetAMode(uchar mode)
    {
      WriteAddr(0);
      WriteData(mode);
    }
    /*******************************************
    函数名称:SetAF
    功    能:设置MAX262滤波器A的频率f
    参    数:uchar freq.参考MAX262官方PDF,数据范围[0:63]
    返回值  :无
    ********************************************/
    void  SetAF(uchar freq)
    {
      uchar temp;
      WriteAddr(1);
      temp=freq&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(2);
      temp=(freq>>2)&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(3);
      temp=(freq>>4)&(BIT0+BIT1);
      WriteData(temp);
    }
    /*******************************************
    函数名称:SetAQ
    功    能:设置MAX262滤波器A的Q
    参    数:uchar Qvalue.参考MAX262官方PDF,数据范围[0:127]
    返回值  :无
    ********************************************/
    void  SetAQ(uchar Qvalue)
    {
      uchar temp;
      WriteAddr(4);
      temp=Qvalue&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(5);
      temp=(Qvalue>>2)&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(6);
      temp=(Qvalue>>4)&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(6);
      temp=(Qvalue>>6)&(BIT0);
      WriteData(temp);
    }
    /*******************************************
    函数名称:SetBMode
    功    能:设置MAX262滤波器B工作模式
    参    数:uchar mode.参考MAX262官方PDF,数据范围[0:3]
    返回值  :无
    ********************************************/
    void  SetBMode(uchar mode)
    {
      WriteAddr(8);
      WriteData(mode);
    }
    /*******************************************
    函数名称:SetBF
    功    能:设置MAX262滤波器B的频率f
    参    数:uchar freq.参考MAX262官方PDF,数据范围[0:63]
    返回值  :无
    ********************************************/
    void  SetBF(uchar freq)
    {
      uchar temp;
      WriteAddr(9);
      temp=freq&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(10);
      temp=(freq>>2)&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(11);
      temp=(freq>>4)&(BIT0+BIT1);
      WriteData(temp);
    }
    /*******************************************
    函数名称:SetBQ
    功    能:设置MAX262滤波器B的Q
    参    数:uchar Qvalue.参考MAX262官方PDF,数据范围[0:127]
    返回值  :无
    ********************************************/
    void  SetBQ(uchar Qvalue)
    {
      uchar temp;
      WriteAddr(12);
      temp=Qvalue&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(13);
      temp=(Qvalue>>2)&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(14);
      temp=(Qvalue>>4)&(BIT0+BIT1);
      WriteData(temp);
      WriteAddr(15);
      temp=(Qvalue>>6)&(BIT0);
      WriteData(temp);
    }
    /*******************************************
    函数名称:ComputeFN
    功    能:计算MAX262中心频率或拐点频率f0对应的控制字
    参    数:uchar mode,long int fclk,float f0.
              mode 范围[0-3],fclk单位为HZ,范围[40-4000000],
              f0单位为HZ,范围[1-100000]
              fclk,f0具体可用范围需参考MAX262官方PDF
    返回值  :uchar。中心频率对应的控制字。范围[0-63]
    ********************************************/
    uchar ComputeFN(uchar mode,long int fclk,long int f0)
    {
      if(mode==1)
        return ( (float)((fclk*2.8284271247/f0)/PI)-26 );
      else 
        return ( (float)((fclk*2/f0)/PI)-26 );
    }
    /*******************************************
    函数名称:ComputeQN
    功    能:计算MAX262的Q值对应的控制字QN
    参    数:uchar mode,float Q.
              mode 范围[0-3],Q范围[0.5-64],
              Q值具体范围需参考MAX262官方PDF
    返回值  :uchar。Q值 对应的控制字。范围[0-127]
    ********************************************/
    uchar ComputeQN(uchar mode,float Q)
    {
      if(mode==1)
        return (128-(float)(90.51/Q));
      else 
        return (128-(float)(64/Q));
    }
    /*******************************************
    函数名称:LPSet 需要DDS
    功    能:通过查表设置低通滤波时钟频率
    参    数:uchar f0。范围[1,20],单位KHZ
    返回值  :无
    ********************************************/
    void LPSet(uchar f0,uchar Q)
    {
      SetAMode(0);
      SetAF(38);
      SetAQ(11);
      SetBMode(0);
      SetBF(38);
      SetBQ(79);
    }
    
    

    对应点h文件

    #ifndef _MAX262_DRIVER_H
    #define _MAX262_DRIVER_H
    //=================================头文件=============================//
    #include "msp430f5438.h"
    #include "MCU_Init.h"
    //========================频率、Q值计算所需常量========================//
    #define PI 3.1415926
    //1K-20K截止频率,fclk频率
    uchar LPFclk[]={102,204,306,408,510,612,714,816,918,1020
                    1122,1224,1326,1428,1530,1632,1734,1836,1938,2040};
    uchar HPFclk[]={97,193,290,385,480,575,670,760,850,950
                    1050,1140,1240,1330,1420,1500,1610,1720,1830,1940};
    //=================================引脚分配=============================//
    //4位地址线
    #define AddrOUT     P9DIR|=BIT0+BIT1+BIT2+BIT3
    #define Addr0_H     P9OUT|=BIT0
    #define Addr0_L     P9OUT&=~BIT0
    #define Addr1_H     P9OUT|=BIT1
    #define Addr1_L     P9OUT&=~BIT1
    #define Addr2_H     P9OUT|=BIT2
    #define Addr2_L     P9OUT&=~BIT2
    #define Addr3_H     P9OUT|=BIT3
    #define Addr3_L     P9OUT&=~BIT3
    //两位数据线
    #define DataOUT     P9DIR|=BIT4+BIT5
    #define Data0_H     P9OUT|=BIT4
    #define Data0_L     P9OUT&=~BIT4
    #define Data1_H     P9OUT|=BIT5
    #define Data1_L     P9OUT&=~BIT5
    //控制线
    #define DataWROUT   P9DIR|=BIT6
    #define DataWR_H    P9OUT|=BIT6
    #define DataWR_L    P9OUT&=~BIT6
    //=================================函数申明=============================//
    //底层驱动函数
    extern void MAX262_Init(void);
    extern void WriteAddr(uchar addr);
    extern void WriteData(uchar data);
    //基本功能函数
    extern void  SetAMode(uchar mode);//A通道设置函数
    extern void  SetAF(uchar freq);
    extern void  SetAQ(uchar Qvalue);
    extern void  SetBMode(uchar mode);//B通道设置函数
    extern void  SetBF(uchar freq);
    extern void  SetBQ(uchar Qvalue);
    //高级功能函数
    extern uchar ComputeFN(uchar mode,long int fclk,long int f0);
    extern uchar ComputeQN(uchar mode,float Q);
    
    #endif
    

     

     

  • 相关阅读:
    java 构建一个简单的菜单
    java JSplitPane
    java 使用ActionListener监控
    java 显示单选按钮
    工作 激情
    明天会更好
    记录
    现在
    嘿嘿
    书籍 知识
  • 原文地址:https://www.cnblogs.com/yuesheng/p/2146127.html
Copyright © 2020-2023  润新知