加湿器-香薰机的设计方案(单片机程序+PCB)超声波震荡方式 原理图+PCB+源代码+详细设计说明

94 篇文章 88 订阅
29 篇文章 5 订阅

雾化器库使用说明
本文档为赛元提供的雾化器库的使用说明,雾化器库支持1.7M、2.4M和3M频率的雾化片,库提供了函数接口进行设置。其中1.7M雾化片适用于大功率加湿器(功率在15W以上),2.4M、3M雾化片适用于小功率的香薰机(功率在6-12W)。雾化器库提供了自动追频、功率设置、雾化工作、触控检水功能。库共提供了11个函数接口供用户调用,实现雾化器功能。
一、雾化器库介绍:
雾化器Atomizer文件夹中包含:
SC91F832_C.H MCU头文件
Atomizer.h 包含雾化器外部调用接口函数
SOC_Atomizer_lib_V1.3.LIB 雾化器库文件
实现雾化器工作需要占用一定的系统资源,雾化器库资源占用:
ROM:1.8K DATA: 50BYTE XDATA:60BYTE
定时器:定时器0
PWM: PWM1
ADC:两路ADC
EEPROM: 4byte
Touch Key: 两路

超声波加湿器的工作设计流程图

在这里插入图片描述
三、雾化器库函数接口和接口说明``
雾化器库共提供10个函数接口和3个全局变量:
变量:bit TrackFreqFlag; 变量说明:追频完成标志0:未完成;1:完成
变量:bit AjustPowerFlag; 变量说明:功率调整完成标志0:未完成;1:完成
变量:bit Water_flag; 变量说明:水位检测输出结果 0:缺水;1:有水

函数:bit SOCAPI_GetTrackFreqStaus(void);
函数功能:获取雾化器追频状态,返回1为已追频,0为未追频

函数:void SOCAPI_SetFreq(void) ;
函数功能:设置雾化器工作频率,当得到已追踪过频率可以调用该函数设置雾化器的频率

函数:void SOCAPI_Atomizer_Init(INT8U mode);
函数说明:雾化器初始化,设置PWM和定时器0;设置mode为0时雾化器的工作频率设置为1.7M;mode为1时为2.4M;mode为2时为3M

函数:void SOCAPI_TrackFreq_Init(void);
函数功能:雾化器追频初始化,设置了追频所需的变量,需要在追频前调用

函数:void SOCAPI_TrackFreq(void);
函数功能:雾化器追频,该函数需要在SOCAPI_TrackFreq_Init之后在主程序中一直调用,直到TrackFreqFlag变量置1,追频完成后进入功率调整

函数:void SOCAPI_AtomizerSetPower(INT8U Power);
函数功能:设置雾化器工作时最大档功率,1.7M:设置范围 15-21W;2.4M、3M:设置范围6-12W

函数:void SOCAPI_AdjustPower(void);
函数功能:进行功率调整,将最大档功率调制到设定功率,需要在SOCAPI_AtomizerSetPower之后调用

函数:void SOCAPI_AtomizerSetGear(INT8U Gear);
函数功能:设置档位,16档可调,0为低档,16为高档位,用户可以在当中选择任意档位作为目标功率

函数:void SOCAPI_AtomizerWork(void);
函数说明:雾化器雾化工作,该函数需要在主函数中无阻塞调用

函数: void SOCAPI_WaterLevelDetectorInit(INT16U Initial_Diff,int ThresholdTmp,INT8U Speed); 函数说明:水位检测初始化,设置水位检测参数

函数:void SOCAPI_WaterLevelDetector(void);
函数功能:水位检测,检测结果由Water_flag输出

四、雾化器库的具体使用
雾化器库使用准备: 雾化器的检水功能需要使用到Touch Key,赛元提供触控库帮助用户使用赛元的触控功能,具体使用见触控库的使用说明或者联系赛元的工程师,在项目工程中添加触控库;采集TK通道的数据,设置main.h中以下三个参数:
#define CH_INITIAL_DIFF 668
参数说明:检测通道与参考通道的初始比例,采样通道无水时RAWdata/参考通道RAWdata1000
#define WATERThresholdtmp 1300
参数说明:检测通道有无水差值
0.6,如完全覆的差值为2166,则设置为1300。
#define WATERCHECK_SPEED 20
参数说明:水位检测的确认次数 ,取值范围10-249 ,确认时间为10*Nms
通过函数SOCAPI_WaterLevelDetectorInit()进行设置;

本软件库适用于赛元的SC91F831和SC91F832芯片,用户使用时需将Atomizer文件夹添加到项目工程中,并在KEIL项目中添加Atomizer文件夹中的SOC_Atomizer_lib_V1.3.LIB,
1、在工程主文件中调用雾化器库文件
#include “Atomizer\Atomizer.h” //包含雾化器外部调用接口函数

2、清除EEPROM空间
在主文件中加入INT8U code EE_Data[4]={0,0,0,0}; //清除EEPROM的空间
设置工程配置的BL51 Locate选项卡中的CODE为?CO?MAIN(0X1f00)

3、初始化雾化器工作
根据使用的雾化片频率调用函数SOCAPI_Atomizer_Init(0); 对雾化器进行初始化

4、水位检测初始化
调用以下函数对雾化器进行初始化,该函数需要在水位检测函数调用前进行设置
SOCAPI_WaterLevelDetectorInit(CH_INITIAL_DIFF,WATERThresholdtmp,WATERCHECK_SPEED);

5、查询是否追频
调用函数SOCAPI_GetTrackFreqStaus,返回是否已追踪过频率,若已追频则调用函数SOCAPI_SetFreq设置雾化器工作的频率,若未追踪过频率则进行追频

6、追踪频率
调用函数SOCAPI_AtomizerSetPower设置雾化器工作的最大档功率,建议加湿器设置为16-21W,香薰机设置为6-12W;设置雾化器的功率后调用SOCAPI_TrackFreq_Init()对追频进初始化;在主函数中无阻塞的调用函数SOCAPI_TrackFreq_Init直到TrackFreqFlag变量置1,追频完成后进入功率调整

7、功率调整
追频完成后将ADC切换到检测电流的ADC口,无阻塞调用函数 SOCAPI_AdjustPower进行功率调整,将最大档的功能调整到设定值;由于器件差异,调整后功率误差在正负1W左右;

8、雾化器雾化
在主函数中无阻塞的调用函数SOCAPI_AtomizerWork()进行雾化工作,切勿在追频和调整功率过程调用该函数

9、档位调整
在雾化器正常雾化过程可以调用函数SOCAPI_AtomizerSetGear进行设置档位,函数支持16吉档位设置,雾化器库将最大档均分成16级档位,用户可以根据所需的各档位功率选择合适的档位作为实际工作的档位。

10、检测水位
雾化器库已经在雾化时调用了水位检测函数,检测结果由Water_flag输出,若用户需要在雾化器不正常雾化下检水则需要在主函数中调用程序段:
if(SOCAPI_TouchKeyStatus&0x80) // Bit7:一轮按键扫描是否完成?
{
SOCAPI_TouchKeyStatus&=0x7f; // 清掉 Bit7:一轮扫描完成标志
TouchKeyScan(); // 数据算法处理后,读取键值
SOCAPI_WaterLevelDetector(); // 水位检测
TouchKeyRestart(); // 启动下一轮扫
}
若在使用中有任何的疑问请联系赛元的工程师!

B:操作步骤:
1、 输入电压: 交流220V\直流24V
2、 最大档功率: 约20W
3、 指示灯状态: 缺水: 红灯亮;
正常工作:绿灯亮
模式选择:红绿灯交替闪烁
追频: 绿灯闪烁
关机: 红绿灯灭
4、 功率档位: 0~16档可调,每档功率约为20W/16*档位,通过旋钮开关调节,逆时针拧为减小功率,顺时针拧为增加功率。
5、 关机:逆时针拧到尽头
6、 追频模式:关机进入开机状态时,红绿灯交替闪5秒钟,此为等待是否选择追频模式。5秒钟内由最小功率档位拧到最大功率档位,再拧到最小功率档位并停留在最小功率档位,此时会进入追频模式,追频过程中绿灯闪烁约5秒种,闪烁完成后绿灯亮进入正常工作模式。
7、 触控检水:检水弹片,检水弹片塞在水槽中间的圆柱内,当水量过低时,会检测到缺水状态并亮红灯,需要加水后重新开机再进入正常工作模式。

C:注意事项:
1、 更换雾化片后,需要重新追频;
2、 重新烧录程序后,需要重新追频;
3、 触控检水的接口接线由于是跳线,拆装时容易松动,注意必须要接上并良好接触,不能随意更换线;

二、 香薰机样机:
A:图示如下:

B:操作步骤:
1、 输入电压: 交流220V\直流24V
2、 最大档功率: 约10W
3、 指示灯状态: 缺水: 4个绿灯全亮;
开机: 最左的绿灯亮
减档: 第2个绿灯亮
加档: 第3个绿灯亮
关机: 全灭
追频: 4个绿灯全闪;
4、 功率档位: 0~4档可调,每档功率约为10W/4*档位,开机状态下按下第2个按键为减档,按下第3个按键为加档。
5、 开、关机:按下最左边第1个按键
6、 追频模式:同时按下第2个和第3个按键,进入追频模式
7、 触控检水:检水弹片,当水量过低时,会检测到缺水状态并4个绿灯全亮,加水后检测有水状态下会进入开机模式,此时为0档位

C:注意事项:
1、 更换雾化片后,需要重新追频;
2、 重新烧录程序后,需要重新追频;

超声波加湿器 设计参考源代码
/************************************************************
// Copyright © 苏州 GLORY
// 文件名称 : Atomizer.c
// 作者 :
// 模块功能 : 香薰机
// 局部函数列表:

//*************************************************************
#include “h\SC91F832_C.h”
#include “lib\SensorMethod.h” //包含touchkey外部调用接口函数
#include “h\data_type.h”
#include “Atomizer\Atomizer.h” //包含雾化器外部调用接口函数

//#define sif_debug
#ifdef sif_debug
#include “sif\sif_bus.h”
#endif

#define BS(SFR,NUM) (SFR|=(1<<NUM)) //清bit位
#define BC(SFR,NUM) (SFR&=~(1<<NUM)) //bit位置1
#define SET(SFR,NUM) (SFR = NUM)

//宏定义****//
#define WAITMODE 0 //等待模式
#define TRACKFREQ 1 //自动追频
#define STRATMODE 2 //工作模式
#define STOPMODE 3 //停机模式
#define MAXGEAR 4 //调整功率模式

#define ON 1
#define OFF 0
#define KEYCOUNT 5
#define FAN P36 //风扇
#define LED_COM P27

#define LED1 P35
#define LED2 P34
#define LED3 P32
#define LED4 P31
#define LED1SP (BS(P3CFG1,2),BC(P3CFG1,3))
#define LED2SP (BS(P3CFG1,0),BC(P3CFG1,1))
#define LED3SP (BS(P3CFG0,4),BC(P3CFG0,5))
#define LED4SP (BS(P3CFG0,2),BC(P3CFG0,3))
#define SET_LED_OUT LED1SP;LED2SP;LED3SP;LED4SP

#define KEY1 P35
#define KEY2 P32
#define KEY3 P34
#define KEY1MI (BC(P3CFG1,2),BC(P3CFG1,3),SET(P35,1))
#define KEY2MI (BC(P3CFG0,4),BC(P3CFG0,5),SET(P32,1))
#define KEY3MI (BC(P3CFG1,0),BC(P3CFG1,1),SET(P34,1))
#define SET_KEY_IN KEY1MI;KEY2MI;KEY3MI

INT8U code EE_Data[4]={0,0,0,0}; //清除EEPROM的空间

INT8U WorkMode,Power_Gear=0;

//水位检测********//

#define CH_INITIAL_DIFF 888
#define WATERThresholdtmp 800 //1300
#define WATERCHECK_SPEED 10 //水位检测的速度,确认次数 ,取值范围30-249 ,若10MS扫描一轮则确认时间为500ms

//全局变量********//
INT8U timer1msCount=0;
INT8U timer10msCnt=0;
INT8U timer100msCnt=0;
INT8U Key1Cnt=0;
INT8U Key2Cnt=0;
INT8U Key3Cnt=0;
INT8U KeyBuf=0;
bit LED1Flag=0;
bit LED2Flag=0;
bit LED3Flag=0;
bit LED4Flag=0;

bit btime100ms=0;
bit btimer10ms=0; //10ms标志
bit timer1msFlag=0;
bit Timer1sFlag=0;

bit KeyStaus=0;
bit openflag=0;
/**************************************************
函数名称:void StartWork(void)
函数功能:启动模式
入口参数:void
出口参数:void
/
void StartWork(void)
{
WDTCR |=0x10; // 清狗
if((Water_flag == 0))
{
WorkMode = STOPMODE; //无水进入停机模式
}
}
/

函数名称:void StopWork(void)
函数功能:停机模式
入口参数:void
出口参数:void
**************************************************/
void StopWork(void)
{
P13=OFF;
ENPWM=0;
LED1Flag=ON;
LED2Flag=ON;
LED3Flag=ON;
LED4Flag=ON;
FAN=OFF;
Power_Gear=0;
SOCAPI_AtomizerSetGear(Power_Gear
4);
if((Water_flag == 1))
{
WorkMode = STRATMODE; //无水进入停机模式
LED2Flag=OFF;
LED3Flag=OFF;
LED4Flag=OFF;
FAN=ON;
}
}
/
*******************************************
*函数名称:void KeyScan(void)
*函数功能:按键扫描
*入口参数:void
*出口参数:void
**************************************************/
void KeyScan(void)
{
LED_COM=OFF;
SET_KEY_IN;
if(KEY1==0)
{
if(Key1Cnt<250)Key1Cnt++;
if(Key1Cnt>KEYCOUNT)
{
KeyBuf|=0x01;
}
}
else
{
Key1Cnt=0;
KeyBuf&=(~0x01);
}

if(KEY2==0)
{
if(Key2Cnt<250)Key2Cnt++;
if(Key2Cnt>KEYCOUNT)
{
KeyBuf|=0X02;
}
}
else
{
Key2Cnt=0;
KeyBuf&=(~0x02);
}

if(KEY30)
{
if(Key3Cnt<250)Key3Cnt++;
if(Key3Cnt>KEYCOUNT)
{
KeyBuf|=0X04;
}
}
else
{
Key3Cnt=0;
KeyBuf&=(~0x04);
}
}
/**************************************************
*函数名称:void ChangeKeyValue(void)
*函数功能:按键处理
*入口参数:void
*出口参数:void
**************************************************/
void ChangeKeyValue(void)
{
switch(KeyBuf)
{
case 0x01:
if(KeyStaus
0)
{
KeyStaus=1;
if(openflag0)
{
if(SOCAPI_GetTrackFreqStaus()1) //追频成功标志
{
openflag=1;
WorkMode = STRATMODE;
Power_Gear=1;
SOCAPI_AtomizerSetGear(Power_Gear*4);
FAN=1;
}
}
else
{
openflag=0;
LED2Flag =0;
LED3Flag =0;
LED4Flag =0;
WorkMode = WAITMODE;
FAN=0;
}
LED1Flag=openflag;
}
break;
case 0x02:
if(KeyStaus
0)
{
KeyStaus=1;
if((openflag
1)&&(Water_flag == 1)) //开机响应
{
LED2Flag=1;
LED3Flag=0;
if(Power_Gear==0)Power_Gear=1;
Power_Gear–;
SOCAPI_AtomizerSetGear(Power_Gear*4); //设置档位
}
}
break;

case 0x04:
if(KeyStaus0)
{
KeyStaus=1;
if((openflag
1)&&(Water_flag == 1)) //开机响应
{
LED2Flag=0;
LED3Flag=1;
if(Power_Gear>=4)Power_Gear=3;
Power_Gear++;
SOCAPI_AtomizerSetGear(Power_Gear*4); //设置档位
}
}
break;
case 0x06:
SOCAPI_AtomizerSetPower(7);
SOCAPI_TrackFreq_Init();
WorkMode = TRACKFREQ;
break;
default:
KeyStaus=0;
break;
}
}
/**************************************************
*函数名称:void LedScan(void)
*函数功能:LED扫描
*入口参数:void
*出口参数:void
/
void LedScan(void)
{
SET_LED_OUT;
LED1= ~LED1Flag;
LED2= ~LED2Flag;
LED3= ~LED3Flag;
LED4= ~LED4Flag;
LED_COM=ON;
}
/

*函数名称:void Timer1()interrupt 3
*函数功能:定时器中断服务函数
*入口参数:void
出口参数:void
**************************************************/
void timer1()interrupt 3
{
TH1 = (65536-4000)/256; //400
1/4us=1Ms
TL1 = (65536-4000)%256;
timer1msFlag=1;
timer1msCount++;
if(timer1msCount>=10)
{
timer1msCount=0;
btimer10ms=1;
timer10msCnt++;
if(timer10msCnt>=10)
{
timer10msCnt=0;
btime100ms=1;
timer100msCnt++;
if(timer100msCnt>25)
{
timer100msCnt=0;
Timer1sFlag=1;
}
}
}
}

/**************************************************
*函数名称:void Sys_Init(void)
*函数功能:系统初始化
*入口参数:void
*出口参数:void
**************************************************/
void Sys_Init(void)
{
RSTCFG = 0x24; //P1.0切换为IO ,LVR复位选择2.45V
WDTCR =0x90; //启动看门狗,262MS复位

//ADC设置
ADCCFG = 0x84; //选择ADD为参考电压VDD,选择P12,P17作ADC输入口.
ADCCR = 0x87; //打开ADC电源,ADC CLK=Fosc,选通P17通道

//定时器1初始化 ,定时器0给雾化器使用
TMCON = TMCON|0x02; //选择时钟分频,Fosc/4=4Mhz;1/4us
TMOD = TMOD|0x10; //设置工作方式1
TH1 = (65536-4000)/256; //400*1/4us=1Ms
TL1 = (65536-4000)%256;
TR1=0; //定时器T1的运行控制位。打开timer1前,先清TRO
ET1=1; //允许timer1中断
TR1=1; //允许timer1开始计数

//**************************************************
SOCAPI_Atomizer_Init(1); //初始化雾化器,函数内设置了PWM,定时器0
SOCAPI_WaterLevelDetectorInit(CH_INITIAL_DIFF,WATERThresholdtmp,WATERCHECK_SPEED);
//**************************************************

EA=1; //打开总中断
TouchKeyInit(); //触摸按键初始化

#ifdef sif_debug
IPSIF=1;
Debug_TouchKeyIICInit(0); //0:TK参数为程序设置 1:TK参数为Touch Key Tool软件设置
#endif

P3CFG1=(P3CFG1&0Xcf)|0X10; //P36 ,强推挽,风扇
P2CFG1=(P2CFG1&0X3F)|0X40; //p27 ,强推挽,com

}
/**************************************************
*函数名称:void ModeChoose(void)
*函数功能:模式选择
*入口参数:void
*出口参数:void
/
void ModeChoose(void)
{
if(SOCAPI_GetTrackFreqStaus()==1) //追频成功标志
{
SOCAPI_SetFreq();
WorkMode = WAITMODE; //进入工作模式
TouchKeyInit(); //触摸按键初始化 //正常工作指示灯
}
else //第一次上电未追频
{
WorkMode = STOPMODE; //进入停机模式
Power_Gear=0;
}
}
/

*函数名称:void main(void)
*函数功能:主函数
*入口参数:void
*出口参数:void
/
void main()
{
P13=OFF; //上电先拉低PWM的输出
Sys_Init(); //系统初始化
ModeChoose(); //模式选择
while(1)
{
if(btimer10ms1) //10ms扫描一轮
{
btimer10ms=0;
WDTCR |=0x10; // 清狗
if(!((WorkMode
TRACKFREQ)|| (WorkMode==MAXGEAR))) //追频过程不处理按键
{
KeyScan();
ChangeKeyValue();
}
LedScan();
}
switch(WorkMode)
{
case TRACKFREQ: //自动追频模式
//

SOCAPI_TrackFreq();
if(TrackFreqFlag1)//追频完成标志置位
{
WorkMode= MAXGEAR;
ADCCFG = ADCCFG|0x01; //选择参考电压2.4VDD,切换到测量电流
ADCCR = 0x87; //打开ADC电源,选通P17通道
AjustPowerFlag=0;
}
if(btime100ms
1)
{
btime100ms=0;
LED1Flag= ~LED1Flag;
LED2Flag= ~LED2Flag;
……………………
鉴于篇幅限制,只能写部分代码

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,
如果需要 程序完整源代码和 设计文件,请在下方留言或者私信我,看到后会第一时间回复。

谢谢!

  • 27
    点赞
  • 133
    收藏
    觉得还不错? 一键收藏
  • 76
    评论
### 回答1: 超声波雾化片电路是一种常用于雾化设备的电路,它通过超声波的频率震动将液体转化为小颗粒状的雾气。该电路主要包括发生器、功率放大器和雾化片三个部分。 发生器是超声波雾化片电路的核心组成部分,它产生高频振荡信号,一般是在20kHz至100kHz频率范围内。发生器使用振荡电路,可以通过调整电路的频率来控制雾化片的雾化效果。 功率放大器是发生器信号的增强器,它将发生器产生的低功率信号转化为足够大的电流来驱动雾化片。功率放大器通常使用MOSFET晶体管或功率放大器集成电路来实现,它可以提供足够的功率给雾化片,以确保雾化效果良好。 雾化片是超声波雾化片电路的输出部分,它是由压电陶瓷片组成的。当发生器输出的高频振荡信号输入到雾化片时,压电陶瓷片会通过共振现象产生高频振动,从而将液体雾化成小颗粒的雾气。雾化片的工作原理是利用压电效应和共振现象将液体转化为雾气。 总而言之,超声波雾化片电路是通过发生器产生高频振荡信号,功率放大器将信号增强后驱动雾化片,从而实现将液体雾化成小颗粒的雾气的电路。它广泛应用于雾化设备中,如医疗喷雾器、加湿器等。 ### 回答2: 超声波雾化片是一种通过使用超声波振动将液体转化为细小颗粒的技术。它主要由振动片、振动片驱动电路和控制电路组成。 振动片是超声波雾化片的核心部件,它一般由压电陶瓷材料制成。当通过驱动电路施加交变电压时,压电陶瓷会产生械振动,这种振动会将液体分散成超细的颗粒。 振动片驱动电路主要功能是为振动片提供合适的电压信号。它通常由信号发生器、功率放大器和驱动电路组成。信号发生器会产生合适的频率信号,功率放大器会将信号放大到足够的能量来驱动振动片,驱动电路则负责调节和控制电压信号的幅值和频率。 控制电路是超声波雾化片电路中的另一个重要组成部分。它可以根据需要调节雾化颗粒的大小和产生时长,以满足不同应用的需求。控制电路一般由微控制器和相关控制电路构成。 最终,超声波雾化片电路实现了将液体雾化成超细颗粒的功能。它在医疗、农业、化工等领域有着广泛的应用,如医疗雾化器、农药喷雾器等。 ### 回答3: 超声波雾化片电路主要由超声波振荡电路和驱动电路两部分组成。 超声波振荡电路是核心部分,它通过产生高频的超声波振荡信号来驱动雾化片实现雾化作用。该电路由多个元器件组成,其中包括压电陶瓷振荡器、晶体振荡器、电容、电感等。当电流通过压电陶瓷振荡器时,会产生械振动,进而产生超声波。而晶体振荡器则用于提供稳定的高频信号,确保超声波振荡的频率精准稳定。 驱动电路则负责控制超声波振荡电路的工作状态,以及雾化片的开启和关闭。驱动电路通常由电源、开关电路和控制电路组成。电源为超声波振荡电路提供必要的电能。开关电路则用于控制超声波振荡器的开关状态,实现对超声波的控制。控制电路负责对雾化片的开启和关闭进行精确控制,通常使用微处理器或单片机来实现。 通过超声波雾化片电路,可将液体转化为微小的雾状颗粒,广泛应用于雾化器、加湿器、喷雾器等领域。它可以在医疗、农业、工业等多个领域发挥作用,如医疗领域的药物雾化、农业领域的农药喷雾以及工业领域的涂装等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 76
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值