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