【ADC电池检测】

由于大多数时候ADC值并不是很稳定,故而在一些检测中需要设置阈值。

下面是我自己做的0%-100%的写法,很简单,主要也用于自己备份自己的代码

//用于细分ADC的区域,可以增加
typedef enum 
{
    percent_0,
    percent_10,
    percent_20,
    percent_30,
    percent_40,
    percent_50,
    percent_60,
    percent_70,
    percent_80,
    percent_90,
    percent_100,
}led_condition;

/*
    电池检测 缓冲
    led_flag:                 adc各档位标志位        不需要改动
    u_power_value:    adc读值                        变量名根据需要改动,不需要改动
    数字:                        adc界限值                   根据需求改变阈值

例如2.2和2.1指的是ad值经过计算后得到的具体数值,u_power_value是当前ad值计算后的数字(最好用多次取平均,不然一般情况adc读值跳变太大),led_flag是当前的ad值所在的区间


*/
switch(led_flag)
{
    case percent_0:
        if(u_power_value>2.2)    led_flag=percent_10;
        break;
  

ADCDMA转换不准可能是由于使用DMA传输时出现了数据错位的问题。当使用DMA传输完成后,ADC仍然在进行循环转换,而DMA会将转换完成的数据传输到指定的缓冲区中。然而,由于DMA传输和ADC转换的时间不同步,导致传输的数据与实际转换完成的数据对应不上,从而导致数据错位的情况发生。\[2\] 为了解决这个问题,可以采取以下措施: 1. 在使用DMA传输之前,确保ADC转换已经完成,可以使用HAL_ADC_PollForConversion()函数来检查转换是否完成。 2. 在启动DMA传输之前,使用HAL_ADC_Stop_DMA()函数停止DMA传输,然后再次使用HAL_ADC_Start_DMA()函数重新启动传输。这样可以确保DMA传输和ADC转换的同步。 3. 在处理DMA传输完成的数据时,需要根据实际转换完成的通道来正确地处理数据,避免数据错位的问题。 使用DMA传输可以提高数据采集的效率和准确性,尤其在高速数据传输和大量数据采集的情况下更为重要。虽然使用DMA可能会增加一些额外的复杂性和配置工作,但通过正确地配置和使用DMA,可以提高系统的性能和稳定性。因此,尽管使用DMA可能会增加一些精力和时间的投入,但在需要高效和准确的数据采集时,使用DMA是值得考虑的选择。\[1\] #### 引用[.reference_title] - *1* *3* [趣谈STM32的ADC与DMA](https://blog.csdn.net/m0_37655357/article/details/79163408)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [STM32的ADC+DMA多通道转换的时候数据错位的解决方法。](https://blog.csdn.net/mc_li/article/details/84900756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值