无线信标功能调试-2021-3-9-输出功率恒定限制

 

01 无线信标比赛功能


1.功能介绍

无线节能信标调试说明-2021-3-3 对于 第十六届全国大学智能汽车竞赛竞速比赛规则 中的无线节能信标组的无线功率部分进行了调试。并对在输出功率50W,150kHz左右的 节能无线信标Ver0:功率测试 ,表明在满足 无线充电(电力传输)设备无线管理规定 要求的情况,基本满足比赛的要求。

除了无线充电功能之外,信标还需要具有以下功能:

2. 版本说明

(1)硬件版本

D:\zhuoqing\DesignCenter\SmartCar\2021\LongQiu\WirelessBeacon\Version2\智能车无线充电发射2021V2.PcbDoc

(2)软件版本

D:\zhuoqing\window\ARM\IAR\STM32\Application\SmartCar\2021\Beacon\F303AOD254\Src\main.c

 

02 功能测试


1.功率限制

(1)半桥电流信号

半桥电流信号是由U5:AD8217对电流采样电阻RC(0.03Ω)电压进行放大之后并RC滤波( τ = 1 m s \tau = 1ms τ=1ms)之后数据。

▲ 功率半桥电流信号

▲ 功率半桥电流信号

测量方案:
使用DM3068直流档测量电压信号
使用DH1766测量整体工作电流

▲ 测量RAC,CAC滤波后的电流电压

▲ 测量RAC,CAC滤波后的电流电压

▲ 工作电流与电流检测信号电压

▲ 工作电流与电流检测信号电压

(2)单片机采集ADC

单片机内采集到电流信号。单片机的ADC通道:ADC0,ADC1

工作条件:
工作电压:+12V
工作电流:1.08A
采集数据:1024

ADC每个通道采集16个数进行平均:
▲ 工作电流大约为1A左右,采集到的数据信号

▲ 工作电流大约为1A左右,采集到的数据信号

ADC每个通道采集256个数据进行平均:

▲ 工作电流大约为1A左右,采集256个数据进行平均

▲ 工作电流大约为1A左右,采集256个数据进行平均

(3)工作电流与ADC采集数值

通过移动接收线圈与发送线圈之间的距离,改变发送线圈工作电流,测量采集到的ADC与工作电流之间的关系。

工作电流仍然是整个系统的工作电流。它与实际的发射半桥的工作电流有一定的差异。

测量条件:
系统工作电压:+12V

▲ 工作电流与采集到ADC数值

▲ 工作电流与采集到ADC数值

▲ 工作电流与ADC数值

▲ 工作电流与ADC数值

(4)占空比与工作电流

为了能够对输出电流(功率)进行控制,通过改变输出信号的占空比来改变输出有效电压。测量在不同振荡占空比下输出电流变化的情况。

测试条件:
工作电压:+12V
占空比为50% 时电流:1.45A
频率:150kHz,对于ARR:320-1

▲ PWM定时器的CCR与电流采集数值

▲ PWM定时器的CCR与电流采集数值

在博文 基于TPS28225功率MOS半桥电路测试 对于PWM的占空比对输出电压有效值的影响进行了分析。占空比 D u t y = τ / T Duty = \tau /T Duty=τ/T对于输出信号基波幅值的影响为:
E 1 = τ T ⋅ S a ( τ ⋅ π T ) = 1 π sin ⁡ ( π ⋅ τ T ) E_1 = {\tau \over T} \cdot Sa\left( {{{\tau \cdot \pi } \over T}} \right) = {1 \over \pi }\sin \left( {{{\pi \cdot \tau } \over T}} \right) E1=TτSa(Tτπ)=π1sin(Tπτ)

对应的功率正比于E1的平方:
▲ 占空比与信号功率

▲ 占空比与信号功率

5.调整占空比

在工作电压Ub为常量的情况下,输出功率P与输出半桥电流Ib之间是线性关系。为了便于对输出功率(电流)进行控制,需要将给出输出电流与占空比之间的线性关系。

由:

P = U B ⋅ I B = ( 1 π ⋅ sin ⁡ ( π ⋅ d ) ) 2 P = U_B \cdot I_B = \left( {{1 \over \pi } \cdot \sin \left( {\pi \cdot d} \right)} \right)^2 P=UBIB=(π1sin(πd))2

可以知道输出电流与占空比之间存在关系: i 0 = k ⋅ sin ⁡ 2 ( π ⋅ d ) i_0 = k \cdot \sin ^2 \left( {\pi \cdot d} \right) i0=ksin2(πd)

其中d是占空比(≤0.5);k是一个比例系数。如果已知当前 i 0 , d i_0 ,d i0,d,便可以求出k: k = i 0 sin ⁡ 2 ( π d ) k = {{i_0 } \over {\sin ^2 \left( {\pi d} \right)}} k=sin2(πd)i0

那么,如果希望将输出电流调整到 i s e t i_{set} iset,则可以计算出对应的占空比d:
d = 1 π ⋅ sin ⁡ − 1 [ ( i s e t i 0 ) 1 2 ⋅ sin ⁡ ( π d ) ] d = {1 \over \pi } \cdot \sin ^{ - 1} \left[ {\left( {{{i_{set} } \over {i_0 }}} \right)^{{1 \over 2}} \cdot \sin \left( {\pi d} \right)} \right] d=π1sin1[(i0iset)21sin(πd)]

令:
a = ( i s e t i 0 ) 1 2 ⋅ sin ⁡ ( π d ) a = \left( {{{i_{set} } \over {i_0 }}} \right)^{{1 \over 2}} \cdot \sin \left( {\pi d} \right) a=(i0iset)21sin(πd)

那么,当: a ≤ 1 a \le 1 a1时,按照计算的d设置占空比;如果 a > 1 a > 1 a>1,则d=0.5。

有与采集到的电流 i0具有一定的噪声,所以计算出的d也会有波动。为了防止d波动过大,在输出d的时候,需要经过一个一阶惯性环节。

设定电流调节时间周期:Ti=1ms,对于d滤波采用:
d [ n ] = β ⋅ d [ n − 1 ] + ( 1 − β ) ⋅ d n e w d\left[ n \right] = \beta \cdot d\left[ {n - 1} \right] + \left( {1 - \beta } \right) \cdot d_{new} d[n]=βd[n1]+(1β)dnew

其中 d n e w d_{new} dnew是计算出的新的占空比。

  • 控制代码:
//------------------------------------------------------------------------------
void AdjustIBus(void) {
    unsigned short nADC[ADC_CHANNEL];
    
    GetADCAverage(nADC);
    
    short nI = nADC[0];
    float dnew = 0.5;
    float f_pi = 3.1415926;
    
    if(nI > 10) {
        float a = sqrt(I_BUS_ADC_SET / (float)nI) * sin(f_pi * g_fLastD);
        if(a <= 1.0) {
            dnew = asin(a) / f_pi;
        }

    } 

    dnew = dnew * ADJUST_I_BETA + (1 - ADJUST_I_BETA) * g_fLastD;
    g_fLastD = dnew;
    
    unsigned int nCCR = (int)(320 * dnew);
    if(nCCR < 10) nCCR = 10;
    else if(nCCR > 160) nCCR = 160;
    
//    SetPWMCCR(nCCR);
    
}

通过LED端口指示调节程序的起始和结束,进而通过示波器来测量调整函数执行时间:

通过读取波形,可以知道上述函数执行时间大约为220微妙。因此可以在1ms中断内完成调节算法。

▲ 测量调节算法执行时间

▲ 测量调节算法执行时间

(6)电流控制效果

将上述电流调节程序增加到主循环(1ms周期)之后,电流便开始限制。

测量条件:
工作电压:+12V
负载:如果没有限制时,输出应该是1.45A

下图显示了经过调节之后电流的波形,明显对应的占空比减小了。

▲ 限流后的电流采集信号(ADC0)信号

▲ 限流后的电流采集信号(ADC0)信号

下图显示了在调节过程中输出占空比(为了能够与采集的电流ADC在相同的数量级,将输出的占空比乘1000)与电流采集数值。

▲ 控制占空比与电流ADC

▲ 控制占空比与电流ADC

(7)增加滤波电容

在前面测量采集电流信号,它呈现比较大的波动。本来在半桥电路上具有滤波电容C16,但实际上这个电容使用了电解电容,它在内部的电感使得对于高频信号滤波不好。

▲ 电流采集电路

▲ 电流采集电路

下面是在C16增加一个100uF的表贴电容,增加该电容对于高频旁路的效果。

▲ 增加100uF的滤波电容

▲ 增加100uF的滤波电容

下图显示了增加滤波电容之后,电流采集波形。相比于之外的电流波形,波动有所改善,但仍然具有很大的波动。

▲ 增加输出滤波电容之后电流放大波形

▲ 增加输出滤波电容之后电流放大波形

工作一段时间内,板上的电解电容发烫,需要将电路板上储能电容都更换成高频电容。

▲ 工作一段时间内,板上的电解电容发烫

▲ 工作一段时间内,板上的电解电容发烫

使用手触碰电解电容会感到温度很高。使用红外相机可以看到电路板上,功率器件(MOS管、LCC电感等)都温度不高。反而是两个电解电容的温度很高。

▲ 红外摄像机照射电路板发热区域

▲ 红外摄像机照射电路板发热区域

这是由于在工作过程中,电路的电源中存在高频大电流,这对于电解电容会产生很大的损耗。需要在现有的电解电容上并联对应的表贴的大容量高频电容。

(8)输出功率控制测量

在保持接收负载不变,恒定电流不变的情况下,将工作母线电压从10V逐步提高24V,测量负载(10欧姆)的电压,母线工作电流的变化。

测量条件:
接收负载电阻:10Ω
母线工作电压:10V ~ 24V
程序限定ADC:200

下图显示了随着母线电压变化,对应的负载电压与负载功率的变化。由于母线电流是恒定限制,所以随着母线电压提升,负载上的功率也是先行提高。

▲ 随着母线电压增加,负载电压与功率变化曲线

▲ 随着母线电压增加,负载电压与功率变化曲线

下图给出了母线电压变化带来的母线工作电流变化,显示电流变化范围在20mA之内,基本上维持恒定。

▲ 随着母线电压提高,输出电压变化

▲ 随着母线电压提高,输出电压变化

下面将程序电流限定数值修改为400,重新测量。
▲ 随着母线电压变化,负载电压与功率变化

▲ 随着母线电压变化,负载电压与功率变化

▲ 母线电压与母线电流

▲ 母线电压与母线电流

但电流限定值修改为600时,在进行实验过程中,在母线电压超过21V左右,输出电压突然降低。

经过更换U7:TSP28225问题解决。为什么U7总是容易被烧坏?,这个问题现在为止还没有能把彻底解决。

▲ 母线电压与负载电压、功率

▲ 母线电压与负载电压、功率

 

▌附件


■ 相关文献链接:

1.工作电流与检测电流信号

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2021-03-10
#
# Note:
#============================================================

from headm import *
from tsmodule.tsvisa        import *

dm3068open()

#------------------------------------------------------------
printf('Press ctrl break...\a')

vdim = []
cdim = []

while True:
    key = tspread()

    if key[8] != 0:
        break

    time.sleep(1)
    #--------------------------------------------------------
    volt = dm3068vdc()
    curr = dh1766curr()
    printff(volt, curr)

    vdim.append(volt)
    cdim.append(curr)
    tspsave('meas2', v=vdim, c=cdim)

cvdim = [[c,v] for c,v in zip(cdim, vdim)]
cvdim.sort(key=lambda x:x[0])
cva = array(cvdim).transpose()

plt.plot(cva[0], cva[1])
plt.xlabel("Current(A)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()

printf('\a')

#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

2.工作电流与ADC数值

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# DRAWCURR.PY                  -- by Dr. ZhuoQing 2021-03-10
#
# Note:
#============================================================

from headm import *
from tsmodule.tsstm32       import *
from tsmodule.tsvisa        import *

#------------------------------------------------------------
def stm32cur(num):
    stm32cmd('adc %d'%num)
    time.sleep(.5)
    data = stm32memo(1)
    return sum(data) / num

vdim = []
cdim = []

printf("Press CTRL to stop...")
while True:
    if tspread()[8] != 0:
        break

    #--------------------------------------------------------
    volt = stm32cur(16)
    curr = dh1766curr()
    printff(volt, curr)

    vdim.append(volt)
    cdim.append(curr)
    tspsave('meas2', v=vdim, c=cdim)

cvdim = [[c,v] for c,v in zip(cdim, vdim)]
cvdim.sort(key=lambda x:x[0])
cva = array(cvdim).transpose()

plt.plot(cva[0], cva[1])
plt.xlabel("Current(A)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()

printf('\a')

#------------------------------------------------------------

'''
stm32cmd('adc 1024')

time.sleep(2)

data = stm32memo(1)

plt.plot(data)
plt.xlabel("Samples")
plt.ylabel("Data")
plt.grid(True)
plt.tight_layout()
plt.show()

'''
#------------------------------------------------------------
#        END OF FILE : DRAWCURR.PY
#============================================================

3.PWM占空比与工作电流采集

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TESTCCR.PY                   -- by Dr. ZhuoQing 2021-03-10
#
# Note:
#============================================================

from headm import *
from tsmodule.tsstm32       import *

def stm32cur(num):
    stm32cmd('adc %d'%num)
    time.sleep(.5)
    data = stm32memo(1)
    return sum(data) / num

vdim = []
cdim = []

#------------------------------------------------------------

setnum = linspace(10, 310, 100)
setdim = []
curdim = []

for v in setnum:
    stm32cmd('ccr %d'%int(v))
    time.sleep(0.25)

    adc = stm32cur(16)
    setv = int(v)
    setdim.append(setv)
    curdim.append(adc)

    printff(setv, adc)

    tspsave('ccrm', ccr=setdim, cur=curdim)

plt.plot(setdim, curdim)
plt.xlabel("CCR")
plt.ylabel("ADC")
plt.grid(True)
plt.tight_layout()
plt.show()

#------------------------------------------------------------
#        END OF FILE : TESTCCR.PY
#============================================================
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页