
1:硬件设计
1.1 无线充电部分
基于芯科泰的无线充电技术,该模块作为感应充电的接收端,使用3.7V的锂电池方便,便携式的设计方便使用。

无线充电的接收电流有R12,R48电阻限制。该部分请参考之前的开源项目进行设计。
1.2:软件的软启动硬件支持电路:

使用NPN类型的三极管与STM8的IO口共同控制PS7516的使能引脚。
1.3 PS7516的可关断的升压芯片:

PS7516是一种高效,固定频率550 KHz,电流模式PWM升压DC/DC转换器,可以操作电池,如输入电压降至1.9V。转换器输出电压可通过外部电阻分压器调节到最大5.25V。此外,该转换器还包括一个0.08Ω N通道MOSFET开关和0.12Ω P通道同步整流器。因此,不需要外部肖特基二极管,可以得到更好的效率,接近96%。
该转换器是基于一个固定的频率、电流模式、脉宽调制的PWM控制器,在光负载下自动进入PSM模式。
当变频器进入不连续模式时,内部防振铃开关将减少干扰和辐射电磁能量。
PS7516可提供一个节省空间的SOT-23-6包,用于便携式应用程序。
PS7516的特征:
●高效率高达96%
●低转速(开)集成功率MOSFET
●NMOS 80mΩ/PMOS120mΩ
●宽输入电压范围: 1.9V到5.5V
●固定550 KHz开关频率
●低功率模式光负载条件
●±2.0%电压参考精度
●PMOS电流限制短路保护
●低静止电流输出波纹在200 mV。(范围全带宽)
●快速瞬态响应
●内置软启动功能
●过温保护与自动恢复
●输出过电压保护
●空间节省SOT-23-6包
1.4 E32-400T20S 无线模块设计电路

该电路只需将模块的TXD 与 RXD 连接到 MCU的RXD和TXD即可。
E32模块是基于SX1278射频芯片的贴片型无线串口模块(TTL电平),透明传输方式,发射功率100MW,工作在410-441MHZ频段,采用LORA扩频技术。
SX1278支持LORA扩频技术,通讯距离远,抗干扰能力强的优势,同时有极强的保密性。模块具有数据加密和压缩功能,模块在空中传输的数据,具有随机性,通过严密的加解密算法,使得数据截获失去意义。而数据压缩功能有概率减小传输时间,减少受干扰的概率,提高可考性和传输效率。


2:软件代码部分:
/**********************************************************************************************************
* 函 数 名: BSP_Configuration
* 功能说明: 初始化硬件设备。只需要调用一次。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。
* 形 参:无
* 返 回 值: 无
**********************************************************************************************************/
void BSP_Configuration(void)
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //配置内部高速振荡器(HSI)的分频器--1分频
Tim2_Init();
UART2_Configuration();
GPIO_Init_Func();
__enable_interrupt();//中断使能
}
/*串口函数初始化函数*/
void UART2_Configuration(void)
{
UART2_DeInit();
//波特率,字节数,1个停止位,无奇偶效验位, 非同步模式, 允许接受和发送
UART2_Init((u32)9600, UART2_WORDLENGTH_8D, UART2_STOPBITS_1,UART2_PARITY_NO , UART2_SYNCMODE_CLOCK_DISABLE , UART2_MODE_TXRX_ENABLE);
//UART2_ITConfig(UART2_IT_TC, ENABLE);
UART2_ITConfig(UART2_IT_RXNE_OR,ENABLE );
UART2_Cmd(ENABLE );
}
/*串口发送函数*/
void UART2_Send_byte(u8 byte) //发送一个8位的数据库函数
{
UART2_SendData8(byte);
while (UART2_GetFlagStatus(UART2_FLAG_TXE) == RESET);//发送数据为空
}
/*串口发送数据包函数*/
void UART2_Send_Package(u8 *SendPackage,u8 uLength)
{
u8 i;
for(i = 0; i < uLength; i++)
{
UART2_Send_byte(SendPackage[i]);
}
}
串口接收处理部分代码:
INTERRUPT_HANDLER(UART2_RX_IRQHandler, 21)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
if((UART2_GetITStatus(UART2_IT_RXNE) != RESET)||(UART2_GetITStatus(UART2_IT_OR) != RESET))
UART2_ClearITPendingBit(UART2_IT_RXNE); //清除中断标志位
else
return;
if(bCtrlSet)
{
uSerialRecvBuf[uRecvPoint] = UART2_ReceiveData8();
uRecvPoint ++;
if(uRecvPoint >= 6)
{
SetAddr = uSerialRecvBuf[2];
uRecvPoint = 0;
}
}
else
{
switch(ucBack2State)
{
case 0: if(0xFA == UART2_ReceiveData8()) ucBack2State = 1;
else ucBack2State = 0;
break;
case 1: if(0xFB == UART2_ReceiveData8()) ucBack2State = 2;
else ucBack2State = 0;
break;
case 2: if(0xFC == UART2_ReceiveData8()) { ucBack2State = 3; uRecvPoint = 0;}
else ucBack2State = 0;
break;
case 3: uSerialRecvBuf[uRecvPoint] = UART2_ReceiveData8();
uRecvPoint ++;
if(uRecvPoint > uSerialRecvBuf[0])
{
CMDPoint++;
if(CMDPoint >= MAXMESSAGENUM) CMDPoint = 0;
ExecuteCMD[CMDPoint].iExecCMD = 1;
ExecuteCMD[CMDPoint].CMDLEN = uRecvPoint;
memcpy(ExecuteCMD[CMDPoint].AutoCMD,uSerialRecvBuf,uRecvPoint);
memset(uSerialRecvBuf,0,128);
ucBack2State = 0;
}
else
{
ucBack2State = 3;
}
break;
default:
break;
}
}
}
2.2 LCD显示部分:
void LCD_Show24Chinese(u16 x,u16 y,u8 size, u16 color, char *DisStr)
{
u8 i, j;
const u8 *p;
HzkDisp24Func(DisStr);
LCD_Address_Set(x,y,x+size-1,y+size-1);
switch(HzDsip24Value)
{
case 1: p = Hzk24Zai;
break;
case 2: p = Hzk24He;
break;
case 3: p = Hzk24Wei;
break;
case 4: p = Hzk24Yi;
break;
case 5: p = Hzk24Yin;
break;
case 6: p = Hzk24Shen;
break;
case 7: p = Hzk24Ji;
break;
case 8: p = Hzk24Bei;
break;
case 9: p = Hzk24Yong;
break;
case 10: p = Hzk24Tong;
break;
case 11: p = Hzk24Dao;
break;
case 12: p = Hzk24Yan;
break;
case 13: p = Hzk24Su;
break;
case 14: p = Hzk24Du;
break;
case 15: p = Hzk24Ying;
break;
case 16: p = Hzk24Li;
break;
default:
break;
}
for(i = 0; i < 72; i++)
{
for(j = 0; j < 8; j++)
{
if((*p&(1<<j))!=0)
{
LCD_WR_DATA(color);
}
else
{
LCD_WR_DATA(BACK_COLOR);
}
}
p++;
}
}
void LCD_ShowNum(u16 x,u16 y,u16 num,u8 len,u16 color)
{
u8 t,temp;
u8 enshow=0;
for(t=0;t<len;t++)
{
temp=(num/mypow(10,len-t-1))%10;
if(enshow==0&&t<(len-1))
{
if(temp==0)
{
LCD_ShowChar(x+8*t,y,' ',0,color);
continue;
}else enshow=1;
}
LCD_ShowChar(x+8*t,y,temp+48,0,color);
}
}
主函数:
LCD_Show24Chinese(10,3,24,WHITE,"载");
LCD_Show24Chinese(10,27,24,WHITE,"荷");
LCD_Show24Chinese(10,62,24,WHITE,"应");
LCD_Show24Chinese(10,86,24,WHITE,"力");
LCD_Show24Chinese(10,122,24,WHITE,"速");
LCD_Show24Chinese(10,148,24,WHITE,"度");
if(b_500ms)
{
b_500ms = FALSE;
LCD_Show64String(80,125,"302.13",RED);
}
3:实物图片如下:
全部评论