zoukankan      html  css  js  c++  java
  • 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
    

     

     

  • 相关阅读:
    Notes of Daily Scrum Meeting(12.18)
    Notes of Daily Scrum Meeting(12.17)
    Notes of Daily Scrum Meeting(12.16)
    Notes of Daily Scrum Meeting(12.8)
    Notes of Daily Scrum Meeting(12.5)
    Notes of Daily Scrum Meeting(12.3)
    Notes of Daily Scrum Meeting(11.12)
    Linux中profile、bashrc、bash_profile之间的区别和联系
    Linux GCC编译
    mysql 5.7.16 远程连接
  • 原文地址:https://www.cnblogs.com/yuesheng/p/2146127.html
Copyright © 2011-2022 走看看