TPL0501数字电位器原理及驱动代码

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) {
       
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值