TPL0501是通过SPI接口的抽头单通道数字电位器。其简单参数如下:
- 单通道具有256位置的分屏率。
- 100kΩ 端到端电阻选项
- 低温度系数:35ppm/°C
- SPI兼容串行接口
- 2.7V 至5.5V 单电源运行
- ±20%电阻容差
- •工作温度:–40°C至+125°C
- •ESD性能测试符合JESD22标准– 2000V 人体放电模型(A114-B,II类)
芯片内部原理图结构:
TPL0501芯片采用三线SPI兼容串行数据接口。该只读接口包含三个输入端:芯片选择(CS)、数据时钟(SCLK)和数据输入(DIN)。当SCLK信号上升沿到来时,需将CS拉低以激活串行接口,并同步将数据时钟信号输入移位寄存器。完成数据加载后,需将CS拉高以锁存数据至对应的电位计控制寄存器,并关闭串行接口。在整个串行数据传输过程中,需持续保持CS低电平以防止数据损坏。
- 时序图:
芯片驱动代码:
#include <stdio.h>
#include "Delay.h"
#include <N76E003.H>
#include "Function_Define.h"
#include <intrins.h>
#define SCLK P10
#define DIN P11
#define CS P12
void TPL0501_Init(void)
{
// 设置引脚为推挽输出模式
P10_PushPull_Mode;
P11_PushPull_Mode;
P12_PushPull_Mode;
// 初始状态:CS高电平(不选中),SCLK低电平
CS = 1;
SCLK = 0;
DIN = 0;
}
void TPL0501_SetResistance(uint8_t value)
{
uint8_t i;
// 启动传输:拉低CS
CS = 0;
_nop_(); _nop_(); // 满足t_CSS时序(>15ns)
// 发送8位数据(MSB first)
for(i = 0; i < 8; i++)
{
SCLK = 0;
_nop_();
// 设置数据位
if(value & 0x80) {
DIN = 1;
} else {
DIN = 0;
}
_nop_(); _nop_(); // 满足t_DS时序(>5ns)
// 时钟上升沿,数据被采样
SCLK = 1;
_nop_(); _nop_(); _nop_(); // 满足t_SCL和t_SCH时序(>20ns)
value <<= 1; // 左移准备下一位
}
// 结束传输:拉高CS
SCLK = 0;
_nop_();
CS = 1;
_nop_(); _nop_(); _nop_(); _nop_(); // 满足t_CSW时序(>40ns)
}
int main()
{
TPL0501_Init();
TPL0501_SetResistance(0x80);
while(1) {
}
}