【武汉芯源】基于CW32L083的线控器方案设计

文章介绍了基于芯源CW32L083低功耗单片机设计的一款线控器,包括其硬件设计(MCU、触摸模块等)、软件设计(LCD显示、蜂鸣器、存储、按键处理等)以及下载调试过程,并强调了产品在1.5KV电压干扰下的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于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;

}

}

  • 存储部分,存储用的是24C04,通过使用IIC通讯方式与MCU进行连接的,用来存储用户设置的相关信息等,例程如下:

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;

}

  • 触摸部分,由于CW32L083本身没有触摸功能,所以另外又搭配了YS806电容感应式芯片,此芯片也是通过I2C与主芯片进行通讯的,具体部分例程如下:

uint8_t I2C_806_ReadByte(uint8_t ack)

{

  unsigned char i, Data;

  I2C_806_SDA_INPUT();

  Data = 0x00;

  for(i = 0; i < 8; i++){

    Data <<= 1;

    

I2C_806_SCL_HIGH();

    DelayIIC(HALF_CLK_CYCLE);

    

if(I2C_806_SDA_READ()){

      Data |= 0x01;

    } else { }    DelayIIC(HALF_CLK_CYCLE);

    I2C_806_SCL_LOW();

    DelayIIC(CLK_CYCLE);

  }

  I2C_806_SDA_OUTPUT();  //send ACK or not

  if(ack){

    I2C_806_SDA_HIGH();

  } else {

    I2C_806_SDA_LOW();

  }

  I2C_806_SCL_HIGH();

  DelayIIC(CLK_CYCLE);

  I2C_806_SCL_LOW();

  DelayIIC(CLK_CYCLE);

  return Data;

}

除以上部分外还有其他例如背光、红外等程序内容,在此就不一一赘述。

第三步:下载调试

线控器安装液晶屏后,只需下载程序即可上电调试。为了方便刷程序,将程序的hex文件烧录至离线编程器中,四线插入正确按下烧录键即可烧录成功。烧录后通过按不同的触控按钮,实现其相对应的功能。然后再对产品进行1.5KV电压干扰下测试,测试结果展示如下图5所示,其功能及状态属于正常。

图5 1.5KV干扰下测试状态

第四步:总结

以上即为本次线控器设计的全部基本内容,可以方便快捷的满足客户的需求,控制空调温度,调节空调模式、风速等,当然也有不足,后续将继续改进。

<think>好的,我现在需要帮助用户了解CW32F003F4片中定时器的使用方法和配置示例。首先,我应该回忆一下这款片的基本信息,它是武汉半导体推出的32位MCU,属于CW32F003系列,主打低功耗和高性价比。根据用户提供的参考引用,虽然链接是关于灵动MM32的,但用户的问题集中在CW32的定时器上,所以需要专注于CW32的文档。 接下来,用户需要定时器的使用方法、配置步骤和示例。首先,我需要确定CW32F003F4支持哪些定时器类型。通常,MCU会有基本定时器、通用定时器、高级定时器等。例如,STM32有TIM1、TIM2等,但CW32的定时器结构可能不同。查阅数据手册的话,可能会发现CW32F003F4可能有多个定时器,如TIM1、TIM2等,每个可能有不同的功能,比如基本定时、PWM输出、输入捕获等。 然后,配置定时器的步骤通常包括:时钟使能、定时器结构体配置(预分频、重载值、计数模式等)、中断配置(如果需要中断)、启动定时器。需要确保用户了解如何设置这些参数,例如时钟的选择、预分频器的作用,自动重载值如何决定定时周期。 用户可能需要一个具体的示例,比如配置定时器实现1秒的中断。这时候需要计算时钟频率。假设系统时钟是48MHz,预分频器设置为47999,这样分频后的时钟是48MHz/(47999+1)=1kHz。自动重载值设为999,这样定时器每1000个周期触发一次中断,即1秒一次。不过,实际时钟频率需要确认,因为不同MCU的默认时钟配置可能不同,用户可能需要根据实际情况调整。 另外,中断服务函数的编写也是关键,需要告诉用户如何编写中断处理程序,并在其中清除中断标志位,否则会重复进入中断。同时,初始化NVIC设置优先级和使能中断。 需要注意的常见问题包括:时钟是否使能、预分频和重载值的计算是否正确、中断是否配置正确。比如,预分频器的值是从0开始计数的,所以实际分频系数是写入值加1。重载值也是如此,自动重载寄存器ARR的值决定计数到多少后溢出。 可能还需要提到定时器的不同模式,比如向上计数、向下计数、中央对齐模式,以及PWM模式下的配置方法,但用户可能主要关注基础定时功能。如果用户的问题更偏向应用,比如PWM生成,可能需要另一个示例,但当前问题主要是定时器的基本使用,所以先给出基础示例。 最后,生成相关问题,帮助用户进一步学习,例如如何生成PWM、使用输入捕获、低功耗模式下的定时器配置等。这些扩展问题能帮助用户深入理解定时器的其他功能。</think>### CW32F003F4定时器配置详解 #### 一、定时器基础配置步骤 1. **时钟使能**:通过RCC模块使能定时器时钟 ```c RCC_APBPeriphClk_Enable(RCC_APBPeriph_TIM1, ENABLE); // 以TIM1为例 ``` 2. **参数配置**:设置预分频器、自动重载值和工作模式 ```c TIM_InitTypeDef TIM_InitStructure; TIM_InitStructure.Prescaler = 47999; // 预分频值 TIM_InitStructure.CounterMode = TIM_CounterMode_Up; // 向上计数模式 TIM_InitStructure.Period = 999; // 自动重载值 TIM_InitStructure.ClockDivision = TIM_CKD_DIV1; // 时钟分频 TIM_InitStructure.RepetitionCounter = 0; // 重复计数(高级定时器特有) TIM_TimeBaseInit(TIM1, &TIM_InitStructure); ``` 3. **中断配置**(以1秒定时为例): ```c NVIC_EnableIRQ(TIM1_IRQn); // 使能定时器中断通道 TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); // 使能更新中断 ``` 4. **启动定时器**: ```c TIM_Cmd(TIM1, ENABLE); // 启动计数器 ``` #### 二、中断服务函数实现 ```c void TIM1_IRQHandler(void) { if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) { // 用户自定义处理代码 TIM_ClearITPendingBit(TIM1, TIM_IT_Update); // 必须清除中断标志 } } ``` #### 三、参数计算示例 当系统时钟为48MHz时: - 预分频器值 = 48000-1 → 分频后频率=1KHz - 自动重载值 = 1000-1 → 定时周期=1秒 数学表达式:$$ T_{interval} = \frac{(Prescaler+1) \times (Period+1)}{F_{clk}} $$ #### 四、关键注意点 1. 定时器时钟需要单独使能 2. 预分频器和自动重载值寄存器都是16位(最大65535) 3. 中断标志必须手动清除 4. 不同定时器功能差异: - TIM1:高级控制定时器,支持互补输出 - TIM2/TIM3:通用定时器 - LPTIM:低功耗定时器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值