1.MBI5026功能说明
这次做一个配电控制器,其中用到了MBI5026GF,用于控制连通电路的继电器。MBI5026将16位的串行数据变换为并行数据,16路I/O为取反的恒定电流输出,最大输出为90mA。这意味着串行数据中某一位为1对应的输出低电平。为0对应输出高电平。MBI5026默认最先接受的字节为高字节,每字节最先接收到的位为高位,所以在进行SPI初始设置时最好设置字节发送方式为MSB,这样就可以将发送的字节和5026的输出对应起来。比如发送字节的0位就是5026状态的0位。
2.MBI5026接线原理图
3.MBI5026注意事项
电源电压范围比较宽,我试过5V和3.3V都可以,但是有一点必须注意,MBI5026接受的高电平为0.8VDD—VDD,也就是说当VDD为5V的时候,SPI信号必须大于0.8*5V=4V才能认为是高电平。
R_EXT引脚要对地接一个下拉电阻,用途是调整输出电流的大小,这个外部电阻不能太大,手册中给出的最大值为3.5K欧姆。
在使用时LE必须输入高电平,否则数据不能进入锁存寄存器(虎风认为如果你在某个时候不想让MBI5026的状态再改变,则可以把LE引脚拉低,这样发送数据就不会影响片子的输出状态)。
在使用时OE必须输入低电平,这样输入的数据状态才能反映到片子的引脚上。如果OE为高电平,5026的引脚输出将关闭,引脚上没有输出(虎风认为之所以有这样一个功能是因为MBI5026时为LED显示屏所设计的芯片,当一个屏幕输出完毕切换下一个屏幕的时候关闭当前状态可以使显示效果更加清晰)。
LE应该对地接下拉电阻,作用是当没有输入的时候LE可以保持稳定的低电平,拒绝数据输入。
OE应该对VDD接上拉电阻,作用是当没有输入的时候OE可以保持稳定的高电平,拒绝引脚输出。
上面两个电阻的阻值标准为500K欧姆(手册上说的)。
SDO引脚输出上次输入的数据,可以用于级联。
4.MBI5026例程
#define M5026_OE(1<<10) //P0.10,MBI5026输出使能管脚,为高时MBI5026没有输出,所有输出管脚关闭,为低时将锁存寄存器状态输出到各个端口
#define M5026_LE(1<<24) //P1.24,MBI5026数据锁存管脚,为高时数据可以写入锁存寄存器,为低时锁存寄存器锁定,数据不能输入
int main (void)
{// add user source code
uint8 i=0;
//SPI发送数组,作用是将MBI5026输出端口0-9依次点亮
uint8 arr[20]={0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x01, 0x00, 0x02, 0x00};
//ARM管脚功能设置
PINSEL0 = 0x00000000;
PINSEL1 = 0x00000000;
PINSEL2 = 0x00000004;
//ARM管脚方向和状态设置
IO0DIR = 0xFFFFFFFF;
IO1DIR = 0xFFFFFFFF;
IO0CLR = 0xFFFFFFFF;
IO1CLR = 0xFFFFFFFF;
//设置OE为低,这样给入的数据才能从5026管脚反映出来
IO0CLR = M5026_OE;
//设置LE为高,这样数据才能给入
IO1SET = M5026_LE;
SPI_Init();
DelayNS(2000);
while(1)
{
for(i=0; i<20; i++)
{
SPI_SendData(arr[i]);
i++;
SPI_SendData(arr[i]);
//设置一段长的延时,以便观察结果
DelayNS(10000);
}
}
return 0;
}