完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电压电流等十余个参数需要做到超过额定值一定的时间后输出故障指示
请问多个参数如何实现精准的计时?多个参数的计时又不能互相影响? 也许同一时间只有一个参数会超过额定值,也许同一时间有多个参数超过额定值 计时精度:有的参数需要精确到1ms 有的参数需要100s systick已经用作精准延时,在延时中计数器会清零。 那么计时有什么好的方法呢? 感谢 大神们请指点个思路 |
|
相关推荐
1个回答
|
|
给你说一个方法,你定义一个结构体,比如:
typedef struct{unsigned long err_trig_ms; //开始超过额定值的时间点,只起记录作用用来产生err_commit_msunsigned long err_commit_ms; // 等待确认故障的时间点,由触发时间点确认uint8_t err_id; // 每个错误的id,建议使用enum定义好uint8_t is_err_trigged; // 是否此错误已经被触发}PassLimit_Fault_Info_t;这个结构体每个故障定义一个。 typedef struct{uint8_t next_trig_id = 0; // 0表示无故障,其它id表示下一次需要检查的fault的err_idunsigned long next_check_point; //下一次需要比较的时间点,由next_trig_id确定uint8_t on_fault_cnt; // 正在发生等待确认的故障id,故障已经清除或者已经确认的不再此列表中不计算}FAULT_MGMT_t;static FAULT_MGMT_t sys_fault_mgmt; //系统故障管理结构体每次故障被触发的时候就刷新当前发生故障的结构体,然后更新一下sys_fault_mgmt。比如当前的sys_fault_mgmt.next_trig_id不为零,就比较一下当前发生的故障要检查的时间点是否早于sys_fault_mgmt.next_check_point.如果更早就用这个故障的特征刷新。如果更晚就不用刷新。总之在故障产生、清除和确认的时候都刷新sys_fault_mgmt。而每次1ms中断的时候就只比较sys_fault_mgmt上面的事件。这个比较很简单不会耗费很多资源。 个人觉得当故障是这样的时候,裸机程序可以这样管理故障。当然如果你的系统有现成的链表。那么用链表的方法可能更好。就是说每次将最先需要检查的id放在链表的头部。依照事件顺序,插入新发生故障的链表可能会更好。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1777 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1621 浏览 1 评论
1080 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
728 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1678 浏览 2 评论
1938浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
731浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
570浏览 3评论
595浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
554浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 10:42 , Processed in 0.840173 second(s), Total 81, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号