利用MSP430调采集脉冲程序(疑问+解答)

发布者:pengbinyyy最新更新时间:2016-08-15 来源: eefocus关键字:MSP430  采集脉冲 手机看文章 扫描二维码
随时随地手机看文章
         在调试过程中利用CPU端口模拟周期为1.25S,脉冲宽度为20ms 40ms 60ms ,时采集数据,采集数据时的

问题:究竟采集多少个数据能够把一个周期的信号都采集到,

方法是:利用大数组来采集根据实际读出的数据来计算一个周期需要采集的点数。

根据DATASHEET利用SHT_0--15 来选择采样周期,再加上完成AD转换需13个ADC12CLK,依据此来计算与实际采到的数不符合,不知为什么,

问题2:当时为得到2.4s 周期的脉冲,脉冲宽度为300ms ,按道理采集的数据应该多才对,但实际测试一个周期

             采集的数据确减少。(说明:当时模拟周期信号时用是ACLK,但当模拟2.4ms的周期信号时,把ACLK进

           行了2分频,但我感觉,因为AD采样采用不同的时钟,因些应该与分频没关系,但实际确不是这样,

          为什么?希望日后能发现这个问题)

终于找到问题所在了: :::::::::::::::::

msp430---------最大特色在于低功耗,然而低功耗确在于灵活时钟的应用。

MCU的灵魂在于----------CLK

而造成上面出现问题的原因----------------------------就在于对基础时钟应用不当 ,下面具体解说:

涉及的代码如下:

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;      // Stop WDT

  P6SEL |= 0x08;                 // Enable A/D channel inputs

  BCSCTL1 &= ~XT2OFF;

  BCSCTL2 = SELM_2; //select XT2;

  ADC12CTL0 = ADC12ON+MSC+SHT0_8+REFON+REF2_5V; 

// Turn on ADC12, extend sampling time

  ADC12CTL1 = SHP+CONSEQ_2 +ADC12DIV_7+ ADC12SSEL_2;

// Use sampling timer, repeated sequence+ ADC12DIV_7

  ADC12MCTL0 = SREF_1+INCH_3;

  ADC12IE = 0X01;

  ADC12CTL0 |= ENC;          // Enable conversions

  ADC12CTL0 |= ADC12SC;     // Start conversion

  TACCTL0 |=   CCIE ;

  TACCTL1 |=   CCIE ;

  /*

  //按周期是1.25S来写的脉冲程序SH0_8 +ADC12DIV_7

  //TACCR1 = 0X9D70; //20mS   14/863/870 = 0.0162 20/1250=0.016

  //TACCR1 = 0X9AE0;//40mS  28/863/870=0.0324 40/1250=0.032

  //TACCR1 = 0x9851; //60mS   56/870

  //TACCR0 = 0XA000;

 */

  //为了写出周期为2.4S,脉冲为300MS的程序,需要修改的地方为

  BCSCTL1 = DIVA_1; //对ACLK进行2分频;

  //TACCR1 = 0x7334; //PULSE 600MS

  TACCR1 = 0x8667; //PULSE 300MS

  TACCR0 = 0X999A; //周斯2.4S

  /*

  //并且调试中发现,

  //如果采用SHT0_8+8分频的话,周斯为124, 300ms时,为15或16/124=0.125

  //                                      600ms时,31/124=0.25

  //如果采用SHT0_6+8分频的话,周斯为236, 300ms时,为29或30/235或236=0.125

  //                                      600ms时,59/236 = 0.25

 

针对1.25S来写的脉冲程序SH0_8 +ADC12DIV_7

计算:由于采用DCO = 800K , 且进行了8 分频,所以周期为10us.

转换一个数需要的时间为:(SHT0_8)256+16个ADC12CLK , 也即为272*10=2.72ms

所以对于周期为1.25S, 将会采集到1250/2.72=459.5 而实测为459,理论与实际符合,

采样定时器占256个ADC12CLK

 同步占 3个ADC12CLK

转换占13个ADC12CLK

 

从上面程序可以看到执行下面两句目的是:打开外部晶振,并让主时钟选用外部晶体,然后让ADC选用主时钟,并进行8分频。

BCSCTL1 &= ~XT2OFF;

  BCSCTL2 = SELM_2+DIVM_3; //select XT2;

虽然写了上面的语句,但实际上上面的语句完全不起作用,

After a PUC, the internal resistor is selected for the DC generator, RSELx =4, and DCOx = 3, allowing the DCO to start at a mid-range frequency. MCLK and SMCLK are sourced from DCOCLK.

The basic clock module incorporates an oscillator-fault detection fail-safe feature. The oscillator fault detector is an analog circuit that monitors the LFXT1CLK (in HF mode) and the XT2CLK. An oscillator fault is detected when  either clock signal is not present for approximately 50 µs. When an oscillator  fault is detected, and when MCLK is sourced from either LFXT1 in HF mode or XT2, MCLK is automatically switched to the DCO for its clock source. This allows code execution to continue, even though the crystal oscillator has stopped

从以上两段话可知及实际实验可知:

正因为程序写的是用外部时钟,从而按外部时钟来计算时间,而程序执行时由于小于晶振起动时间,因些外部晶体没有起动,从而自动转入DCO来执行程序,从而造成假象。

 

对程序中周期为2.4S的脉冲采样时,采到的数据反而小的解释如下:

由于定时用ACLK,所以当定时超过2秒时,我对ACLK进行了2分频,从而程序先后执行了下面两条语句:

BCSCTL1 &= ~XT2OFF;

BCSCTL1 = DIVA_1; //对ACLK进行2分频;

执行以上两句确实实现了2.4s的准确定时,但同时引入问题是:执行第二句时,是对其赋值0X10, 以至于把默认的RSELX = 4改为0,从而DCO由800K降为50K左右,从而采集到的数据大大减少,

而正确的语句应为:BCSCTL1 | = DIVA_1; //对ACLK进行2分频;

从实际测试数据反推:(((2400/124)/272)/8) 其倒数再乘以1000得114526,即114K,

从DATASHEET图可以看出当DCOX=3 RSELX=4时,选取的是近110K的时钟,从而上面的奇怪现象得以解释。

 

并且要使外部晶体正确起振:

After a PUC, the basic clock module uses DCOCLK for MCLK. If required,

MCLK may be sourced from LFXT1 or XT2.

The sequence to switch the MCLK source from the DCO clock to the crystal

clock (LFXT1CLK or XT2CLK) is:

1) Switch on the crystal oscillator

2) Clear the OFIFG flag

3) Wait at least 50 µs

4) Test OFIFG, and repeat steps 1-4 until OFIFG remains cleared.

; Select LFXT1 (HF mode) for MCLK

BIC #OSCOFF,SR ; Turn on osc.

BIS.B #XTS,&BCSCTL1 ; HF mode

L1 BIC.B #OFIFG,&IFG1 ; Clear OFIFG

MOV #0FFh,R15 ; Delay

L2 DEC R15 ;

JNZ L2 ;

BIT.B #OFIFG,&IFG1 ; Re?test OFIFG

JNZ L1 ; Repeat test if needed

BIS.B #SELM1+SELM0,&BCSCTL2 ; Select LFXT1CLK

其C语言为:

 Do

{

IFG1 &= ~OFIFG;                 //清除晶振失败标志

for (i = 0xFF; i > 0; i--);     // 等待8MHz晶体起振

}

while ((IFG1 & OFIFG));             // 晶振失效标志仍然存在?

在调试程序中加入以上判别语句后,一切都下常起来。 

结论:一切不合理的现象皆是有原因的,发现它,找到它,掌握它。

关键字:MSP430  采集脉冲 引用地址:利用MSP430调采集脉冲程序(疑问+解答)

上一篇:msp430AD采集数据记录及分析
下一篇:MSP430串口收发程序

推荐阅读最新更新时间:2024-03-16 15:05

MSP430单片机定时器
在MSP430系列单片机中带有功能强大的定时器资源,这定时器在单片机应用系统中起到重要的作用。 在F11X,F11X1中是不带定时器B资源的。430的定时模块:看门狗定时器,定时器A,定时器B。定时器A主要资源特点有16位定时计数器,其计数模式有4种。多种计数时钟信号供输入的捕获/比较功能寄存器和8种输出模式的3个可配置输出单片。 定时器资源功能说明 (1)看门狗定时器(WDT):主要用于程序在生错误时用作单片机系统复位重起的。另外,也可作为一个基本定时器使用。 (2)定时器A:作基本定时器使用,结合捕获/比较功能模块可实现时序控制,可编程波形信号发生输出。可作串口波特率 (3)定时器B:作基本定时器使用,与定时器A基本
[单片机]
MSP430在频率测量系统中的应用
1 概述 在通信系统中,频率测量具有重要地位。近几年来频率测量技术所覆盖的领域越来越广泛,测量精度越来越高,与不同学科的联系也越来越密切。与频率测量技术紧密相连的领域有通信、导航、空间科学、仪器仪表、材料科学、计量技术、电子技术、天文学、物理学和生物化学等。 频率测量一般都是由计数器和定时器完成,将两个定时/计数器一个设置为定时器,另一个设置为计数器,定时时间到后产生中断,在中断服务程序中处理结果,求出频率。这种方法虽然测量范围较宽,但由于存在软件延时,尽管在高频段能达到较高的精度,而低频段的测量精度较低。所以利用单片机测频时,如果选择不好的测量方法,可能会引起很大的误差。测量频率时如果不是真正依靠硬件控制计数或定时,而是
[测试测量]
MSP430内部看门狗及复位电路的研究
今市面上流行的一些单片机,多嵌有内部WDT,如TI的MSP430系列,Philips的P87XXX和P89XXX系列,MICroChip的PIC列,Atmel的AT89SXX系列和HoLTEk公司的Htxxx系列。但是这些内部看门狗在工作时,多存在一定的误差。一些工程师在设计的过程中,由于忽略了这一点,导致系统出现异常。MSP430系列单片机是美国德州仪器公司(TI)近几年开发的新一代单片机,该系列是一款16位、具有精简指令集、超低功耗的全新概念混合型单片机。在众多单片机系列中,由于它具有极低的功耗、丰富的片内外设和方便灵活的开发手段,已成为一颗耀眼的新星。其内部自带看门狗及复位电路,理论上如果程序跑飞,可用看门狗将其复位。但在实
[单片机]
<font color='red'>MSP430</font>内部看门狗及复位电路的研究
MSP430开发板调试
好长时间没有用430的开发板了。今天把板子拿出来已经盖了很多灰。重新装了一下IAR,从昨天下午就开始折腾了,遇到了各种问题,一直到现在才弄好。 总结有以下几点要注意的: 1.win7下安装IAR,包括运行注册机,都需要勾选“XP兼容模式”、“管理员身份”。 2.USB电源要接在机箱后面的接口,否则Debug时会提示找不到设备。 3.Debug前要选择好仿真器(并口)。
[单片机]
MSP430串口接收程序(使用中断)
使用接收中断,将接收到的字符再发送出去。每次接收到字符之后都会退出低功耗模式,从而在主函数中将接收到的字符再发送出去。 /********************************************** *程序描述:单片机的P3.4、P3.5作为串口接收字符,将接受到的字符再发送出去 ***********************************************/ #include msp430x14x.h void usartInit(void); //串口初始化 void main(void) { WDTCTL = WDTPW + WDTHOLD; /
[单片机]
MSP430x09x系列 MCU在电动剃须刀中的应用
摘要 MSP430x09x是TI推出的业界首款名符其实的0.9V微控制器 (MCU),它的出现让便携式设备中真正使用单电池供电成为可能,将推动单节电池供电的、更小巧、更低成本的便携式产品的发展。与现有号称0.9V 技术的MCU不同,MSP430x09x能够以0.9V的低电压运行所有模拟和数字逻辑,因此该系列MCU无需板载升压转换器,从而可为整体系统降低功耗,减少了对外部电路的需求。同时,在降低工作电压的情况下,仍继承了MSP430 系列单片机原有的优秀特性和丰富外设,并开创性的设计了功能丰富的模拟功能模块—模拟功能池(A-Pool)。本文将介绍MSP430x09x系列MCU在电动剃须刀系统中的应用,并着重阐述该系统的软硬件设计。
[单片机]
<font color='red'>MSP430</font>x09x系列 MCU在电动剃须刀中的应用
MSP430串行写入BOOTSTRAP与加密熔断功能
OOTSTRAP用于在MSP430设计开发及系统更新时对Flash存储器的编程。它可以用经串口协议的命令来激活,使得用户可以通过PC控制MSP430,并实现数据交换。烧断Flash的熔丝是用来保护用户在Flash中的程序代码。本文主要介绍我们制作的BOOTSTRAP这一开发工具的功能、软硬件结构以及熔断工具的制作方法。 引言   对于MSP430单片机的开发调试有多种技术方案,例如EPROM方式、OTP方式、仿真开发系统方式、JTAG和BOOTSTRAP方式。BOOTSTRAP(又名BootStrap Loader,简称BSL)可与另一种Flash仿真工具JTAG控制器配合使用。对于Flash型的MSP430单片机初期开发
[单片机]
<font color='red'>MSP430</font>串行写入BOOTSTRAP与加密熔断功能
MSP430G2553】图形化开发笔记(2) 系统时钟和低功耗模式
平台: Code Composer Studio 6.2.0 + Grace 2.2.0 MSP430G2553 LaunchPad™ Development Kit (MSP-EXP430G2ET)   以下大部分内容摘自《LaunchPad口袋实验平台 —— MSP-EXP430G2篇》傅强、杨艳 编著(TI大学计划嵌入式微控制器技术丛书) 系统时钟概述   现代单片机的制造工艺都差不多,靠电子元件本身节能的潜力非常有限。单片机的低功耗主要是依靠间歇工作实现的,而间歇工作的方法就是启停系统时钟。如果像普通 51 单片机那样只有一个时钟,关掉时钟意味着单片机全面停工,节能的同时也没法正常使用了。所以出于低功耗的需要,MS
[单片机]
【<font color='red'>MSP430</font>G2553】图形化开发笔记(2) 系统时钟和低功耗模式
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved