6436|17

19

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

基于msp430f5529平台的高量程数字频率计,测频的地方可以不用FPGA吗? [复制链接]

求教呀,想直接在MSP430平台上直接实现频率计的功能,频率测量指标能够达到1M,请教大神。。。

最新回复

#在这里快速回复#您好,我现在也在做这个,但是我之前用的msp430f149的程序改了一下烧到5529,不能测频。想问一下能不能把你的代码给我看一下?  谢谢  详情 回复 发表于 2016-7-27 22:08

点评

记得例程里有一个通过外晶振校准DCO的程序,能测到16M  详情 回复 发表于 2013-10-17 15:58
 
点赞 关注

回复
举报

4005

帖子

0

TA的资源

版主

推荐
 

回复 4楼fuxin5682189 的帖子

//******************************************************************************
//  MSP430G2xx3 Demo - DCO Calibration Constants Programmer
//
//  NOTE: THIS CODE REPLACES THE TI FACTORY-PROGRAMMED DCO CALIBRATION
//  CONSTANTS LOCATED IN INFOA WITH NEW VALUES. USE ONLY IF THE ORIGINAL
//  CONSTANTS ACCIDENTALLY GOT CORRUPTED OR ERASED.
//
//  Description: This code re-programs the G2xx2 DCO calibration constants.
//  A software FLL mechanism is used to set the DCO based on an external
//  32kHz reference clock. After each calibration, the values from the
//  clock system are read out and stored in a temporary variable. The final
//  frequency the DCO is set to is 1MHz, and this frequency is also used
//  during Flash programming of the constants. The program end is indicated
//  by the blinking LED.
//  ACLK = LFXT1/8 = 32768/8, MCLK = SMCLK = target DCO
//  //* External watch crystal installed on XIN XOUT is required for ACLK *//
//
//           MSP430G2xx3
//         ---------------
//     /|\|            XIN|-
//      | |               | 32kHz
//      --|RST        XOUT|-
//        |               |
//        |           P1.0|--> LED
//        |           P1.4|--> SMLCK = target DCO
//
//  D. Dang
//  Texas Instruments Inc.
//  May 2010
//   Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 3.42A
//******************************************************************************
#include "msp430g2553.h"

#define DELTA_1MHZ    244                   // 244 x 4096Hz = 999.4Hz
#define DELTA_8MHZ    1953                  // 1953 x 4096Hz = 7.99MHz
#define DELTA_12MHZ   2930                  // 2930 x 4096Hz = 12.00MHz
#define DELTA_16MHZ   3906                  // 3906 x 4096Hz = 15.99MHz

unsigned char CAL_DATA[8];                  // Temp. storage for constants
volatile unsigned int i;
int j;
char *Flash_ptrA;                           // Segment A pointer
void Set_DCO(unsigned int Delta);

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  for (i = 0; i < 0xfffe; i++);             // Delay for XTAL stabilization
  P1OUT = 0x00;                             // Clear P1 output latches
  P1SEL = 0x10;                             // P1.4 SMCLK output
  P1DIR = 0x11;                             // P1.0,4 output

  j = 0;                                    // Reset pointer

  Set_DCO(DELTA_16MHZ);                     // Set DCO and obtain constants
  CAL_DATA[j++] = DCOCTL;
  CAL_DATA[j++] = BCSCTL1;

  Set_DCO(DELTA_12MHZ);                     // Set DCO and obtain constants
  CAL_DATA[j++] = DCOCTL;
  CAL_DATA[j++] = BCSCTL1;

  Set_DCO(DELTA_8MHZ);                      // Set DCO and obtain constants
  CAL_DATA[j++] = DCOCTL;
  CAL_DATA[j++] = BCSCTL1;

  Set_DCO(DELTA_1MHZ);                      // Set DCO and obtain constants
  CAL_DATA[j++] = DCOCTL;
  CAL_DATA[j++] = BCSCTL1;

  Flash_ptrA = (char *)0x10C0;              // Point to beginning of seg A
  FCTL2 = FWKEY + FSSEL0 + FN1;             // MCLK/3 for Flash Timing Generator
  FCTL1 = FWKEY + ERASE;                    // Set Erase bit
  FCTL3 = FWKEY + LOCKA;                    // Clear LOCK & LOCKA bits
  *Flash_ptrA = 0x00;                       // Dummy write to erase Flash seg A
  FCTL1 = FWKEY + WRT;                      // Set WRT bit for write operation
  Flash_ptrA = (char *)0x10F8;              // Point to beginning of cal consts
  for (j = 0; j < 8; j++)
    *Flash_ptrA++ = CAL_DATA[j];            // re-flash DCO calibration data
  FCTL1 = FWKEY;                            // Clear WRT bit
  FCTL3 = FWKEY + LOCKA + LOCK;             // Set LOCK & LOCKA bit

  while (1)
  {
    P1OUT ^= 0x01;                          // Toggle LED
    for (i = 0; i < 0x4000; i++);           // SW Delay
  }
}

void Set_DCO(unsigned int Delta)            // Set DCO to selected frequency
{
  unsigned int Compare, Oldcapture = 0;

  BCSCTL1 |= DIVA_3;                        // ACLK = LFXT1CLK/8
  TACCTL0 = CM_1 + CCIS_1 + CAP;            // CAP, ACLK
  TACTL = TASSEL_2 + MC_2 + TACLR;          // SMCLK, cont-mode, clear

  while (1)
  {
    while (!(CCIFG & TACCTL0));             // Wait until capture occured
    TACCTL0 &= ~CCIFG;                      // Capture occured, clear flag
    Compare = TACCR0;                       // Get current captured SMCLK
    Compare = Compare - Oldcapture;         // SMCLK difference
    Oldcapture = TACCR0;                    // Save current captured SMCLK

    if (Delta == Compare)
      break;                                // If equal, leave "while(1)"
    else if (Delta < Compare)
    {
      DCOCTL--;                             // DCO is too fast, slow it down
      if (DCOCTL == 0xFF)                   // Did DCO roll under?
        if (BCSCTL1 & 0x0f)
          BCSCTL1--;                        // Select lower RSEL
    }
    else
    {
      DCOCTL++;                             // DCO is too slow, speed it up
      if (DCOCTL == 0x00)                   // Did DCO roll over?
        if ((BCSCTL1 & 0x0f) != 0x0f)
          BCSCTL1++;                        // Sel higher RSEL
    }
  }
  TACCTL0 = 0;                              // Stop TACCR0
  TACTL = 0;                                // Stop Timer_A
  BCSCTL1 &= ~DIVA_3;                       // ACLK = LFXT1CLK
}

点评

// NOTE: THIS CODE REPLACES THE TI FACTORY-PROGRAMMED DCO CALIBRATION // CONSTANTS LOCATED IN INFOA WITH NEW VALUES. USE ONLY IF THE ORIGINAL // CONSTANTS ACCIDENTALLY GOT CORRUPTED OR ERASED.  详情 回复 发表于 2013-10-19 17:46
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
你要的测频精度是多少?频率范围是多少?
1M测频430还是可以的

点评

我现在能测到的是低频10Hz,高频能测到200KHz,因为做430与FPGA通信感觉没什么必要,也浪费IO资源,所以想直接通过430来测,我做的题目基础指标是1M,发挥指标10Hz~10M  详情 回复 发表于 2013-10-18 17:08
 
 
 

回复

4005

帖子

0

TA的资源

版主

板凳
 

回复 楼主fuxin5682189 的帖子

记得例程里有一个通过外晶振校准DCO的程序,能测到16M

点评

这么高。。。能说下主要的思想吗?我自己是用的闸门发来测频的。。。不知道您说的那个是???  详情 回复 发表于 2013-10-18 17:05
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳huo_hu 的帖子

这么高。。。能说下主要的思想吗?我自己是用的闸门发来测频的。。。不知道您说的那个是???

点评

测周期信号  详情 回复 发表于 2013-10-18 18:09
D:\\Program Files\\CCS5\\ccsv5\\ccs_base\\msp430\\msp430ware_1_00_01_00\\examples\\devices\\2xx\\MSP430G2xx3 Code Examples\\C\\msp430g2xx3_dco_flashcal.c  详情 回复 发表于 2013-10-18 18:07
//****************************************************************************** // MSP430G2xx3 Demo - DCO Calibration Constants Programmer // // NOTE: THIS CODE REPLACES THE TI FACTORY-PROGRAMM  详情 回复 发表于 2013-10-18 18:06
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 沙发干磨河 的帖子

我现在能测到的是低频10Hz,高频能测到200KHz,因为做430与FPGA通信感觉没什么必要,也浪费IO资源,所以想直接通过430来测,我做的题目基础指标是1M,发挥指标10Hz~10M

点评

1M是没问题的,撑死到2M,而且最求精度的话不能光使用闸门法,这种测频方法值试用于高频,低频误差太大,如果信号周期大于闸门就更可怕了,所以还需要配合使用周期法,或者直接使用等精度法一次搞定。  详情 回复 发表于 2013-10-19 17:45
那你走运了,改八改八就行了. 提醒你一下,精度是和32K的外晶振有关的.  详情 回复 发表于 2013-10-18 18:14
 
 
 

回复

4005

帖子

0

TA的资源

版主

7
 

回复 4楼fuxin5682189 的帖子

D:\Program Files\CCS5\ccsv5\ccs_base\msp430\msp430ware_1_00_01_00\examples\devices\2xx\MSP430G2xx3 Code Examples\C\msp430g2xx3_dco_flashcal.c
 
 
 

回复

4005

帖子

0

TA的资源

版主

8
 

回复 4楼fuxin5682189 的帖子

测周期信号
 
 
 

回复

4005

帖子

0

TA的资源

版主

9
 

回复 5楼fuxin5682189 的帖子

那你走运了,改八改八就行了.
提醒你一下,精度是和32K的外晶振有关的.

点评

:kiss: :kiss: :kiss: 赞呀。。我试下哈。。。谢谢版主呀。。。哈哈哈哈  详情 回复 发表于 2013-10-20 09:38
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

10
 

回复 5楼fuxin5682189 的帖子

1M是没问题的,撑死到2M,而且最求精度的话不能光使用闸门法,这种测频方法值试用于高频,低频误差太大,如果信号周期大于闸门就更可怕了,所以还需要配合使用周期法,或者直接使用等精度法一次搞定。

点评

嗯嗯。。。等精度测评我之前试下,但是测频低频还可以哦。。。就是高频也测不上去。。。您之前有做过相关的吗???  详情 回复 发表于 2013-10-20 09:40
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

11
 

回复 6楼huo_hu 的帖子

//  NOTE: THIS CODE REPLACES THE TI FACTORY-PROGRAMMED DCO CALIBRATION
//  CONSTANTS LOCATED IN INFOA WITH NEW VALUES. USE ONLY IF THE ORIGINAL
//  CONSTANTS ACCIDENTALLY GOT CORRUPTED OR ERASED.

这个不是测频的吧
 
 
 

回复

4005

帖子

0

TA的资源

版主

12
 
校正的过程就是,在Set_DCO函数中.
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

13
 

回复 9楼huo_hu 的帖子

赞呀。。我试下哈。。。谢谢版主呀。。。哈哈哈哈
 
 
 

回复

19

帖子

0

TA的资源

一粒金砂(中级)

14
 

回复 10楼干磨河 的帖子

嗯嗯。。。等精度测评我之前试下,但是测频低频还可以哦。。。就是高频也测不上去。。。您之前有做过相关的吗???

点评

做过,就用2618做的,1Hz~1M,千分之5的精度,你的等精度法肯定程序有问题, 等精度法的原理是规定一个闸门时间,不管频率高低,都必须连续测量N个脉冲的总周期,且N个 脉冲的总周期必须大于闸门时间。用  详情 回复 发表于 2013-10-20 10:26
 
 
 

回复

1185

帖子

1

TA的资源

纯净的硅(高级)

15
 
1M肯定可以。至于10M不知能不能测到。楼上已经给出答案了
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(高级)

16
 

回复 14楼fuxin5682189 的帖子

做过,就用2618做的,1Hz~1M,千分之5的精度,你的等精度法肯定程序有问题,
等精度法的原理是规定一个闸门时间,不管频率高低,都必须连续测量N个脉冲的总周期,且N个
        脉冲的总周期必须大于闸门时间。用F=N*(1/T)计算频率。基于周期法保
        证了低频精度,同时高频下并非只测一个周期,而是连续多个周期的总
        时间,精度和分辨率也很高。
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(初级)

17
 
楼主,你那个f5529频率代码还在吗?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

18
 
#在这里快速回复#您好,我现在也在做这个,但是我之前用的msp430f149的程序改了一下烧到5529,不能测频。想问一下能不能把你的代码给我看一下?  谢谢
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表