10030|21

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【求助】看门狗周期太短的问题? [复制链接]

我现在程序用的是4M晶振。不分频(程序上的要求)

这样,周期最长的 WDT_ARST_1000的看门狗刷新周期就是:32768/4000000=8.192ms

按照惯例在主循环的末尾刷看门狗的话,对于我的程序结构根本不够时间。(我的主循环要200ms一次)

我应该怎么设置看门狗?

最新回复

好帖子! 不过F425用外部基准后好象内部测温2极管就没变化了,这个在13X,14X上没有发现,不知道是不是F425特殊点  详情 回复 发表于 2005-7-7 00:51
 
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
程序中心刷几次
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
你的LFXT1没接时钟源吗?

WDT_ARST_1000 看门狗可用的是辅助时钟ACLK!
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

4
 
是啊!MCLK为4M不变,而WDT的时钟源ACLK可以通过分频得到。
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

5
 
如果定时器要用ACLK且是不分频的,使用看门狗时能对ACLK分频吗?
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

6
 
1、用 32k 晶振时 WDT 可以定时到1秒,只要SSEL =1,就行了
mov.w #WDTPW+WDTSSEL+WDTIE+WDTCNTCL,&WDTCTL
2、WDT 的时钟分频不会影响到TA、TB的时钟
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

7
 
我必须用4M晶振,不过现在问题都不是上面大家说的。

我在主循环中,有这样一句:

while(stop==FALSE);

在中断中完成采样stop=TRUE,这时主循环才往下走。不然就一直循环while中,

我尝试将刷看门狗放在:
while(stop==FALSE)
{
刷看门狗;
}

单步运行观察,每次执行到这里刷的时候,单步到下一步反而会使程序复位?!?!(本来的刷看门狗倒起了反作用)

这和晶振周期无关,我试过不同的主频。

我怀疑和中断有关。我的中断:TimerA0捕获模式测频率,TimerA1溢出配合计算频率
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

8
 
关狗试试?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用:
作者: mmtcyq
1、用 32k 晶振时 WDT 可以定时到1秒,只要SSEL =1,就行了
mov.w #WDTPW+WDTSSEL+WDTIE+WDTCNTCL,&WDTCTL
2、WDT 的时钟分频不会影响到TA、TB的时钟
WDT的分频操作具体怎么写,我以前没有用过,查了些资料,没有查到,能否写几条语句出来?
谢谢~~
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

10
 
用 SSEL 选择是用 MSCLK 还是用 ACLK,PUC后,默认SMCLK(SSEL = 0)

在用ACLK时,用 IS1 IS0 进行分频(IS0-->WDTCTL.0,IS1-->WDTCTL.1),见下表:

IS1 --- IS0 ------------- 效果
――――――――――――――――――
1 ------ 1 ------ tACLK × 2^6
――――――――――――――――――
1 ------ 0 ------ tACLK × 2^9
――――――――――――――――――
0 -------1 ------ tACLK × 2^13
――――――――――――――――――
0 ------ 0 ------ tACLK × 2^15
――――――――――――――――――
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

11
 
是Timer_A0中断引起的。可是目前还没有好的解决方法。因为是F1121,不能用低频晶振倍频。为了采样精度,只能用4M晶镇。SMCLK由晶振8分频给WDT提供时钟源,这样看门狗周期最厂为32768/500K=65.536ms……
唉,要是能达到12*16=192ms就好了。这样中断时间也足够。

不知道为什么进入Timer_A0捕获采脉冲就会造成这样的结果……
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

12
 
你的程序执行时间有 200ms ?主程序是连续执行的吗?
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

13
 
主循环:

while(1)
{
…………
while(stop==FALSE){刷看门狗}
刷看门狗
}

程序结构是,运行到while就在while循环里等中断的标志位stop=TRUE。这样当然主循环会等很久,我的中断12×16ms一次置标志位。
不过纳闷的是,在while循环里刷看门狗根本不起作用……。

我已经用SMCLK做看门狗时钟源了,4M 8分频。WDT周期也就是:32768/500K=65.536ms
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

14
 
哪就别用While语句在哪里等,什么时候都可以检查 STOP == TRUE 嘛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

15
 
请教:以前没有用过看门狗,现在要用发现有点麻烦
我只接了个40K 的晶震,系统中用到了TA,不能对ACLK用BCSCTL1进行分频,我的思路是这样的在主循环中不断的喂狗和放狗,先喂后放,这样如果出现程序跑飞就复位.
WDTCTL=WDTPW+WDTCNTCL;//喂狗
WDTCTL=WDTPW+WDTSSEL//放狗,选择ACLK为时钟
现在的现象是,我这样用了后,系统不断的复位,请教看门狗可以看门多长时间?是不是我的主循环执行一次时间太长了,我用40K的晶震最长让看门狗看门多长时间?
 
 
 

回复

90

帖子

0

TA的资源

一粒金砂(初级)

16
 
哪要看您的程序执行时间(最恶劣情况),设定 WDT 的监控时间远大于该时间就可以了。
40k(40960Hz)晶振,用 mov.w #WDTPW+WDTSSEL+WDTIE+WDTCNTCL,&WDTCTL,设置 WDT 的监控时间为0.8 秒。

用看门狗的时候,关键是要保证“喂狗”定期、及时。

在没有使用任务调度或非定时唤醒这两种主程序结构情况下,要使用内部 WDT 作为看门狗,最好用定时器中断来“喂狗”,在主程序中“喂狗”不太可靠。
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

17
 
谢谢楼上的回复,我有两个问题,还请指教:
1:WDTCTL=WDTPW+WDTCNTCL;//喂狗语句
WDTCTL=WDTPW+WDTSSEL; //放狗
这两条语句是否正确,能否实现相应的功能?
2:我系统中用到了定时器,定时器的中断时间间隔为1秒钟,可以肯定不可以在定时器中喂狗,在主程序中喂狗
在什么情况下会不可靠?
 
 
 

回复

91

帖子

0

TA的资源

一粒金砂(初级)

18
 
1、放狗与喂狗:WDTCTL = WDTPW + WDTSSEL + WDTIE + WDTCNTCL
(ACLK = 40k 时,喂狗周期为 0.8 秒)
2、停狗:WDTCTL = WDTPW + WDTHOLD
3、定时器有BT、TA、TB,用满了?
4、如果一定要在主程序中喂狗,哪只有在主程序及中断服务程序中多处放置喂狗语句。否则,就必须保证喂狗周期不能大于总的程序执行时间
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

19
 
标定Voffset,说起来也不复杂:

就是器件放置在某一环境温度下(比如室温),经过一段时间达到热平衡后,

记录室温T0 和 AD的读出值ADvalue0,注意 T0 的单位是K, T0(K) = T0(C) + 273.15

则有

Vsensor0 = Vref * (ADvalue0 - 32768) / 65535

T0 = (Vsensor0 - Voffset) / (1.32mV / K)

==>

Voffset = Vsensor0 - T0 * 1.32

在实际的计算中,并不需要求出 Voffset,

因为测温时,通过 T0 和 Vsensor0 就可以得到结果了

T = (Vsensor - Voffset) / TempCo
= (Vsensor - Vsensor0 + T0 * TempCo) / TempCo
= (Vsensor - Vsensor0) / TempCo + T0

其中 TempCo 为温度系数,精度要求不高时取典型值1.32即可。


以下是对温度系数TempCo的分析:

假设在温度 T0 经过标定得到 Vsensor0,即有

T = (Vsensor - Vsensor0) / TempCo + T0

由TempCo的误差(dTempCo)产生的测温误差(dT)为

dT = - dTempCo * (Vsensor - Vsensor0) / (TempCo * TempCo)
= - (dTempCo / TempCo) * (T - T0)

==>

dT / (T - T0) = - dTempCo / TempCo

可以看出相对测温误差和温度系数相对偏差成正比。

比如,某种应用,需要MCU工作在 5 ~ 45C 之间,
Voffset 在 23C 经过标定,即 T0 = 23C

当 1.18 < TempCo < 1.46 即 TempCo = 1.32 +- 0.14 时,

dT / (T - T0) = - dTempCo / TempCo = +-0.14 / 1.32 = +-10.6 %

将会产生最大 +-10.6% 的相对测温误差

在5C时, 测温误差 dT = +-10.6% * (5-23) = +-1.9C
在20C时,测温误差 dT = +-10.6% * (20-23) = +- 0.32C
在23C时,测温误差 dT = +-10.6% * (23-23) = +- 0C
在25C时,测温误差 dT = +-10.6% * (25-23) = +- 0.21C
在45C时,测温误差 dT = +-10.6% * (45-23) = +- 2.3C

如果上述误差是允许的,则不需要标定TempCo,否则就要标定。

标定TempCo,需要选择两个温度点 T0, T1,

TempCo = (Vsensor1 - Vsensor0) / (T1 - T0)
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

20
 
谢谢,我研究一下!
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/9 下一条

 
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
快速回复 返回顶部 返回列表