利用二分法查找NTC温度值以及数据采集方法

NTC温度传感器温度的采集和数据的处理方式有很多种,有通过ntc温度公式直接计算温度的,有通过查表的方法查表的,这里介绍的是通过二分法查表的方式来处理采集的温度值。

1.1简单的采集电路

下图是通过STM32单片机直接采集的简单NTC采集电路,NTC和R1通过分压直接将采集到的电压经过RC滤波后直接传给单片机采集,经验表明R2不能太小也不能太大,太大会影响灵敏度,适当的大一点又会对EMC干扰又一定的抑制作用。

                                                               图1-1 NTC温度采集电路

 

 

1.2 温度表的制定

NTC温度传感器有很多种规格,首先应该明白所使用NTC的B值是多少,是多少K的,一般根据这两个参数就能在网上找到对应阻值的阻值表,以B值为3950 10K的NTC传感器为例。在网上找到对应的温度阻值表,如图1-2所示,再根据自己的电路图,自己单片机采集的位数,求出对应在单片机中的AD采样值,所用单片机AD的位数是12位,基准电压为3.3V,根据图1-1的电路图,所以在AD值得表达式为:

 

式中VAL是对应的AD值,R_{_{_{}}}NTC是对应温度的阻值,将公式输入表格中,一拉就可以求出各个温度所对应的AD值,取整保存在程序的温度表中,C语言就是保存在一数组中,到时候查表数组的下标就和温度有直接的关系了。温度小数部分可以通过局部线性化的方式求得。

                                                            图1-2 3950 10k部分温度阻值表

 

                                                             图1-3 10~50度的AD值

 

 

1.3 程序算法处理

通过查表的方法查表,在查表时有人处理的方法是在表中一个个从头开始去查找,这种方法显示存在着不足,比较浪费时间。采用二分法查找能节省更多单片机的处理时间周期。二分法查找针对的是一个有序的数据集合,每次通过与区间的中间元素对比,将待查找的区间缩小为之前的一半,直到找到要查找的元素,或者区间被缩小为0,二分查找非常高效,假设数据大小是n,每次查找后数据都会缩小为原来的一半,也就是会除以2,最坏情况下,直到查找区间被缩小为空,才停止,二分法查找在数越多表越大的情况下越能体现出它的优势。

因为AD值正好是表中的值得概率其实很小,所以每次查找的基本上就是温度的区间,完了通过局部线性化计算返回温度的值。二分法算法如下程序所示。

float binarySearch(u16 key)
{

    u8 start = 0;
    u8 end   = 159;
    u8 min =0;
    while (start<=end) {
        u8 mid = (start+end)/2;
        if(key>TempValvue[mid]) end = mid-1;
        else if(key<TempValvue[mid]) start = mid+1;
        else return mid;

    }
       //到此处一定是 start>end  start = end +1
        return (float)end +(float)(key-TempValvue[end])/(TempValvue[start]-TempValvue[end]);
}
 

 

温度值得获取,AD采样二分法查找后,可通过一阶惯性滤波器滤一下波,这样采集的温度值比较稳定,如下面程序所示。

adcnum = Get_Adc_Average(ADC_CHANNEL_1, 1); // 获取AD的值

Tem = 0.2 * (binarySearch(adcnum) - 10) + (1 - 0.2) * last_Tem;  //一阶惯性滤波器滤波

last_Tem = Tem;

 

 

本人水平有限,如有不妥之处请及时指正

746769845@qq.com

NCO(Numerically Controlled Oscillator)是一种通过数字控制的振荡器。在FPGA(Field Programmable Gate Array)中实现NCO可以通过查表法来实现。 查表法是一种将预先计算好的数存储在查找表中,通过查表获取结果的方法。在NCO中,查表法可以用来获取正弦或余弦函数的离散点,以实现振荡信号的生成。 实现NCO的关键步骤如下: 1. 首先,定义NCO的参数,如采样率、输出频率、相位等。这些参数将影响最终输出的波形效果。 2. 创建一个查找表,将频率为Fs的连续正弦或余弦函数进行离散化,存储在表中。表的大小可以根据所需精度和存储资源进行调整。 3. 根据输出频率和相位参数,计算在查找表中对应的离散点。相位参数确定了在查找表中的起始点。 4. 根据采样率和输出频率,计算每个采样点在查找表中的步长。这个步长决定了两个相邻离散点之间的距离。 5. 在FPGA中,使用时钟信号来驱动NCO模块。根据每个时钟周期的步长,逐个取出查找表中的对应离散点,作为输出信号。 通过查表法来实现NCO的优点是简单高效,因为预先进行了计算,并且存储在查找表中,可以直接获取结果。同时,查表法可以实现较高的波形精度,因为离散化的点越多,波形的近似程度越高。 总之,通过查表法来实现NCO在FPGA中可以实现高效、精确的数字振荡器功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫气东来d

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值