基于CW32L083的线控器方案设计
【 前言 】
线控器,是中央空调的“指挥家”。是空调运行的第一步,也是日常调节的中枢,通过线控器指令的传导,空调就会做出相应的服务。随着空调普及率的提高,空调线控器及遥控器的产量不断上升。又由于单片机的集成度高,功能强,通用性好,且其体积小,重量轻,能耗低,可靠性高,抗干扰能力强等特点,所以大部分空调遥控器和线控器都采用单片机作为主控制器。
芯源推出的CW32系列产品已全面实现 -40℃ ~ 105℃超宽温度范围和 1.65V~5.5V 超宽工作电压,面向最广泛的各种基础应用。CW32系列HBM ESD、MM ESD、CDM ESD、Latch up@105℃全面达到JEDEC最高等级,所以CW32系列具备稳定可靠的eFLASH制造,确保了工业产品的高可靠性。此次产品的研发就是基于芯源产品的系列有点进行的,并将对产品进行ESD测试等内容。
【开发记录】
此线控器是基于武汉芯源半导体推出的CW32L083低功耗系列产品设计研发而成的,其主要包括MCU、触摸模块、通信模块、红外遥控模块、存储模块、编程接口等部分,设计系统原理框图如图1所示:
图1 系统原理框图
该线控器自带背光,白底黑字液晶,触摸按键,可显示和设置时钟,可预约24小时开关机(倒计时、时刻定时功能),可调节7档风速、上下扫风和左右扫风,可切换自动、制冷、初始、送风、自热等模式,不仅可以通过WiFi与手机相连使用APP控制,还可以接收红外遥控器控制,具有机组参数查询与设置功能,防潮设计、不易受潮。其设计原理图及PCB板实物图分别如图2、图3所示:
图2 线控器原理图
图3 线控器PCB板
第二步:软件设计
软件部分主要分为以下几部分内容,软件构成如图4所示:
图4 线控器程序图
- LCD显示部分,LCD主要显示温度,风速,模式等系列设置内容,例如模式设置内容为:
/*
- @brief 运行模式显示
- @detail 显示自动、制暖、制冷、抽湿和送风
*/
void display_mode(void)
{
if (G_CleanState)
return;
switch(G_SystemMode)
{
case SYSTEM_MODE_AUTO:
lcd_SystemMode_Auto;
break;
case SYSTEM_MODE_WARM:
lcd_SystemMode_WARM;
break;
case SYSTEM_MODE_COLD:
lcd_SystemMode_COLD;
break;
case SYSTEM_MODE_COLD_WET:
//lcd_SystemMode_COLD;
lcd_SystemMode_WET;
break;
case SYSTEM_MODE_WET:
lcd_SystemMode_WET;
break;
case SYSTEM_MODE_WIND:
lcd_SystemMode_WIND;
break;
}
}
- 蜂鸣器部分,主要实现功能是按键响应,例程如下:
void ppg_program(void)
{
if(key_keepon_beep)
{
PPG_time=0;
return;
}
switch(PPG_type)
{
case 0: ppg_off(); break;
case 1: ppg_type1(); break;
case 2: ppg_type2(); break;
case 3: ppg_type3(); break;
case 4: ppg_type4(); break;
case 5: ppg_type5(); break;
case 6: ppg_type6();break;
default: ppg_off(); break;
}
}
uint8_t I2C_WriteByte(uint8_t Byte)
{
uint8_t i=0;
I2C_SDA_OUTPUT();
delay_5us();
for(i=0;i< 8;i++)
{
if (Byte & 0x80)
I2C_SDA_HIGH();
else
I2C_SDA_LOW();
NOP();
I2C_SCL_HIGH();
delay_5us();
I2C_SCL_LOW();
delay_5us();
Byte < <= 1;
}
I2C_SDA_INPUT();
I2C_SCL_HIGH();
delay_5us();
if (I2C_SDA_READ())
i = 0x01;
else
i = 0x00;
I2C_SCL_LOW();
return i;
}
-
按键部分,按键主要是用来处理按键信息,实现用户想要设置的内容,例程如下:
//功能部分
void key2_deal(void)
{
backlight_cnt=0;
backlight_flag=1;
if(self_check_flag)
return;
if (G_FeatureSetStatus)
return;
if (set_status == SET_CLOCK)
return;
if (G_CleanState)
return;
/******************************************************/
/* (1)短按释放 */
/******************************************************/
if(key2_down_flag)
{
if(set_status)
{
set_status=NO_SET;
G_IrSendFlag |= IR_NORMAL_SEND_FLAG;
G_TxTime1sCnt=0;
if(beep_enable)
{
ppg_off();PPG_type=1;PPG_time=0;
}
}
else if(server_set_status)
{
server_change_deal();
beep_enable_deal(1);
}
else if(G_NanoeSingle)
{
G_NanoeSingle=0;
nanoe_single_write = 1;
G_SystemMode=G_NanoeMode;
system_mode_write=1;
beep_enable_deal(1);
G_IrSendFlag |= IR_NORMAL_SEND_FLAG;
G_TxTime1sCnt=0;
}
else
{
if(mode_lock==0) //模式 0--自动 1-制暖 2--制冷 3--抽湿 4--送风
{
//G_FreshAir = 0;
if (G_StrongColdState)
{
G_StrongColdState = 0;
strong_cold_write = 1;
//G_Rx0SendFlag |= RX0_SEND_FLAG_NORMAL;
}
if (G_StrongWarmState)
{
G_StrongWarmState = 0;
strong_warm_write = 1;
//G_Rx0SendFlag |= RX0_SEND_FLAG_NORMAL;
}