微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 拥有USB的PSoC应用于风扇控制

拥有USB的PSoC应用于风扇控制

时间:09-06 来源:互联网 点击:

个风扇都有自己的电源,使风扇可以很容易地替换而不需要关闭整个系统。

  PSoC器件的常见应用之一便是风扇控制。PSoC架构的超群集成度使得实际风扇控制应用的元件数量减少了25个以上。

  如上述方框示意图5即为一种速度受控型风扇的实例。我们将对其进行研究PSoC器件对其带来的作用。

  我们对所需的温度进行测量,并将测量值用于定义期望的风扇速度(调整点)。最初,对于20℃以下的温度,该参数为2000RPM;对于70℃以及更高的温度,该参数则为7000RPM,并且随着这些极限值之间的温度呈线性变化。这些是初始值;它们必须能够由主机通过I2C接口来改变。输送至风扇的功率由一个脉宽调制器(PWM)来控制。其频率应接近1kHz。一个转速计被连接至风扇,用于测量其速度。控制算法求得期望速度与测量速度之差(误差),并用它来确定PWM的合适占空比。与温度一样,这些控制参数的设定值也必须能够通过I2C主机来改变。

  如上述示意图6所示,PWM(脉冲调制器)是利用一个数字块来实现的。所做的一项改进是采用了另一个数字块来生成一个具有50.2%(128/255)占空比的伪随机脉冲流。当把该信号连接至PWM启动引脚时,PWM的工作频率将是一个连续启动的PWM的50.2%。

  这种PWM实现方案的好处是输出频率现在拥有了一个±3%的高频抖动,这样可以显着地降低了峰值谐波EMI辐射。

  脉冲宽度的改变将在软件的控制之下进行。

  转速计电路由两个数字块(被配置为一个16位定时器)和一个连续模拟块(被配置为一个比较器)组成,用于调节风扇的转速计信号。

  风扇速度是通过测量两个脉冲之间的时间长度来确定的。比较器与列比较器总线0相连,后者又与定时器的捕获信号相连。风扇的标称转速为2000rpm~7000rpm。选定的风扇具有4个极点,因此标称范围将具有133Hz(2000×4/60)和467Hz的标称频率。当采用一个用于实现定时器同步的2MHz系统时钟时,可以测量长达328mS或31Hz的脉冲宽度。

  上述示意图为一个将被用来测量温度,被选产品型号为muRata NTH5G16P33B103J07TH的温度-电阻关系。

如欲测量热敏电阻(由具有很高电阻温度系数的固体半导体材料构成的热敏类型的温度检测元件)的阻值,则把一个热敏电阻和一个10k基准电阻器连接至可以使用模拟多路复用器MUX1的引脚。连续时间模拟块被配置为一个缓冲器,其输入与模拟MUX总线1相连。该列中剩余的两个块和一个数字块被配置为一个14位ADC,如上述示意图7所示。

  该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,只需采用适当的用户模

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top