一、MCP4017T 簡(jiǎn)介
MCP4017T 是一款數(shù)字電位器(Digital Potentiometer),具有 7 位分辨率(即 128 個(gè)電阻步進(jìn)),通過 I2C 接口控制。它采用非易失性存儲(chǔ)器,可在掉電后保留設(shè)定值,廣泛應(yīng)用于音量控制、電壓調(diào)整、偏置電平調(diào)節(jié)等模擬電路中。
二、引腳功能
| VDD | 電源正 |
|---|---|
| VSS | GND |
| B | 電位器端子 B |
| W | 電位器滑動(dòng)端(Wiper) |
| SDA | IIC數(shù)據(jù)線 |
| SCL | IIC時(shí)鐘線 |
三、電阻網(wǎng)絡(luò)結(jié)構(gòu)和滑動(dòng)端(Wiper)控制原理

- 由 127 個(gè)相同阻值的電阻(RS)串聯(lián)組成,構(gòu)成從 Terminal A 到 Terminal B 的一串“電阻階梯”(Resistor Ladder)。
- 每個(gè)電阻之間的連接點(diǎn)稱為“tap”(抽頭),滑動(dòng)端(Wiper,W 端)可以連接到任意一個(gè) tap。
- 由于電阻(RS)有 127 個(gè),加上端點(diǎn) A 和 B,共有 128 個(gè) wiper 位置,對(duì)應(yīng) 7 位分辨率(2? = 128)。
- 端點(diǎn) A 和 B 接在串聯(lián)電阻的兩端,W 則是可調(diào)的輸出點(diǎn)。
- 00h(即十進(jìn)制 0)表示 Wiper 連到 Terminal B,即 最小輸出(Zero Scale)。
- 3Fh(即十進(jìn)制 63)是 中間位置(Mid Scale)。
- 7Fh(即十進(jìn)制 127)表示 Wiper 連到 Terminal A,即 最大輸出(Full Scale)
簡(jiǎn)單說該芯片可以看作一個(gè) 128 段的有級(jí)可調(diào)電位器,每級(jí)間的阻值 RS = RAB/2?-1 ,例如本次測(cè)試的芯片為 MCP4017T-103ELT,RAB = 10K,RS = 10K/127 = 78.74 歐,故每移動(dòng)一級(jí)開關(guān)(滑動(dòng)端W),B-W 端電阻變化 78.74 歐,該開關(guān)(滑動(dòng)端W)位置可通過IIC接口通訊設(shè)定。
四、IIC時(shí)序
1.寫時(shí)序

寫流程:起始信號(hào) -- IIC地址寫 -- ACK -- 發(fā)送數(shù)據(jù) -- ACK -- 停止信號(hào)
2.讀時(shí)序

讀流程:起始信號(hào) -- IIC地址讀 -- ACK -- 接收數(shù)據(jù) -- NACK -- 停止信號(hào)
五、程序
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); //發(fā)送從機(jī)地址,讀寫位為0,表示即將寫入
MyI2C_ReceiveAck(); //接收應(yīng)答
MyI2C_SendByte(Data); //發(fā)送數(shù)據(jù)
MyI2C_ReceiveAck(); //接收應(yīng)答
MyI2C_Stop(); //I2C終止
}
uint8_t MCP4017T_ReadReg(void)
{
uint8_t Data=0;
MyI2C_Start(); //I2C起始
MyI2C_SendByte(MCP4017T_R); //發(fā)送從機(jī)地址
MyI2C_ReceiveAck(); //接收應(yīng)答
Data = MyI2C_ReceiveByte(); //接收數(shù)據(jù)
MyI2C_SendAck(1); //發(fā)送非應(yīng)答
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:滑動(dòng)端(Wiper,W 端)位置,范圍 0-127 0-7F ; drection 變化方向:1 遞增 / -1 遞減
void TIM2_IRQHandler(void)//中斷服務(wù)函數(shù) 0.5S 觸發(fā)一次
{
if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET)//獲取TIM2更新中斷(TIM_IT_Update)標(biāo)志位
{
TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除更新中斷標(biāo)志位
}
if(direction == 1)
{
Series++;
MCP4017T_WriteReg(Series);//設(shè)置 滑動(dòng)端(Wiper,W 端) 位置
if(Series >= 127)
{
direction = -1;//變化方向,設(shè)置為遞減
}
}else
{
Series--;
MCP4017T_WriteReg(Series);//設(shè)置 滑動(dòng)端(Wiper,W 端) 位置
if(Series <= 0)
{
direction = 1;//變化方向,設(shè)置為遞增
}
}
LED_Show();//滑動(dòng)端(Wiper,W 端)變化指示燈
MCP4017T_ReadReg();//返回滑動(dòng)端(Wiper,W 端)的位置,范圍 0-127 0-7F,返回?cái)?shù)據(jù)無處理
}
int main(void)
{
MyI2C_Init();
Timer_Init();
LED_Init();
//MCP4017T_WriteReg(0x3f);//設(shè)置 滑動(dòng)端(Wiper,W 端) 位置
while(1)
{
}
}
六、實(shí)驗(yàn)現(xiàn)象
程序現(xiàn)象:B-W 端電阻由 0-10K 間循環(huán)變化,0 增大到 10K ,再 10K 減小到 0 循環(huán)
(萬用表測(cè)試及芯片誤差,實(shí)際電阻變化范圍為 150 -- 9.7K 左右)
注意該芯片斷電模式下 B-W 端電阻所測(cè)不準(zhǔn)偏大,需上電再測(cè),上電默認(rèn)為之前設(shè)定的電阻值
以上內(nèi)容個(gè)人理解,如有不正歡迎指正,需要資料及工程可留言郵箱
-
數(shù)字電位器
+關(guān)注
關(guān)注
4文章
268瀏覽量
84523 -
STM32
+關(guān)注
關(guān)注
2301文章
11096瀏覽量
369995 -
STM32單片機(jī)
+關(guān)注
關(guān)注
59文章
551瀏覽量
60139
發(fā)布評(píng)論請(qǐng)先 登錄
怎么使用MCP4012T數(shù)字電位器
MCP4131數(shù)字電位器的使用
怎樣使用IAP15單片機(jī)的SPI控制數(shù)字電位器MCP41XXX
請(qǐng)問msp430是怎樣驅(qū)動(dòng)MCP4017數(shù)字電位器的呢
怎樣對(duì)MCP4017數(shù)字電位器進(jìn)行讀寫操作呢
尋找國(guó)產(chǎn)數(shù)字電位器
用數(shù)字電位器替代機(jī)械電位器
數(shù)字電位器工作原理詳解_數(shù)字電位器應(yīng)用_數(shù)字電位器選型指南
常用數(shù)字電位器芯片有哪些
優(yōu)化數(shù)字電位器電路設(shè)計(jì)方案
優(yōu)化數(shù)字電位器電路,減少絕對(duì)和溫度差異
使用IAP15 SPI寫數(shù)字電位器MCP41XXX
msp430驅(qū)動(dòng)MCP4017數(shù)字電位器

STM32 驅(qū)動(dòng) MCP4017T 數(shù)字電位器芯片
評(píng)論