具有USB的PSoC在风扇控制中的应用
扫描二维码
随时随地手机看文章
在选择微控制器的过程中,一个重要的特征是其与周围环境的全面连接能力。基于微控制器的系统必须具有一个至传感器的简易型廉价接口以及通信接口等等。赛普拉斯公司的可编程系统级芯片(PSoC)架构提供了适合各种应用且灵活性和经济性极佳的解决方案。
本文将着重介绍CY8C24794 PSoC芯片。如下文所述,它具有四个主要部分:PSoC内核、数字系统、模拟系统和包括一个全速USB端口的系统资源。这种架构使得用户能够创建与各应用的要求相吻合的定制外设配置。USB接口再加上可配置模拟和数字外设,使得CY8C24794在与其外部环境的连接中拥有了最佳的通用性。
PSoC内核包括:
·一个8位、4MIPS CPU
·16kbytes程序快速擦写ROM
·1Kbytes数据RAM
·精度达±0.25%的内部24MHz振荡器(在USB应用中)
·睡眠和看门狗定时器
·低速32kHz振荡器
·通用型输入/输出引脚IO(GPIO)允许把任何引脚用作数字输入或输出,并将大多数引脚用作模拟输入或输出。每个引脚均可被用作一个数字或模拟中断。
数字系统由4个数字PSoC块组成。如下图所示,每个块都是一个8位资源,既可单独使用,也可与其他块相组合以形成外设。
可能的外设包括:
·PWM(8位~32位)
·具有不工作区的PWM(8位~24位)
·计数器(8位~32位)
·具有可选奇偶性的8位UART
·SPI主控器和从动器
·循环冗余校验器/发生器(8位~32位)
·伪随机序列发生器(8位~32位)
这些数字块可通过一系列通用总线与任何GPIO相连。这些总线还为进行信号多路复用和逻辑运算创造了条件。
下图所示的模拟系统包括6个可配置块,每个块由一个运算放大器电路组成,从而实现了复杂模拟信号流的生成。模拟外设具有非常高的灵活性,并可通过客户化设计来支持特定的应用要求。
一些更加常用的PSoC模拟部件是:
·滤波器(双极点和四极点带通、低通和陷波滤波器)
·放大器(多达2个,具有至48倍的可选增益)
·仪表放大器(1个,具有至93倍的可选增益)
·比较器(多个2个,具有16种可选门限)
·DAC(多达2个,具有6位~10位分辨率)
·SAR型ADC(多达2个,具有6位分辨率)
当与数字块组合时,用户还能够生成额外的部件,包括:
·增量型ADC(多达2个,具有6位~14位分辨率)
·增量-累加(ΔΣ)型ADC(1个,在62.5ksps采样速率条件下具有8位分辨率)
附加的系统资源可提供适用于完整系统设计的更多功能。这些资源包括:
·具有5个可配置端点和256bytes RAM的全速USB(12Mbps),只需要2个外部串联电阻器。
·硬件I2C通过两根电缆提供了100kHz和400kHz通信。支持从模式、主模式和多主模式。
·数字时钟分频器提供了三种适合不同应用的可定制时钟频率。可通过布线使时钟与数字和模拟系统相连。
·两个乘法累加单元(MAC)提供了具有16位结果的快速带符号8位乘法和32位累加运算功能,旨在帮助进行通用数学和数字信号处理。
·抽取器提供了一个针对数字信号处理应用(包括ΔΣ型ADC的形成)的定制硬件滤波器。
·低电压检测(LVD)中断能够指示电压电平的下降,而先进的POR(上电复位)电路则免除了增设一个系统监控器的需要。
·内部1.3V基准提供了一个用于模拟系统(包括ADC和DAC)的绝对基准
·通用型模拟多路复用器系统。
当选择一个控制器时,设计师必须了解需要多少个模拟输入。对于只需要6个输入的系统,8个输入是否足够?需求会不会进一步提高?一个特殊的控制器系列能够处理多少个模拟输入?CY8C24794通过允许将其多达6个I/O端口与一个模拟多路复用器相连的方法(从而可将48个引脚用于模拟信号)解决了该问题。下图对此进行了详细的图示。
图4:CY8C24794 I/O模拟多路复用器总线/系统连接
一个I/O模拟多路复用器实际是两根总线,如果需要的话,可在内部进行连接。它实质上就是一个大型交叉开关,允许将 任何引脚连接至一个模拟控制系统的模拟阵列。每个引脚都具有一个开关,当被选择时则与一根模拟总线相连。如果模拟阵列和数字块被配置成一个ADC,则将能够检测多达48个输入信号的电压。
与模拟多路复用器总线相连的还有一个电流源。该电流DAC是可选的,并具有两个调节范围,即:0μA~20μA或0μA~400μA。如欲读出一个电阻值,则只需:
1 将电阻连接至一个引脚
2 把该引脚连接至模拟总线
3 启动电流DAC
4 利用同样连接至该总线的ADC来测量负载电压。该电压是电阻与电流的乘积。
为了获得超高准确度,一种方法是牺牲一个引脚来换取一个基准电阻器。将该电阻器连接至总线,并测量其两端的负载电压。然后,断开该电阻器、连接所需的电阻器并测量其负载电压。这两个电压读数之比就等于两个电阻器的阻值之比。电流准确度中的任何误差都将下降。此时,测量的准确度完全取决于基准电阻器的准确度。
加至模拟多路复用器上的一个放电开关可被用来测量电容。当受到DC电流的激励时,与电阻器将产生一个DC负载电压
不同,电容器生成的是一个斜坡电压。该斜坡速率与激励电流成正比,而与测量电容成反比。为了方便该转换速率的测量,模拟部分被配置成一个采样比较器。电容器被连接至总线,从而产生一个转换信号。当该信号达到比较器的调整点时,放电开关进入工作状态,导致电容器放电回零。开关随后释放,该循环继续进行。这个过程被称为弛张振荡。显然,这种循环的频率与施加的电流成正比,而与电容成反比。比较器输出被馈至数字部分,这里已经配置了一个频率计数器或周期定时器。电容可从测量数字信号推导出来。
有多种换能器可将信号转换成电容,比如显微机械加工加速器。电容的一项重要应用是测量手指的存在与否。该技术可被用于电容性触摸开关的移植,这种触摸开关正在逐渐取代消费类电子产品(比如:MP3播放器、笔记本电脑和移动电话)中的按钮和开关。电容性触摸开关提供了一种独特的用户体验,而且不易受到潮湿以及其他环境因素的损坏。
风扇控制应用
PSoC器件的常见应用之一便是风扇控制。PSoC架构的超群集成度使得实际风扇控制应用的元件数量减少了25个以上。我们将研究下面方框图中所示的一种速度受控型风扇实例。
对所需的温度进行测量,并将测量值用于定义期望的风扇速度(调整点)。最初,对于20℃以下的温度,该参数为2000RPM;对于70℃以及更高的温度,该参数则为7000RPM,并且随着这些极限值之间的温度呈线性变化。这些是初始值;它们必须能够由主机通过I2C接口来改变。输送至风扇的功率由一个脉宽调制器(PWM)来控制。其频率应接近1kHz。一个转速计被连接至风扇,用于测量其速度。控制算法求得期望速度与测量速度之差(误差),并用它来确定PWM的合适占空比。与温度一样,这些控制参数的设定值也必须能够通过I2C主机来改变。
PWM是利用一个数字块来实现的。所做的一项改进是采用了另一个数字块来生成一个具有50.2%(128/255)占空比的伪随机脉冲流。当把该信号连接至PWM启动引脚时,PWM的工作频率将是一个连续启动的PWM的50.2%,如下图所示。
这种方案的好处是输出频率现在拥有了一个±3%的高频抖动。这显著地降低了峰值谐波EMI辐射。
脉冲宽度的改变将在软件的控制之下进行。
转速计电路由两个数字块(被配置为一个16位定时器)和一个连续模拟块(被配置为一个比较器)组成,用于调节风扇的转速计信号。
风扇速度是通过测量两个脉冲之间的时间长度来确定的。比较器与列比较器总线0相连,后者又与定时器的捕获信号相连。风扇的标称转速为2000rpm~7000rpm。选定的风扇具有4个极点,因此标称范围将具有133Hz(2000×4/60)和467Hz的标称频率。当采用一个用于实现定时器同步的2MHz系统时钟时,可以测量长达328mS或31Hz的脉冲宽度。
一个热敏电阻将被用来测量温度。所选的产品型号是muRata NTH5G16P33B103J07TH,其温度-电阻关系如下。
如欲测量热敏电阻的阻值,则把一个热敏电阻和一个10k基准电阻器连接至可以使用模拟多路复用器MUX1的引脚。连续时间模拟块被配置为一个缓冲器,其输入与模拟MUX总线1相连。该列中剩余的两个块和一个数字块被 配置为一个14位ADC,如下图所示。
该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:风扇控制示意图
该设计可以很容易地进行修改,以增设更多的自动调温器。只需将每个自动调温器连接至其自己的引脚并读出其电阻即可。该通信接口以往采用的是I2C,只需采用适当的用户模块便可轻而易举地改为SPI、UART或USB。
采用可编程系统级芯片的赛普拉斯CY8C24794微控制器为实现与各种传感器和外围设备的连接奠定了基础。其动态可重构性有利于实现极 高的片上资源利用率。对于我来说,它是理想的嵌入式系统控制器选择。