拥有USB的PSoC应用于风扇控制
该ADC的设定输入范围为0V~2.6V.电流DAC被接通,并针对一个200μA电流进行了设置。即使在20℃的温度条件下,负载电压也为2.4V.对于ADC的输入范围而言这是合适的。
最后考虑的是4个模拟块和5个数字块的资源使用。这似乎超出了可用资源的范畴。PSoC资源不仅是可配置的;而且还是动态可重构的。由于转速计和ADC永远不会同时使用,因此它们可以共享数字资源。配置一个ADC并加以使用。然后配置一个转速计并使用。
在该应用中,4个数字块实际上起到了5个数字块的作用,也就是说数字块资源的利用率达到了125%。
I2C从属用户模块具有极佳的易用性。对于本例而言,端口5的靠下的7个引脚被用来设定地址。该用户模块只需要一个至其即将使用的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)
这些功能调用负责设定I2C地址、定义为I2C用户模块和程序的其余部分所共有的存储空间、并启动该外设。
下面的代码列表示出了用于该风扇应用的控制环路:
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和转速计始终处于被配置和重构的状态之下。
图8:风扇控制示意图
上述示意图8出了完整的风扇控制设计方案(所有的元件都被连接到了其适当的引脚)。
该设计可以很容易地进行修改,以增设更多的自动调温器。只需将每个自动调温器连接至其自己的引脚并读出其电阻即可。该通信接口以往采用的是I2C,只需采用适当的用户模块便可轻而易举地改为SPI、UART或USB。
采用可编程系统级芯片的赛普拉斯CY8C24794微控制器为实现与各种传感器和外围设备的连接奠定了基础。其动态可重构性有利于实现极高的片上资源利用率。对于我来说,它是理想的嵌入式系统控制器选择。
评论