仝林林
(山西银河电子设备厂,山西太原,030000)
风扇作为最常见的散射器件,在大部分控制单元都随处可见,而当散热需求高,综合考虑产品尺寸,风扇大小,风量等因素时,有时会需要数量比较大风扇,此时,对控制芯片的硬件资源要求就会比较高[1]。GD32F107VC 是兆易创新的MCU 芯片,具有丰富的外设和多路定时器等硬件资源,包括串口、网口和IIC 等硬件接口,基本满足绝大部分的控制系统需求,而且该芯片具有高达5 个可以输出PWM 控制信号的定时器,而且其中的高级定时器可以输出8 路PWM 信号,通用定时器可以输出4 路PWM 信号,同时可以输出多达24 路的PWM 信号,满足大多数设计要求。
本系统的风扇调速板设计时,与主控单元的通信是基于其硬件IIC 接口实现的IPMB 总线管理,IPMB 总线应用于多主操作,IPMB 协议使用的物理层是IIC 总线。IPMB 使用“请求-应答”协议,请求消息和应答消息都是通过IIC 总线的主设备传输的,即一条请求消息是从一个作为IIC 主端的节点发出,被一个作为IIC 从节点的设备接收。请求消息和应答消息网络功能号不同,用于区分该消息是请求消息还是应答消息。在接收到控制指令后,利用其定时器1、定时器2、定时器3、定时器4 的PWM 输出和PWM 信号捕获功能实现了风扇的转速控制及转速检测功能。
GD32F107 系列芯片具有强大的定时器功能,其中包括通用定时器TIM2、TIM3、TIM4 和TIM5,高级定时器TIM1 和TIM8,以及基本定时器TIM6 和TIM7,但是TIM8 只在大容量产品中存在,在小容量芯片中,高级定时器只有TIM1[2][3]。除了具有基本的定时功能外,通用定时器和高级定时器还具有信号的频率测量,信号的PWM 测量、PWM 输出和三相6 步电机控制等功能。本文利用他的PWM 输出和信号频率检测功能,实现了风扇的转速控制及转速测量功能[4]。利用高级定时器1 输出PWM 信号时,还需要额外增加函数timer_primary_output_config(TIMER0,ENABLE);而利用通用定时器时,则不需要该函数。
该系统主要由GD32F107VC 作为主控芯片,在主控IIC信号与MCUIIC 信号之间采用隔离芯片,能够满足热拔插需求,保护后级芯片。BL1117 作为电源LDO 芯片,LM75A 作为温度传感器芯片搭配RS3232 进行调试组成。该系统需要实现通过IPMB 协议,实现对8 个风扇模块的风速控制和转速检测,所以需要用到16 路PWM,由于定时器2 和定时器5 共用GPIO 管脚,所以在硬件设计时,只能选用其一,本方案中选择TIM2、TIM3 进行PWM 信号输出,通过输出不同占空比的PWM信号,实现对风扇转速的控制;选用TIM1 和TIM4 进行风扇转速检测,其中为了避免管脚冲突,TIM1 需要配置成映射功能。
IPMB 协议采用GD32F107VC的硬件IIC 实现,温度传感器LM75A 采用GPIO 软件模拟IIC实现。IIC 协议在通信过程中,会首先由主机产生一个开始信号,此时,IIC 总线上的所有从设备都会收到主机发送的开始信号,开始信号产生后,总线上的所有设备等待匹配接下来主机发送的从机地址信号,当该地址信号与某从机设备地址相同时,该设备就会与主机进行通信,而其他设备则会忽略后边的数据,不对数据进行响应。在地址之后,是传输方向的选择。当传输方向为主写从时,在主机成功接收到应答信号后,主机将向从机开始发送数据,直到主机发送STOP信号后,通信结束。当传输方向为主读从时,在收到应答信号后,从机开始向主机返回数据,直到主机返回非应答信号NACK 后,从机自动停止数据发送。
本设计采用的风扇为4 线风扇,分别为红色、黑色、白色和蓝色,其中红色和黑色分别代表电源正线和电源负线,白色代表测速线,用于监测风扇的转速,作为反馈信号,防止风扇坏掉引起散热异常,蓝色代表PWM 信号线,用于调速,通过该表PWM 的占空比就可以实现对风扇转速的控制。
为了隔离风扇信号对MCU 信号的影响,在风扇信号与MCU 信号之间设计了光耦进行隔离,达到了两种电平信号之间的互相独立。
图1 MCU 原理图
图2 风扇接口原理图
图3 风扇调速板硬件设计顶层
图4 风扇调速板硬件设计底层
GD32F107VC 最高可以工作在108MHz,在本系统中,设计其系统时钟为108MHz.软件设计流程主要为系统时钟配置,硬件IIC 初始化,串口初始化和定时器初始化。
GD32F107VC 具有两路硬件IIC 资源。本设计中进行了冗余设计,利用IIC 中断进行主控单元控制指令的接收,当收到主控的START 信号后,进入接收中断,并判断主控发送的地址是否与风扇转速控制板地址匹配,若匹配,则进行指令接收,若不匹配,则退出中断。由于硬件IIC 工作在多主模式下时,有时会出现总线忙导致程序卡死状态,所以本设计进行了超时设计,即当检测到总线忙超过指定时长时,对总线进行拉低操作,从而达到释放总线的目的。
软件流程主要包括系统时钟初始化,外设初始化,中断配置(包括定时器中断,IIC 中断,其中IIC 中断的优先级高于定时器中断),等待接收指令,PWN 输出,转速信号检测,信息上报等功能。具体流程图见图5 所示。
图5 软件流程图
对硬件IIC 的初始化流程包括:
(1)开启IIC 时钟;
(2)配置IO口,配置为GPIO_Mode_AF_OD模式(开漏输出);
(3)选择IIC 模式;
(4)设置设备地址模式,7bit 或者10bit;
2005年汇改前,我国基本上处于固定汇率状态,因此汇率政策波动对宏观经济几乎没有影响。2005年汇改时,人民币正处于升值周期,汇改当日人民币汇率一次升值2%,对进出口贸易先有正向拉动后有负向冲击,对物价和国内商品需求也有类似影响趋势;但由于人民币汇率的升值,以美元计价的外汇储备短期内受到缩水影响,进而影响国内货币供给量;但从整体影响来看,2005年汇改并没有带来经济增长的大幅波动。
(5)设置IIC 总线的传输速率为400KHz;
(6)配置中断函数,等待开始信号。
对定时器的初始化流程包括:
(1)开启定时器时钟;
(2)配置IO 口,输出PWM 信号的管脚配置为GPIO_MODE_AF_PP 模式(推挽输出),输入信号检测管脚配置为GPIO_MODE_IN_FLOATING 模式(浮空输入);
(3)设置寄存器参数,包括自动重装载寄存器和预分频寄存器;
(4)设置定时器为PWM 模式,使能对应通道输出功能或输入捕获功能。
(5)在定时器初始化时,PWM 输出信号的频率主要有两个参数决定,分别为装载数ARR 和分频系数PRESCALER。PWM的频率为:定时器时钟/(ARR+1)/(PRESCALER),在本系统中,定时器时钟为108MHz,ARR 为39,分频系数为107,所以PWM 的输出频率为25KHz。此外,通过改变分频系数的值分别为4,9,14,19,24,29,34,39,实现占空比,12.5%,25%,37.5%,50%,62.5%,75%,87.5%,100%8 种不同占空比的PWM 输出,从而实现风扇的8 档风速控制。
(6)而对输入信号检测定时器的配置,配置自动重装载值为65536,分频系数为107。
(7)利用PWM 的输入模式,可以采集输入信号的频率,其中输入捕获模式,是上升沿触发,记录一个时间t1,下一次上升沿时记录第二个时间t2,两个时间之差就是标准时钟周期内检测到的输入信号脉冲的个数,用标准时钟频率除以个数,即为检测信号的频率,根据风扇的技术说明书可知,该频率乘以30,即为风扇此刻的转速。
当程序收到主控的设置风扇指令时,程序首先会读取当前的环境温度,若温度值低于预设值,则不对设置指令进行响应,防止低温环境下,风扇工作时造成风扇损坏。当温度值满足条件时,进行相应占空比的PWM 信号输出,并反馈给主控程序是否设置成功。
本文设计以GD32F107VC 为控制芯片,利用其定时器功能进行PWM 信号输出和转速信号捕获,利用其硬件IIC 实现与主控模块的IPMB 协议通信,本设计对研究GD32F107VC 的定时器研究和硬件IIC 研究具有一定的指导意义,为后续类似的风扇控制系统设计提供了一种解决方案,具有一定的现实意义。