网易首页 > 网易号 > 正文 申请入驻

模拟量采集从硬件到程序,从滤波到实际值转换,多少人懂了

0
分享至

❤在单片机系统里对模拟量的处理要比数字量稍显复杂,但是只要掌握了使用技巧,使用起来也很简单,很多朋友一开始比较纠结于单片机的底层语言,非要先弄个明白才罢休,其实大可不必,重要的是我们要先学会怎么应用。

❤现以 铅酸电池电压检测充电电流检测 为例讲解模拟量的硬件和程序的设计。

如图1 为28节铅酸电池的电压检测电路,1--14节组成电池组1,15--28节组成电池组2;第1节正极为BAT+,14与15节之间为BATM,第28节负极为BAT-。输入端的8个二极管的作用是 钳位作用 ,相关电路文章: 如何用二极管实现不同电压的输出? 电 路计算如图所示。


图1:电池组电压检测电路

如图2 为铅酸电池的充电电流检测电路,TA1为工频电流互感器,输入的4个二极管为 整流二极管 ,电流流过R37(510Ω)形成压差△V,相 关文章: 解析多种整流、滤波电路 。 电路计算如图所示。



图2:电池组充电电流检测电路

如图3 为单片机STM32F103CBT6,图1和图2的模拟信号输入至单片机的PA5、PA6、PA7。


图3:STM32F103CBT6单片机

由于代码较多,为便于浏览,我就把其中一部分以截图的形式展示。

如图4 为单片机adc.c文件的底层配置,把PA5、PA6、PA7端口配置成 模拟输入模式


图4:配置端口模式

如图5 对以上三个模拟量进行模数转换并缓存入数组ADC_ConvertedValue[3],得到的AD值的范围是 0~4096


图5:模数转换并缓存

如图6 把以上两个配置函数整合在一起,定义成模拟量的初始化函数void ADC1_Init(void)。


图6:初始化

如图7 在adc.h文件里声明函数void ADC1_Init(void),另外几个函数也在adc的c文件里定义的,后面附上源程序(非截图)。


图7:声明函数

如图8 在main主函数里调用ADC1_Init初始化函数(要去掉void),初始化函数一定要放在while(1)的前面,表示在进入while(1)无限循环前只执行一次。Analog_Processing为模拟量处理函数,要放在while(1)无限循环里面(该函数在下面讲)。


图8,函数调用

以下为模拟量在main.c文件里的定义。

s16 Charging_Current; //充电电流实际值s16 Battery1_Voltage; //电池组1电压实际值s16 Battery2_Voltage; //电池组2电压实际值s16 Battery_Voltage; //电池组总电压值

❤下面三个函数的定义都在adc.c文件里面定义的。

以下代码为模拟量处理函数:①对数组ADC_ConvertedValue[3]缓存值进行滤波处理;②对滤波后的AD值转换为实际值。

/******************************模拟量处理函数******************************/void Analog_Processing(void){//对AD值进行滤波ADC_Charging_Current=Filter(ADC_ConvertedValue[0],ADC_Charging_Current,1,10);ADC_Battery1_Voltage=Filter(ADC_ConvertedValue[1],Adc_Battery1_Voltage,1,10);ADC_Battery2_Voltage=Filter(ADC_ConvertedValue[2],ADC_Battery2_Voltage,1,10);//AD值转换为实际值Charging_Current = Adc_To_Act(ADC_Charging_Current, 10, 4096, 0, 220);//22.0ABattery1_Voltage = Adc_To_Act(ADC_Battery1_Voltage, 10, 4096, 0, 267);//267VBattery2_Voltage = Adc_To_Act(ADC_Battery2_Voltage, 10, 4096, 0, 267);//267V//两组电压相加得到总电压Battery_Voltage = Battery1_Voltage + Battery2_Voltage;}

以下代码为滤波函数,滤波函数有很多,采用合适的才是最实用的(该函数滤波后的值是连续变化的,有些滤波函数滤波后的值是跳变的)。

/******************************滤波函数(base/k越大,容性越大)该函数相当于是一个电容,通常取值k=1,base=10******************************/u16 Filter(u16 NewData, u16 OldData, u8 k, u8 base){u16 uiResult;if (NewData > OldData){uiResult = NewData - OldData;uiResult *= k;uiResult += base >> 2;uiResult /= base;uiResult = OldData + uiResult; }else if (OldData > NewData){uiResult = OldData - NewData;uiResult *= k;uiResult += base >> 2;uiResult /= base;uiResult = OldData - uiResult; }else{uiResult = NewData;}
return(uiResult);}

使用方法如下:NewData表示最新采用的模拟量;OldData表示滤波后的模拟量。

ADC_Battery1_Voltage=Filter(ADC_ConvertedValue[1],ADC_Battery1_Voltage,1,10);

为便于逻辑计算、控制及显示,以下代码是把AD值转换为实际值,

/******************************AD值转换实际值函数******************************/s16 Adc_To_Act(s16 Adc_Value, s16 Pre_Adc_Min, s16 Pre_Adc_Max, s16 Pre_Act_Min, s16 Pre_Act_Max){s32 _temp;s32 _range;_temp = (s32)((Adc_Value - Pre_Adc_Min) * (Pre_Act_Max - Pre_Act_Min) / (Pre_Adc_Max-Pre_Adc_Min)) + Pre_Act_Min;_temp = Adc_Value - Pre_Adc_Min;_range = Pre_Act_Max - Pre_Act_Min;_temp = _temp * _range;_range = Pre_Adc_Max - Pre_Adc_Min;_temp = _temp + _range / 2;_temp = _temp / _range;_temp = _temp + Pre_Act_Min;return(_temp);}

使用方法如下:Adc_Value表示要转换的模拟量;Pre_Adc_Min表示模拟量AD值的最小值;Pre_Adc_Max表示模拟量AD值的最大值;Pre_Act_Min表示转换后实际值的最小值;Pre_Act_Max表示转换后实际值的最大值;(以下最大实际值220表示22.0A,是因为数码管显示需要小数表示)。

Charging_Current = Adc_To_Act(ADC_Charging_Current, 10, 4096, 0, 220);//22.0A

❤要点:

①模拟量的采样电路,我多采用运放的差分放大电路,原因是被测电压可以和运放不用共地,且可有效抑制共模噪声,可达到较高的精确线性测量,比如以上电池组的被测电压的误差与实际相差在0.3V左右;

②电池组输入至运放的8个1M的电阻是两个为一组的,且功率至少1/4W以上,因为在高压下的电阻容易老化,为保险起见,通常一个电阻的最大压差在100V以下为宜;

③电池组分为两组检测,一是为了降低元件所承受的电压,二是为了监视两组电池电压之间是否平衡,达到保护电池目的。

③函数应功能模块化,且具备通用性质,便于移植和调用,对于很多朋友应先学会如何使用,底层代码只要会配置就完全足够了。

当然,以上提供的设计是我通常的做法,能满足大多数的常规应用。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
梁朝伟和汤唯在《色戒》里“假戏真做”?网友爆出截图:一目了然

梁朝伟和汤唯在《色戒》里“假戏真做”?网友爆出截图:一目了然

姜糖先生
2025-06-08 19:31:00
凯恩:开季连胜已经终结,不会再是大家讨论的焦点

凯恩:开季连胜已经终结,不会再是大家讨论的焦点

体坛周报
2025-11-09 01:47:11
1984杭州惊天谍案:一台美制电台潜伏36年,竟是大陆最后特务遗存

1984杭州惊天谍案:一台美制电台潜伏36年,竟是大陆最后特务遗存

梨花头
2025-11-07 16:46:58
江苏省企业职工基本养老金计发办法案例解析

江苏省企业职工基本养老金计发办法案例解析

芭比衣橱
2025-11-08 10:31:03
《易经》万能公式其实就3句话:看懂的人,日子过得通透

《易经》万能公式其实就3句话:看懂的人,日子过得通透

金沛的国学笔记
2025-10-16 16:35:09
三位潜伏在国防部的中将,为啥只有吴石牺牲?看这三条教训便知!

三位潜伏在国防部的中将,为啥只有吴石牺牲?看这三条教训便知!

健身狂人
2025-10-25 11:16:08
重大突破!美国发明心脏创可贴,心脏病可以“逆转”了?

重大突破!美国发明心脏创可贴,心脏病可以“逆转”了?

徐德文科学频道
2025-11-06 21:42:45
杨幂在上合电影节舞台上摔倒了,她眼神凌厉,她这一跤摔出圈了!

杨幂在上合电影节舞台上摔倒了,她眼神凌厉,她这一跤摔出圈了!

小熊侃史
2025-11-06 11:40:16
北京摔童案韩磊伏法前最后一小时:连抽两根烟,全身止不住地颤抖

北京摔童案韩磊伏法前最后一小时:连抽两根烟,全身止不住地颤抖

谈史论天地
2025-10-12 19:50:03
42岁女子昏迷不醒,丈夫却放弃抢救,3天后她睁眼一句话让人愣住

42岁女子昏迷不醒,丈夫却放弃抢救,3天后她睁眼一句话让人愣住

李子木说
2025-10-28 01:06:16
28.85万,史上续航最强的ModelY上线了!

28.85万,史上续航最强的ModelY上线了!

格隆汇
2025-11-08 10:49:04
张福安逝世,曾长期隐姓埋名为国奉献

张福安逝世,曾长期隐姓埋名为国奉献

澎湃新闻
2025-11-08 00:25:03
61年造币厂职工偷走800两黄金,19年后兑换,银行一眼识破

61年造币厂职工偷走800两黄金,19年后兑换,银行一眼识破

兴趣知识
2025-11-06 03:15:03
继S家心疼具俊晔后,林志玲力挺小S,玥儿又出招,汪小菲一招制敌

继S家心疼具俊晔后,林志玲力挺小S,玥儿又出招,汪小菲一招制敌

动物奇奇怪怪
2025-11-08 12:47:10
国足新帅上任,泰山队国脚前景不妙,一人或成独苗,一人成潜力股

国足新帅上任,泰山队国脚前景不妙,一人或成独苗,一人成潜力股

二爷台球解说
2025-11-09 01:46:47
三方完美交易!杜兰特迎冠军控卫,绿军重燃争冠希望,太阳老好人

三方完美交易!杜兰特迎冠军控卫,绿军重燃争冠希望,太阳老好人

老郎体育汇
2025-11-08 15:16:57
小娃娃们的杀伤力有多强?网友:真得谢谢我儿的不杀之恩!

小娃娃们的杀伤力有多强?网友:真得谢谢我儿的不杀之恩!

夜深爱杂谈
2025-11-08 22:18:05
利物浦冬窗首签曝光!萨拉赫接班人敲定,转会费或超6500万镑

利物浦冬窗首签曝光!萨拉赫接班人敲定,转会费或超6500万镑

锐评利物浦
2025-11-08 23:10:29
炸裂!黄一鸣王思聪合作炒作,闪闪不是亲女儿,两人背后有大生意

炸裂!黄一鸣王思聪合作炒作,闪闪不是亲女儿,两人背后有大生意

八星人
2025-11-06 12:09:03
害死吴石的谷正文,晚年性情大变?1990年他扬言:杀李登辉很容易

害死吴石的谷正文,晚年性情大变?1990年他扬言:杀李登辉很容易

文史达观
2025-11-05 17:36:09
2025-11-09 02:51:00
普陀动物世界
普陀动物世界
感恩相识 感恩你对我的关注
519文章数 11630关注度
往期回顾 全部

头条要闻

张家界荒野求生选手抓到野猪吃得满嘴流油 赛事方回应

头条要闻

张家界荒野求生选手抓到野猪吃得满嘴流油 赛事方回应

体育要闻

马刺绞赢火箭,不靠文班亚马?

娱乐要闻

古二再度放料!秦雯王家卫吐槽出现新人物

财经要闻

小马、文远回港上市 但自动驾驶还没赢家

科技要闻

美股“AI八巨头”单周市值损失8000亿美元

汽车要闻

特斯拉Model Y后驱长续航版上线:28.85 万元

态度原创

健康
亲子
家居
公开课
军事航空

超声探头会加重受伤情况吗?

亲子要闻

权威医者说|“备孕夫妻”饮食小技巧

家居要闻

现代自由 功能美学居所

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

福建舰常驻地为三亚军港

无障碍浏览 进入关怀版