打印
[学习笔记]

AC7811使用ADC门限功能实现主电检测

[复制链接]
21812|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 JasonLee27 于 2020-3-4 15:13 编辑

软件环境: keil 5.23 SecureCRT
硬件环境: AC7811通用开发板 ATC-LINK

汽车上的电子产品采用汽车蓄电池供电,一般要求的正常工作电压范围是9~16V,过低,过高都需要记录故障。
对于这个功能,我们都会使用ADC来采集计算主电电压值。但如果一直采用软件的方式去判断是否过压欠压,未免太浪费CPU,所以ADC都会提供一个门限功能(AC7811叫模拟看门狗)。
工程师可以设置触发中断的上下限,在采样值未超出门限时,不会有中断,一旦超出后,就会产生ADC中断,这个时候在处理异常,就可以节省很多CPU资源。

我们可以看下7811的模拟看门狗配置说明


这里我使用mode5(连续扫描模式),模拟看门狗选择单规则组通道。

通用开发板上刚好有个ADC_IN1的模拟按键,可以产生不同的AD值,便于我测试

在代码中定义上下门限,以及超出门限后的恢复门限,这里异常门限和恢复门限值不同,是为了防止电压刚好在门限上下范围浮动,造成一直触发中断的问题。
#define AMOHighValue    (3000)
#define AMOLowValue     (1000)

#define AMOLowRecoverValue  (1100)
#define AMOHighRecoverValue (2900)
然后是adc中断程序,根据采样值判断当前状态(AC7811并不能直接告诉你是超出上门限还是下门限,so,自己判断吧。根据当前状态重新设置门限,这是因为当采样值超出门限后,是会一直产生中断的,所以,要么产生中断后,关闭中断,要么重新设置门限将当前采样值包含进去,否则会一直产生中断,导致其他程序无法运行(话说我最开始还吐槽过这个设定,觉得这么搞怎么用,后来看了下瑞萨和NXP的,发现貌似别人也差不多。)
void ADC_Callback(void) 
{
    if (ADC_GetIntFlag(ADC, ADC_FLAG_AMO))  ///<发生模拟看门狗事件
    {
        if (s_sampleValue[0] > AMOHighValue)   ///<超出上限
        {
            ADC_SetAnalogWatchDogThreshold(ADC, 4095, AMOHighRecoverValue); ///<设置恢复门限
            printf("\r\n too High %d ", s_sampleValue[0]);
        }
        else if (s_sampleValue[0] < AMOLowValue) ///<低于下限
        {
            ADC_SetAnalogWatchDogThreshold(ADC, AMOLowRecoverValue, 0); ///<设置恢复门限
            printf("\r\n too Low %d ", s_sampleValue[0]);
        }
        else if ((s_sampleValue[0] > AMOLowRecoverValue) || (s_sampleValue[0] < AMOHighRecoverValue))   ///<进入正常值
        {
            ADC_SetAnalogWatchDogThreshold(ADC, AMOHighValue, AMOLowValue); ///<重设异常门限
            printf("\r\n Recover %d ", s_sampleValue[0]);
        }
        else
        {
            ///<should not be here
            printf("\r\n error %d", s_sampleValue[0]);
        }
    }
   
    ADC_ClearFlag(ADC, ADC_FLAG_AMO | ADC_FLAG_EOC | ADC_FLAG_IEOC); ///<直接清除所有标志,
}
下面是我测试的打印内容
 This is adc_sample1 demo

too High 4095
Recover 2088
too High 4095
Recover 2090
too High 4095
Recover 2108
too High 4095
too Low 928
too High 4092
too Low 893
too High 4095
Recover 2101
too High 3164
Recover 2111
too High 4043


最后的最后,附上完整的工程(代码有点乱,大家凑合着看)
游客,如果您要查看本帖隐藏内容请回复

使用特权

评论回复

相关帖子

沙发
zhuotuzi| | 2020-3-10 20:46 | 只看该作者
非常棒,如果IO不够,有富余的ADC,绝对可以。

使用特权

评论回复
板凳
598330983| | 2020-3-19 18:32 | 只看该作者
操作非常棒。

使用特权

评论回复
地板
734774645| | 2020-3-24 11:55 | 只看该作者
非常棒的操作

使用特权

评论回复
5
今晚跟你睡| | 2020-3-26 09:00 | 只看该作者
感谢分享

使用特权

评论回复
6
jazzyfox| | 2020-4-2 09:44 | 只看该作者
理论上讲,这样是没有问题的,但是实际使用过程中,不一定好用,需要把瞬间的故障工况找出来,比如,某某电机工作了,启动瞬间;套一句老外文献上的话,汽车电源总线是非常肮脏的,

使用特权

评论回复
7
JasonLee27|  楼主 | 2020-4-3 11:34 | 只看该作者
jazzyfox 发表于 2020-4-2 09:44
理论上讲,这样是没有问题的,但是实际使用过程中,不一定好用,需要把瞬间的故障工况找出来,比如,某某电 ...

这个就是整车厂考虑的问题了,对零部件厂商来说,只需要记录电源故障即可。

使用特权

评论回复
8
jazzyfox| | 2020-4-3 11:36 | 只看该作者
JasonLee27 发表于 2020-4-3 11:34
这个就是整车厂考虑的问题了,对零部件厂商来说,只需要记录电源故障即可。 ...

单纯的记录电源故障,有什么特殊的意义吗?还是这个用途是为应用而拓展?

使用特权

评论回复
9
JasonLee27|  楼主 | 2020-4-7 17:13 | 只看该作者
jazzyfox 发表于 2020-4-3 11:36
单纯的记录电源故障,有什么特殊的意义吗?还是这个用途是为应用而拓展? ...

诊断里面有做电源过压和欠压故障记录,一版低于9V和高于16V都属于故障,但这个情况下ECU并非一定就工作异常了。
有时候汽车在行驶过程中出现问题,4S店或原厂需要排查问题的时候就可以通过读取诊断故障码查看历史故障,进而判断故障原因。这个不局限于欠压或者过压。
二来,这个功能并不单纯只是检测电源故障问题,像TBOX是带备用电池的,在整车电源过低或者发生意外碰撞之类导致电源断开的情况下,需要TBOX能够立即切换为备用电池供电,这个功能虽然采用硬比较器也可以实现,但如果MCU内部就可以实现这个功能,那就省去了一个外围器件。

使用特权

评论回复
评论
jazzyfox 2020-4-17 20:26 回复TA
算是黑匣子功能吧 
10
fcccc| | 2020-4-8 18:14 | 只看该作者
谢谢分享.

使用特权

评论回复
11
nihaohong| | 2020-9-15 08:17 | 只看该作者
学习。。。。。。

使用特权

评论回复
12
swustb226| | 2020-9-16 14:19 | 只看该作者
xuexixuexi

使用特权

评论回复
13
lxzjlu| | 2021-1-28 14:40 | 只看该作者
学习学习..附件无法下载

使用特权

评论回复
14
神木凌宇| | 2021-2-3 23:58 | 只看该作者
借鉴学习

使用特权

评论回复
15
神木凌宇| | 2021-2-4 09:57 | 只看该作者
附件无法下载,楼主能不能重新上传分享一下,谢谢

使用特权

评论回复
16
单片小菜| | 2021-2-4 11:57 | 只看该作者
这种操作太厉害了,不错的选择,很赞的。

使用特权

评论回复
17
里面有晴雨| | 2021-2-5 09:19 | 只看该作者
还能这么操作,不错,不错的。

使用特权

评论回复
18
数据采集存储| | 2021-2-19 19:06 | 只看该作者
我感觉这么操作,真的不错,哈哈!

使用特权

评论回复
19
brightchl| | 2021-4-23 15:35 | 只看该作者
借鉴学习

使用特权

评论回复
20
Junmin6| | 2021-5-13 10:09 | 只看该作者
赞,多发点这种应用

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

66

主题

415

帖子

10

粉丝