0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

实例讲解单片机模拟量采集: 从硬件到程序, 从滤波到实际值转换

广东微电科技有限公司 2021-11-25 14:54 次阅读

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

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

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

如图2为铅酸电池的充电电流检测电路,TA1为工频电流互感器,输入的4个二极管为整流二极管,电流流过R37(510Ω)形成压差△V。电路计算如图所示。

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

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

poYBAGDYdXCAWkKMAAAAK8RNs4s030.png

要点总结:

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

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电子罗盘
    +关注

    关注

    1

    文章

    120

    浏览量

    23122
  • 倾角传感器
    +关注

    关注

    3

    文章

    270

    浏览量

    25035
  • 姿态解算
    +关注

    关注

    0

    文章

    48

    浏览量

    8192
收藏 人收藏

    评论

    相关推荐

    STM32F103采集模拟量只要低于3.3V,采集就是0怎么解决?

    利用STM32F103 ADC直接采集模拟量,现场返修板出现的问题。 采集电压引脚不论是多少,只要低于3.3V,通过keil仿真直接观察ADC_DR寄存器采集
    发表于 04-08 07:24

    AD7606输入模拟量最大采集1.25V是什么原因导致的?

    最近在写ad7606驱动,遇到问题了, 我用atmel AT91RM9200 处理器并口方式采集AD7606 16数据总线数据,模拟量采集最大+-1.25V(量程设置+-5V)或者最
    发表于 12-20 07:21

    AD6641采集出来的数据和输入模拟量电压信号转换的公式是什么?

    1、AD6641采集出来的数据和输入模拟量电压信号转换的公式是什么?这在手册里我没有找到。 2、如果用晶振(输出是2.5V的正玄波,频率500M)提供AD6641的采集时钟,是否可以
    发表于 12-18 07:12

    单片机处理模拟量程序流程是如何的

    单片机处理模拟量程序流程是一种常见的应用场景,单片机通常被用来处理各种类型的传感器信号,例如温度传感器、压力传感器、光敏传感器等。在本文中,我将详尽地描述
    的头像 发表于 12-15 09:28 515次阅读

    51单片机能不能io模拟i2c

    51单片机能不能io模拟i2c,两个单片机之间通讯,主机可以模拟
    发表于 11-02 07:00

    实例讲解单片机模拟量采集: 从硬件程序, 从滤波实际转换,有多少人懂了?

    实例讲解单片机模拟量采集: 从硬件程序, 从
    的头像 发表于 10-17 14:28 2705次阅读
    <b class='flag-5'>实例</b><b class='flag-5'>讲解</b><b class='flag-5'>单片机</b><b class='flag-5'>模拟量</b><b class='flag-5'>采集</b>: 从<b class='flag-5'>硬件</b>到<b class='flag-5'>程序</b>, 从<b class='flag-5'>滤波</b>到<b class='flag-5'>实际</b>值<b class='flag-5'>转换</b>,有多少人懂了?

    请问avr程序如何移植STC单片机?

    avr程序如何移植STC单片机?
    发表于 10-08 08:38

    单片机基础程序框架介绍

    单片机应用的核心技术是什么?是按键,数码管,流水灯,串口。是它们的程序框架。按键和数码管是输入是人机界面,把它们的程序框架研究透了,以后做彩屏或者更花销的显示界面,程序框架也可以通用
    发表于 09-27 06:01

    单片机原理及应用详解

    详细地介绍了MCS-51单片机硬件结构、指令系统,应用的角度介绍了汇编语言程序设计与各种硬件接口设计、各种常用的数据运算和处理
    发表于 09-25 07:02

    基于MCS-51单片机为核心的数据采集系统

    本文介绍了一个以MCS-51单片机为核心的数据采集系统。通过ADC 0809的A/D转换实现数据采集,即将模拟量(如:温度)通过0809
    发表于 09-22 07:57

    已结束-【书籍评测活动NO.14】 Proteus实战攻略:从简单电路单片机电路的仿真

    、循迹避障小车电路和花卉养护装置电路使读者了解多路 PWM应用、单片机间相互通信、可视化编程及上位与下位通信等知识。每个实例都按照总体要求、硬件
    发表于 06-01 14:09

    #入门精通,一起讲透元器件! #单片机SOC,系统硬件该如何设计

    单片机
    光达航电科技
    发布于 :2023年05月27日 12:33:40

    基于ATmega8单片机模拟采集串口发送程序Proteus仿真源程序

    基于ATmega8单片机模拟采集串口发送程序Proteus仿真源程序
    发表于 05-05 09:27 3次下载

    #单片机SOC,系统硬件该如何设计 #工作原理大揭秘

    单片机硬件
    甲方路人
    发布于 :2023年05月04日 21:20:58