基于CW32L083的線控器方案設計
【 前言 】
線控器,是中央空調的“指揮家”。是空調運行的第一步,也是日常調節的中樞,通過線控器指令的傳導,空調就會做出相應的服務。隨著空調普及率的提高,空調線控器及遙控器的產量不斷上升。又由于單片機的集成度高,功能強,通用性好,且其體積小,重量輕,能耗低,可靠性高,抗干擾能力強等特點,所以大部分空調遙控器和線控器都采用單片機作為主控制器。
芯源推出的CW32系列產品已全面實現 -40℃ ~ 105℃超寬溫度范圍和 1.65V~5.5V 超寬工作電壓,面向最廣泛的各種基礎應用。CW32系列HBM ESD、MM ESD、CDM ESD、Latch up@105℃全面達到JEDEC最高等級,所以CW32系列具備穩定可靠的eFLASH制造,確保了工業產品的高可靠性。此次產品的研發就是基于芯源產品的系列有點進行的,并將對產品進行ESD測試等內容。
【開發記錄】
第一步:硬件設計及PCB制板
此線控器是基于武漢芯源半導體推出的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;
}