基于CW32L083的線控器方案設(shè)計
【 前言 】
線控器,是中央空調(diào)的“指揮家”。是空調(diào)運(yùn)行的第一步,也是日常調(diào)節(jié)的中樞,通過線控器指令的傳導(dǎo),空調(diào)就會做出相應(yīng)的服務(wù)。隨著空調(diào)普及率的提高,空調(diào)線控器及遙控器的產(chǎn)量不斷上升。又由于單片機(jī)的集成度高,功能強(qiáng),通用性好,且其體積小,重量輕,能耗低,可靠性高,抗干擾能力強(qiáng)等特點(diǎn),所以大部分空調(diào)遙控器和線控器都采用單片機(jī)作為主控制器。
芯源推出的CW32系列產(chǎn)品已全面實現(xiàn) -40℃ ~ 105℃超寬溫度范圍和 1.65V~5.5V 超寬工作電壓,面向最廣泛的各種基礎(chǔ)應(yīng)用。CW32系列HBM ESD、MM ESD、CDM ESD、Latch up@105℃全面達(dá)到JEDEC最高等級,所以CW32系列具備穩(wěn)定可靠的eFLASH制造,確保了工業(yè)產(chǎn)品的高可靠性。此次產(chǎn)品的研發(fā)就是基于芯源產(chǎn)品的系列有點(diǎn)進(jìn)行的,并將對產(chǎn)品進(jìn)行ESD測試等內(nèi)容。
【開發(fā)記錄】
第一步:硬件設(shè)計及PCB制板
此線控器是基于武漢芯源半導(dǎo)體推出的CW32L083低功耗系列產(chǎn)品設(shè)計研發(fā)而成的,其主要包括MCU、觸摸模塊、通信模塊、紅外遙控模塊、存儲模塊、編程接口等部分,設(shè)計系統(tǒng)原理框圖如圖1所示:
圖1 系統(tǒng)原理框圖
該線控器自帶背光,白底黑字液晶,觸摸按鍵,可顯示和設(shè)置時鐘,可預(yù)約24小時開關(guān)機(jī)(倒計時、時刻定時功能),可調(diào)節(jié)7檔風(fēng)速、上下掃風(fēng)和左右掃風(fēng),可切換自動、制冷、初始、送風(fēng)、自熱等模式,不僅可以通過WiFi與手機(jī)相連使用APP控制,還可以接收紅外遙控器控制,具有機(jī)組參數(shù)查詢與設(shè)置功能,防潮設(shè)計、不易受潮。其設(shè)計原理圖及PCB板實物圖分別如圖2、圖3所示:
圖2 線控器原理圖
圖3 線控器PCB板
第二步:軟件設(shè)計
軟件部分主要分為以下幾部分內(nèi)容,軟件構(gòu)成如圖4所示:
圖4 線控器程序圖
- LCD顯示部分,LCD主要顯示溫度,風(fēng)速,模式等系列設(shè)置內(nèi)容,例如模式設(shè)置內(nèi)容為:
/*
- @brief 運(yùn)行模式顯示
- @detail 顯示自動、制暖、制冷、抽濕和送風(fēng)
*/
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;
}
}
- 蜂鳴器部分,主要實現(xiàn)功能是按鍵響應(yīng),例程如下:
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;
}
-
按鍵部分,按鍵主要是用來處理按鍵信息,實現(xiàn)用戶想要設(shè)置的內(nè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--送風(fēng)
{
//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;
}