一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

AD8400系列數(shù)字電位器的驅(qū)動設(shè)計與實現(xiàn)

CHANBAEK ? 來源:木南創(chuàng)智 ? 作者:尹家軍 ? 2022-12-09 16:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一些時候我們需要在系統(tǒng)使用過程中改變某些電路電阻值以達(dá)到改變設(shè)定的目的,這時候我們就會使用電位器。在我們使用數(shù)字控制電路時多選擇數(shù)字電位器。在這一篇我們就來設(shè)計AD8400系列數(shù)字電位器的驅(qū)動。

1、功能概述

AD8400/AD8402/AD8403分別是單通道/雙通道/四通道、256位、數(shù)字控制可變電阻(VR)器件,可實現(xiàn)與機(jī)械電位計或可變電阻相同的電子調(diào)整功能。AD8400內(nèi)置一個可變電阻,采用緊湊的SOIC-8封裝。AD8402內(nèi)置兩個獨立的可變電阻,采用節(jié)省空間的SOIC-14表面貼裝封裝。AD8403內(nèi)置四個獨立的可變電阻,提供24引腳PDIP、SOIC和TSSOP三種封裝。各器件均內(nèi)置一個帶游標(biāo)觸點的固定電阻,該游標(biāo)觸點在載入控制串行輸入寄存器的數(shù)字碼所確定的數(shù)字碼分接該固定電阻值。游標(biāo)與固定電阻任一端點之間的電阻值,隨傳輸至VR鎖存器中的數(shù)字碼呈線性變化。在A端與游標(biāo)或B端與游標(biāo)之間,各可變電阻提供一個完全可編程電阻值。A至B固定端接電阻(1 kΩ、10 kΩ、50 kΩ或100 kΩ)的通道間匹配容差為±1%,標(biāo)稱溫度系數(shù)為500 ppm/°C。借助獨特的開關(guān)電路,可將傳統(tǒng)開關(guān)電阻設(shè)計中固有的高脈沖干擾降至最低,從而避免任何先合后開或先開后合操作。

Dingtalk_20221206154648.jpg

每個VR均有各自的VR鎖存器,用來保存其編程電阻值。這些VR鎖存器由一個SPI兼容型串行至并行移位寄存器更新,該移位寄存器從一個標(biāo)準(zhǔn)三線式串行輸入數(shù)字接口加載數(shù)據(jù)。由10個數(shù)據(jù)位構(gòu)成的數(shù)據(jù)字傳輸至串行輸入寄存器。

Dingtalk_20221206154648.jpg

該數(shù)據(jù)字經(jīng)過解碼,前2位確定需要載入的VR鎖存器地址,后8位是數(shù)據(jù)。利用串行寄存器相對端的串行數(shù)據(jù)輸出引腳,就可以簡單的菊花鏈形式將多個VR連接,而無需額外的外部解碼邏輯。

復(fù)位(RS)引腳通過將80H載入VR鎖存器來迫使游標(biāo)移到中間電平。SHDN引腳則迫使A端的電阻變?yōu)槎说蕉碎_路狀態(tài),并使游標(biāo)與B端短路,從而實現(xiàn)毫瓦級功耗的關(guān)斷狀態(tài)。當(dāng)SHDN回到邏輯高電平時,先前的鎖存器設(shè)置將使游標(biāo)處于關(guān)斷前的電阻值設(shè)置。數(shù)字接口在關(guān)斷期間仍有效,以便更改代碼,當(dāng)器件脫離關(guān)斷狀態(tài)時,游標(biāo)將處于新的位置。

2、驅(qū)動設(shè)計與實現(xiàn)

我們已經(jīng)了解了AD840x系列數(shù)字電位器的基本情況,接下來我們將基于此實現(xiàn)AD840x系列數(shù)字電位器的驅(qū)動。

2.1、對象定義

我們的的驅(qū)動設(shè)計都是基于對象的操作,所以我們先要抽象出AD840x系列數(shù)字電位器的對象類型。這是一個系列對象所以有不同的類型,每種類型又有不同的標(biāo)稱電阻值。這些都可以區(qū)別不同的對象,我們將其抽象為AD840x對象的屬性。而對于操作則相對簡單,我們只需要向AD840x對象寫數(shù)據(jù),所以將寫數(shù)據(jù)作為它的操作。具體定義如下:

/* 定義AD840x類型枚舉 */
typedef enum AD840x{
AD8400,
AD8402,
AD8403
}AD840xType;
 
/* 定義AD840x通道選擇枚舉 */
typedef enum AD840xLdac{
AD840x_VR1=0x00,
AD840x_VR2=0x01,
AD840x_VR3=0x02,
AD840x_VR4=0x03
}AD840xLdacType;
 
/* 定義AD840x標(biāo)稱電阻枚舉 */
typedef enum AD840xNR{
AD840x_NR1k,//標(biāo)稱電阻為1K
AD840x_NR10k,//標(biāo)稱電阻為10K
AD840x_NR50k,//標(biāo)稱電阻為50K
AD840x_NR100k//標(biāo)稱電阻為100K
}AD840xNRType;
 
/* 定義AD840x對象類型 */
typedef struct AD840xObject{
AD840xType type;//AD840x對象類型
float nominalValue;//標(biāo)稱電阻值
void (*Write)(uint8_t rdac);//寫數(shù)據(jù)操作函數(shù)指針
}AD840xObjectType;

有操作對象后,還需要對該對象變量作初始化才可使用,所以我們還需要定義一個初始化函數(shù)用于對象的初始化。AD840x對象的初始化函數(shù)如下:

/* 初始化AD840x對象 */
void AD840xInitialization(AD840xObjectType *vr,AD840xType type,AD840xWriteByte write,AD840xNRType nr)
{
float nValue[4]={100010000,50000100000};


if((vr==NULL)||(write==NULL))
{
return;
}


vr->type=type;


vr->Write=write;


vr->nominalValue=nValue[nr];
}

2.2、對象操作

AD8400/AD8402/AD8403分別是單通道/雙通道/四通道、256位、數(shù)字控制可變電阻(VR)器件。更改VR編程設(shè)置是通過將10位串行數(shù)據(jù)字送入SDI引腳來實現(xiàn)。此數(shù)據(jù)字由2個地址位(MSB優(yōu)先)和8個數(shù)據(jù)位(也是MSB優(yōu)先)組成。串行寄存器數(shù)據(jù)字格式如下:

Dingtalk_20221206154648.jpg

AD840x的地址分配,由ADDR解碼器解碼,確定接收位B7至B0中的串行寄存器數(shù)據(jù)的VR鎖存器的位置。位置的計算公式如下:

VR#=A1*2+A0+1

單通道AD8400要求A1 = A0 = 0。雙通道AD8402要求A1 = 0。A1、A0的取值方式如下:

Dingtalk_20221206154648.jpg

關(guān)于AD840x對象設(shè)置游標(biāo)的位置與電阻的關(guān)系:

Dingtalk_20221206154648.jpg

Dingtalk_20221206154648.jpg

根據(jù)上述兩個公式,當(dāng)我們需要某一阻值的電阻時,只需要設(shè)置響應(yīng)的D值就看可以了。具體的操作函數(shù)如下:

/*設(shè)置AD8400游標(biāo)的位置*/
void SetAD8400ResistorValue(AD840xObjectType *vr,uint16_t resistorValue,AD840xLdacType ldac)
{
  float mValue=0.0;
  uint16_t sendValue=0;
  uint8_t txData[2];
  
if((resistorValue<50)||(resistorValue>vr->nominalValue))
{
return;
}


if((vr->type==AD8400)&&(ldac!=AD840x_VR1))
{
return;
}


if((vr->type==AD8402)&&(ldac>AD840x_VR2))
{
return;
}


  mValue=((float)resistorValue-(float)RESISTANCEINITIAL)/(float)vr->nominalValue;
  sendValue=(uint8_t)(mValue*RESISTANCEINDEX);


  sendValue=sendValue||(ldac<<8);
  txData[0]=(sendValue>>2);
  txData[1]=(sendValue<<6);
  vr->Write(txData[0]);
  vr->Write(txData[1]);
}

第三個參數(shù)通道選擇,如前面所述由A1、A0決定。對于AD8400是單通道,直接指定第一通道即可。而AD8402對應(yīng)第一、第二通道。

3、驅(qū)動的使用

我們實現(xiàn)了AD840x系列數(shù)字電位器的驅(qū)動,接下來我們需要來討論一下它的應(yīng)用,及如何使用我們開發(fā)的驅(qū)動實現(xiàn)我們的應(yīng)用。

3.1、聲明并初始化對象

首先我們依然是需要聲明AD840x對象變量。我們在驅(qū)動設(shè)計時已經(jīng)定義了AD840xObjectType對象類型,所以我們就是用這個對象類型聲明AD840x對象變量。具體操作如下:

AD840xObjectType ad840x;

對于定義的這一對象變量尚不能直接使用,必須先對其初始化。我們在驅(qū)動中也設(shè)計了初始化函數(shù):void AD840xInitialization(AD840xObjectType *vr,AD840xType type,AD840xWriteByte write,AD840xNRType nr)。它的四個參數(shù)分別是:AD840x對象指針、AD840x的類型、寫AD840x對象函數(shù)指針、AD840x的標(biāo)稱電阻值。

AD840x對象指針指向的就是我們所要初始化的對象變量。AD840x的類型就是源自AD840xType枚舉。AD840x的標(biāo)稱電阻值則源自AD840xNRType枚舉。關(guān)于寫AD840x對象函數(shù)指針則是與具體硬件平臺和接口相關(guān)的數(shù)據(jù)發(fā)送函數(shù)。在這里就是指SPI對口的數(shù)據(jù)發(fā)送函數(shù)。具體類型如下:

typedef void (*AD840xWriteByte)(uint8_t rdac);

如我們可聲明為:void WriteAD8400bySPI(uint8_t rdac);

有了這些參數(shù)我們就可以使用初始化函數(shù)來初始化我們前面聲明的對象變量了。具體形式如下:

AD840xInitialization(&ad840x, AD8400, WriteAD8400bySPI, AD840x_NR10k);

我們就將對象變量ad840x初始化為AD8400類型的標(biāo)稱電阻為10K的可變電阻對象,且向?qū)ο髮憯?shù)據(jù)的函數(shù)為WriteAD8400bySPI。

3.2、基于對象進(jìn)行操作

我們聲明并初始化完成對象變量后。就可以調(diào)用操作函數(shù)來實現(xiàn)我們想要對AD840x對象進(jìn)行的操作了。使用電阻設(shè)置函數(shù)即可:

void SetAD8400ResistorValue(AD840xObjectType *vr,uint16_t resistorValue,AD840xLdacType ldac)

其3個參數(shù),第一個是我們要操作的對象的指針;第二個是我們想要設(shè)置的電阻值;第三個參數(shù)是通道選擇。

4、應(yīng)用總結(jié)

我們已經(jīng)實現(xiàn)了AD840x的驅(qū)動及應(yīng)用。AD840x的應(yīng)用并不復(fù)雜,我們只需要設(shè)定我們想要的電阻就可以了。在我們的應(yīng)用中得到的結(jié)果與我們預(yù)期的完全一致。

在使用驅(qū)動時我們應(yīng)該注意。AD8402與AD8403均為多通道的可變電阻。在使用時需要注意通道選擇。通道選擇由下發(fā)數(shù)據(jù)的A1、A0位決定。驅(qū)動中已定義為枚舉,選擇即可。

源碼公布到GitHUB:https://github.com/foxclever/ExPeriphDriver

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5434

    瀏覽量

    124534
  • 數(shù)字電位器
    +關(guān)注

    關(guān)注

    4

    文章

    267

    瀏覽量

    84022
  • 驅(qū)動設(shè)計
    +關(guān)注

    關(guān)注

    1

    文章

    111

    瀏覽量

    15555
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    AD527x系列數(shù)字電位器驅(qū)動設(shè)計與實現(xiàn)

    在一些時候我們需要使用精度更高的數(shù)字電位器實現(xiàn)我們的應(yīng)用。我們經(jīng)常使用AD527x系列數(shù)字電位器
    的頭像 發(fā)表于 12-09 16:01 ?2821次閱讀
    AD527x<b class='flag-5'>系列</b><b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>的<b class='flag-5'>驅(qū)動</b>設(shè)計與<b class='flag-5'>實現(xiàn)</b>

    數(shù)字電位器

    最近打算用數(shù)字電位器來平衡電橋測量電阻,遇到幾個問題。1.有沒有1M的數(shù)字電位器啊,有的話能夠推薦下型號嗎2.我發(fā)現(xiàn)我所知道的數(shù)字
    發(fā)表于 03-28 14:13

    請教關(guān)于數(shù)字電位AD8400的問題

    我使用貴公司的AD8400,出現(xiàn)了擊穿我的電路的二極管情況,所以我用示波器測試了AD8400的W1、B1兩個引腳,發(fā)現(xiàn)了如下圖的波形。請問這是什么原因
    發(fā)表于 08-02 10:18

    請問有誰用過AD8400A10數(shù)字電位器嗎?

    AD8400A10數(shù)字電位器有沒有人用過?硬件電路怎么搭,程序怎么寫
    發(fā)表于 07-14 21:04

    什么是數(shù)字電位器?

    數(shù)字電位器的工作原理數(shù)字電位器的典型應(yīng)用
    發(fā)表于 04-08 06:58

    理解和應(yīng)用數(shù)字電位器

    理解和應(yīng)用數(shù)字電位器         主題詞:數(shù)字電位器,機(jī)械電位器
    發(fā)表于 10-23 23:41 ?52次下載

    DAC與數(shù)字電位器

    DAC與數(shù)字電位器摘要:本應(yīng)用筆記對數(shù)/模轉(zhuǎn)換(DAC)和數(shù)字電位進(jìn)行了對比,傳統(tǒng)的數(shù)字
    發(fā)表于 11-16 11:45 ?62次下載

    數(shù)字電位器替代機(jī)械電位器

    數(shù)字電位器替代機(jī)械電位器 摘要:數(shù)字可調(diào)節(jié)電位器,也稱為數(shù)字
    發(fā)表于 11-27 17:38 ?3098次閱讀
    用<b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>替代機(jī)械<b class='flag-5'>電位器</b>

    數(shù)字電位器替代機(jī)械電位器

    摘要:數(shù)字可調(diào)節(jié)電位器,也稱為數(shù)字電位器或digpot,不僅能夠在眾所周知的音頻應(yīng)用中替代機(jī)械電位器,而且能夠在所有電子設(shè)備中替代傳統(tǒng)的機(jī)械
    發(fā)表于 04-28 10:22 ?1849次閱讀
    用<b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>替代機(jī)械<b class='flag-5'>電位器</b>

    理解和應(yīng)用數(shù)字電位器

    描述了數(shù)字電位器工作原理、特點、分類及廣泛應(yīng)用,闡述了與機(jī)械電位器相比,數(shù)字電位器的優(yōu)點,同時也描述了數(shù)
    發(fā)表于 05-09 16:13 ?153次下載
    理解和應(yīng)用<b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>

    1/2/4通道數(shù)字電位器AD8400/AD8402/AD8403數(shù)據(jù)表

    The AD8400/AD8402/AD8403 provide a single-, dual-, or quad-channel, 256-position, digitally
    發(fā)表于 10-16 15:20 ?14次下載
    1/2/4通道<b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b><b class='flag-5'>AD8400</b>/AD8402/AD8403數(shù)據(jù)表

    數(shù)字電位器應(yīng)用實例_數(shù)字電位器四大應(yīng)用電路

    本文主要介紹了數(shù)字電位器的應(yīng)用,包括了介紹了X9313數(shù)字電位器的應(yīng)用、數(shù)字電位器
    發(fā)表于 01-23 09:39 ?4.8w次閱讀
    <b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>應(yīng)用實例_<b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>四大應(yīng)用電路

    數(shù)字電位器工作原理詳解_數(shù)字電位器應(yīng)用_數(shù)字電位器選型指南

    本文介紹了什么是數(shù)字電位器、數(shù)字電位器的特點與數(shù)字電位器工作原理,其次詳細(xì)的介紹了
    發(fā)表于 01-23 10:20 ?6.1w次閱讀
    <b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>工作原理詳解_<b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>應(yīng)用_<b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>選型指南

    AD8400/AD8402/AD8403:1/2/4通道數(shù)字電位計數(shù)據(jù)手冊

    AD8400/AD8402/AD8403:1/2/4通道數(shù)字電位計數(shù)據(jù)手冊
    發(fā)表于 03-18 23:19 ?5次下載
    <b class='flag-5'>AD8400</b>/AD8402/AD8403:1/2/4通道<b class='flag-5'>數(shù)字</b><b class='flag-5'>電位</b>計數(shù)據(jù)手冊

    數(shù)字電位器Linux驅(qū)動程序

    數(shù)字電位器Linux驅(qū)動程序
    發(fā)表于 04-21 16:56 ?9次下載
    <b class='flag-5'>數(shù)字</b><b class='flag-5'>電位器</b>Linux<b class='flag-5'>驅(qū)動</b>程序