擁有USB的PSoC應(yīng)用于風扇控制
該ADC的設(shè)定輸入范圍為0V~2.6V.電流DAC被接通,并針對一個200μA電流進行了設(shè)置。即使在20℃的溫度條件下,負載電壓也為2.4V.對于ADC的輸入范圍而言這是合適的。
最后考慮的是4個模擬塊和5個數(shù)字塊的資源使用。這似乎超出了可用資源的范疇。PSoC資源不僅是可配置的;而且還是動態(tài)可重構(gòu)的。由于轉(zhuǎn)速計和ADC永遠不會同時使用,因此它們可以共享數(shù)字資源。配置一個ADC并加以使用。然后配置一個轉(zhuǎn)速計并使用。
在該應(yīng)用中,4個數(shù)字塊實際上起到了5個數(shù)字塊的作用,也就是說數(shù)字塊資源的利用率達到了125%。
I2C從屬用戶模塊具有極佳的易用性。對于本例而言,端口5的靠下的7個引腳被用來設(shè)定地址。該用戶模塊只需要一個至其即將使用的RAM空間的指針。
就本例來說,下列變量將被存儲于I2C存儲空間中。
struct I2C_Space{/Memory Common to I2C
char cTem
p;
char cTempLowerLimit;
int iFanLowerRPM;
char cTempUpperLimit;
int iFanUpperRPM;
int iControlWeightFactor;
int iTachRPM;
} MyI2C_Space;
以下是使I2C接口正常運作所需的全部代碼:
EzI2Cslave_SetAddr((PRT5DR 0x7f0));/Port 5 controls I2C address
EzI2Cslave_SetRamBuffer( 11, 11,(BYTE *) MyI2C_Space );
EzI2Cslave_Start(void)
這些功能調(diào)用負責設(shè)定I2C地址、定義為I2C用戶模塊和程序的其余部分所共有的存儲空間、并啟動該外設(shè)。
下面的代碼列表示出了用于該風扇應(yīng)用的控制環(huán)路:
while(1){
while(bSleepTimerTick !=0);
bSleepTimerTick = 0;
LoadConfig_ADC();
MyI2C_Space.cTemp = cGetTemp();
UnloadConfig_ADC();
LoadConfig_Tach();
MyI2C_Space.iTachRPM = iReadTach();
UnloadConfig_Tach();
UpdatePWM();
}
請注意,ADC和轉(zhuǎn)速計始終處于被配置和重構(gòu)的狀態(tài)之下。
圖8:風扇控制示意圖
上述示意圖8出了完整的風扇控制設(shè)計方案(所有的元件都被連接到了其適當?shù)囊_)。
該設(shè)計可以很容易地進行修改,以增設(shè)更多的自動調(diào)溫器。只需將每個自動調(diào)溫器連接至其自己的引腳并讀出其電阻即可。該通信接口以往采用的是I2C,只需采用適當?shù)挠脩裟K便可輕而易舉地改為SPI、UART或USB。
采用可編程系統(tǒng)級芯片的賽普拉斯CY8C24794微控制器為實現(xiàn)與各種傳感器和外圍設(shè)備的連接奠定了基礎(chǔ)。其動態(tài)可重構(gòu)性有利于實現(xiàn)極高的片上資源利用率。對于我來說,它是理想的嵌入式系統(tǒng)控制器選擇。
評論