在货物监控设备的研发过程中,如何对设备进行电量采集?
Posted 瑞奇Ricky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在货物监控设备的研发过程中,如何对设备进行电量采集?相关的知识,希望对你有一定的参考价值。
最近一段时间,笔者在进行货物监控设备的研发工作。货物监控设备是对运输中的货物的高效监管。可以使货物管理者实时可视化的了解到货物在运输的过程中的运输路线情况,以及位置情况。
一改以往货物在运输过程中,管理者只有在货物经过特定的转运点时,才能知道货物运送到哪里的情况。货物监控设备还拥有无线传感功能,可以对特殊货物的运输环境进行实时监控。例如生鲜食品、危险化学品、剧毒物品等等。
这些货物对运输过程中的温度、湿度等环境是有较高要求的。货物监控设备可以实时检测其运输过程中的环境参数,当环境参数超出正常数值时,设备会立即发出报警,及时提醒管理者采取相应的措施,避免货物损失。
我们在货物监控产品的研发过程中,需要进行电量采集,以便进行电能测量。相信很多产品研发的小伙伴都需要进行这一步骤。那么具体如何实现呢?一起来看吧!
电量采集实现过程
电量采集采用的使ADC采集电压,进行换算,电池电压为4.2V,通过分压后采集电压,进行换算,以下是实现过程
//获取电池电力百分比
void GetBatteryPercentage(BatteryInfo_t *BatteryInfo)
{
static uint16_t percentage_pre = 101;
static uint16_t filter[BatteryFilterNum];
static uint16_t filter_count;
static uint16_t percentage_new;
uint32_t Vbattery,VDD,Vcharging;
uint32_t adc_value_Vref = 0;
uint32_t adc_value_Battery = 0;
uint32_t adc_value_Charging = 0;
uint8_t i;
//ADC 采样 获取电压值
BatteryAdcInit();//初始化ADC
for(i = 0;i < ADCSimpaleCount;i++)
adc_value_Vref += Get_Adc(VrefChannel);
adc_value_Vref /= ADCSimpaleCount;
VDD = 1200*4095/adc_value_Vref + 10;
for(i = 0;i < ADCSimpaleCount;i++)
adc_value_Battery += Get_Adc(BatteryChannel);
adc_value_Battery /= ADCSimpaleCount;
for(i = 0;i < ADCSimpaleCount;i++)
adc_value_Charging += Get_Adc(ChargingChannel);
adc_value_Charging /= ADCSimpaleCount;
BatteryAdcPowerOff();//关闭ADC
Vcharging = 41200adc_value_Charging/adc_value_Vref + 10;
Vbattery = 41200adc_value_Battery/adc_value_Vref + 10;
percentage_new = 100 * (Vbattery - BATTERYMINVOLTAGE)/(BATTERYMAXVOLTAGE - BATTERYMINVOLTAGE);
电池在使用的过程中,会因为瞬间消耗导致电压瞬间降低,而产生波动,导致电压采集到的数据波动很大,因此要做一些处理,使采集到的电池电压看起来符合正常情况。
//电量百分比滤波
filter[filter_count] = percentage_new;
filter_count++;
if(filter_count>=BatteryFilterNum)
{
filter_count = BatteryFilterNum-1;
for(i=0;i<BatteryFilterNum-1;i++)
filter[i]=filter[i+1];
}
percentage_pre = 0;
for(i=0;i<filter_count;i++)
percentage_pre += filter[i];
percentage_pre /= filter_count;
if(percentage_pre > 100) percentage_pre = 100;
if(percentage_pre < 2) percentage_pre = 1;
if(Vcharging > 3500)
percentage_pre = 101;
else
Vcharging = 0;
BatteryInfo->adc_value_Battery = adc_value_Battery;
BatteryInfo->adc_value_Vref = adc_value_Vref;
BatteryInfo->Vbattery = Vbattery;
BatteryInfo->VDD = VDD;
BatteryInfo->Vcharging = Vcharging;
BatteryInfo->percentage = percentage_pre;
}
以上是使用ADC进行电压采集情况。
以上是关于在货物监控设备的研发过程中,如何对设备进行电量采集?的主要内容,如果未能解决你的问题,请参考以下文章