仝林林
(山西銀河電子設備廠,山西太原,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 研究具有一定的指導意義,為后續類似的風扇控制系統設計提供了一種解決方案,具有一定的現實意義。