0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32 驱动 MCP4017T 数字电位器芯片

jf_88434166 2025-10-24 19:58 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、MCP4017T 简介

MCP4017T 是一款数字电位器(Digital Potentiometer),具有 7 位分辨率(即 128 个电阻步进),通过 I²C 接口控制。它采用非易失性存储器,可在掉电后保留设定值,广泛应用于音量控制、电压调整、偏置电平调节等模拟电路中。

二、引脚功能

VDD电源
VSSGND
B电位器端子 B
W电位器滑动端(Wiper)
SDAIIC数据线
SCLIIC时钟线

三、电阻网络结构和滑动端(Wiper)控制原理

在这里插入图片描述

  1. 由 127 个相同阻值的电阻(RS)串联组成,构成从 Terminal A 到 Terminal B 的一串“电阻阶梯”(Resistor Ladder)。
  2. 每个电阻之间的连接点称为“tap”(抽头),滑动端(Wiper,W 端)可以连接到任意一个 tap。
  3. 由于电阻(RS)有 127 个,加上端点 A 和 B,共有 128 个 wiper 位置,对应 7 位分辨率(2⁷ = 128)。
  4. 端点 A 和 B 接在串联电阻的两端,W 则是可调的输出点。
  5. 00h(即十进制 0)表示 Wiper 连到 Terminal B,即 最小输出(Zero Scale)。
  6. 3Fh(即十进制 63)是 中间位置(Mid Scale)。
  7. 7Fh(即十进制 127)表示 Wiper 连到 Terminal A,即 最大输出(Full Scale)

简单说该芯片可以看作一个 128 段的有级可调电位器,每级间的阻值 RS = RAB/2⁷-1 ,例如本次测试的芯片为 MCP4017T-103ELT,RAB = 10K,RS = 10K/127 = 78.74 欧,故每移动一级开关(滑动端W),B-W 端电阻变化 78.74 欧,该开关(滑动端W)位置可通过IIC接口通讯设定。

四、IIC时序

1.写时序

在这里插入图片描述
写流程:起始信号 -- IIC地址写 -- ACK -- 发送数据 -- ACK -- 停止信号

2.读时序

在这里插入图片描述
读流程:起始信号 -- IIC地址读 -- ACK -- 接收数据 -- NACK -- 停止信号

五、程序

MCP4017T.c

#include "stm32f10x.h"                  // Device header
#include "MyI2C.h"

/*IIC 地址-------------------------------------------------------------------------------------------*/
#define MCP4017T_W 0x5E
#define MCP4017T_R 0x5F

void MCP4017T_WriteReg(uint8_t Data)
{
	MyI2C_Start();						    //I2C起始
	MyI2C_SendByte(MCP4017T_W);	  			//发送从机地址,读写位为0,表示即将写入
    MyI2C_ReceiveAck();					    //接收应答
	MyI2C_SendByte(Data);			        //发送数据
	MyI2C_ReceiveAck();					    //接收应答
	MyI2C_Stop();						    //I2C终止
}
uint8_t MCP4017T_ReadReg(void)
{
	uint8_t Data=0;
	MyI2C_Start();					   	    //I2C起始
	MyI2C_SendByte(MCP4017T_R);	  		    //发送从机地址
	MyI2C_ReceiveAck();					    //接收应答
	Data = MyI2C_ReceiveByte();	  		    //接收数据
	MyI2C_SendAck(1);				  	    //发送非应答
	MyI2C_Stop();						    //I2C终止
	return Data;
}

main.c

#include "stm32f10x.h"
//#include "Delay.h"
//#include "OLED.h"
#include "MCP4017T.h"
#include "LED.h"
#include "Timer.h"
#include "MyI2C.h"

int8_t direction = 1,Series = 0;//Series:滑动端(Wiper,W 端)位置,范围 0-127 0-7F  ;  drection 变化方向:1 递增 / -1 递减
void TIM2_IRQHandler(void)//中断服务函数  0.5S 触发一次
{
	if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET)//获取TIM2更新中断(TIM_IT_Update)标志位
	{
		TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除更新中断标志位
	}
	if(direction == 1)
	{
		Series++;
		MCP4017T_WriteReg(Series);//设置 滑动端(Wiper,W 端) 位置
		if(Series >= 127)
		{
			direction = -1;//变化方向,设置为递减
		}
	}else
	{
		Series--;
		MCP4017T_WriteReg(Series);//设置 滑动端(Wiper,W 端) 位置
		if(Series <= 0)
		{
			direction = 1;//变化方向,设置为递增
		}
	}
	LED_Show();//滑动端(Wiper,W 端)变化指示灯
	MCP4017T_ReadReg();//返回滑动端(Wiper,W 端)的位置,范围 0-127 0-7F,返回数据无处理
}
int main(void)
{
	MyI2C_Init();
	Timer_Init();
	LED_Init();
	//MCP4017T_WriteReg(0x3f);//设置 滑动端(Wiper,W 端) 位置
	while(1)
	{
	}
}

六、实验现象

程序现象:B-W 端电阻由 0-10K 间循环变化,0 增大到 10K ,再 10K 减小到 0 循环
万用表测试及芯片误差,实际电阻变化范围为 150 -- 9.7K 左右)
在这里插入图片描述

注意该芯片断电模式下 B-W 端电阻所测不准偏大,需上电再测,上电默认为之前设定的电阻值

以上内容个人理解,如有不正欢迎指正,需要资料及工程可留言邮箱

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数字电位器
    +关注

    关注

    4

    文章

    277

    浏览量

    84640
  • STM32
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371044
  • STM32单片机
    +关注

    关注

    59

    文章

    553

    浏览量

    60299
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    怎么使用MCP4012T数字电位器

    您好,我不喜欢数字电位器,我正试图用MCP4012做一个可调放大器。但也许我误解了一些东西,电位器工作良好,当我连接万用表上,但一旦连接到AOP,复位值不正确。附加的SMEM R119
    发表于 08-26 14:30

    MCP4131数字电位器的使用

    你好,我用的是MCP4131数字电位器。我把CS线拉低,当我想使用它,然后拉高,当完成。但我注意到一些原理图,CS用高达10欧姆的电阻绑紧。我的设备好像行得通,但我不知道我是否应该系高线。谢谢。
    发表于 03-16 11:17

    怎样使用IAP15单片机的SPI控制数字电位器MCP41XXX

    使用IAP15单片机的SPI控制数字电位器MCP41XXX1. SPI的硬件连接2. 软件2.1 初始化2.2 串口接收命令并发送3. 总结前一篇的仪表中采用了一个MCP41100的
    发表于 11-23 06:44

    请问msp430是怎样驱动MCP4017数字电位器的呢

    msp430驱动MCP4017数字电位器驱动调试记录最近才学习msp430并接触mcp4017
    发表于 02-15 07:38

    怎样对MCP4017数字电位器进行读写操作呢

    请问一下怎样去使用MCP4017数字电位器呢?怎样对MCP4017数字电位器进行读写操作呢?
    发表于 03-01 06:01

    寻找国产数字电位器

    各大侠,本人有一个项目有用到MCP4551-502E/MS这个数字电位器,但由于交期与价格原因,公司想选用国内品牌数字电位器,请问,国内有哪
    发表于 03-25 10:31

    数字电位器替代机械电位器

    数字电位器替代机械电位器 摘要:数字可调节电位器,也称为数字
    发表于 11-27 17:38 3217次阅读
    用<b class='flag-5'>数字</b><b class='flag-5'>电位器</b>替代机械<b class='flag-5'>电位器</b>

    数字电位器工作原理详解_数字电位器应用_数字电位器选型指南

    本文介绍了什么是数字电位器数字电位器的特点与数字电位器工作原理,其次详细的介绍了
    发表于 01-23 10:20 6.2w次阅读
    <b class='flag-5'>数字</b><b class='flag-5'>电位器</b>工作原理详解_<b class='flag-5'>数字</b><b class='flag-5'>电位器</b>应用_<b class='flag-5'>数字</b><b class='flag-5'>电位器</b>选型指南

    常用数字电位器芯片有哪些

    本文主要介绍了常用数字电位器芯片有哪些。数字电位器采用数控方式调节电阻值的,具有使用灵活、调节精度高、无触点、低噪声、不易污损、抗振动、抗干
    发表于 01-23 11:01 11.7w次阅读
    常用<b class='flag-5'>数字</b><b class='flag-5'>电位器</b><b class='flag-5'>芯片</b>有哪些

    优化数字电位器电路设计方案

    机械式电位器通常用来调整系统参考电压、增益误差和偏置电压误差。数字电位器可以用来完成相同的功能,而且还能提供额外的数字调整控制功能。诸如Microchip的
    发表于 04-24 15:23 13次下载
    优化<b class='flag-5'>数字</b><b class='flag-5'>电位器</b>电路设计方案

    优化数字电位器电路,减少绝对和温度差异

    机械式电位器通常用来调整系统参考电压、增益误差和偏置电压误差。数字电位器可以用来完成相同的功能,而且还能提供额外的数字调整控制功能。诸如 Microchip的
    发表于 04-02 15:46 12次下载
    优化<b class='flag-5'>数字</b><b class='flag-5'>电位器</b>电路,减少绝对和温度差异

    数字电位器Linux驱动程序

    数字电位器Linux驱动程序
    发表于 04-21 16:56 9次下载
    <b class='flag-5'>数字</b><b class='flag-5'>电位器</b>Linux<b class='flag-5'>驱动</b>程序

    使用IAP15 SPI写数字电位器MCP41XXX

    使用IAP15单片机的SPI控制数字电位器MCP41XXX1. SPI的硬件连接2. 软件2.1 初始化2.2 串口接收命令并发送3. 总结前一篇的仪表中采用了一个MCP41100的
    发表于 11-15 11:36 8次下载
    使用IAP15 SPI写<b class='flag-5'>数字</b><b class='flag-5'>电位器</b><b class='flag-5'>MCP</b>41XXX

    msp430驱动MCP4017数字电位器

    msp430驱动MCP4017数字电位器驱动调试记录最近才学习msp430并接触mcp4017
    发表于 12-16 16:55 10次下载
    msp430<b class='flag-5'>驱动</b><b class='flag-5'>MCP4017</b><b class='flag-5'>数字</b><b class='flag-5'>电位器</b>

    MCP4661T-503E/ML数字电位器 QFN16

    MCP45XX和MCP46XX器件提供了广泛的使用I系列产品供应2C接口。这系列器件支持7位和8位电阻网络,非易失性存储的配置,并电位器和变阻器引脚。 型号:
    发表于 01-04 17:49 1296次阅读