我们从2011年坚守至今,只想做纯粹的技术论坛,请不要发布和技术无关的话题。  本站有两万多份高大上的PCB和原理图下载,每日更新中,欢迎常回来看看

 找回密码
 立即注册
搜索
查看: 1667|回复: 5

[资料贡献] STM32的MCP41010数字电位器驱动

[复制链接]

6

主题

4

回帖

10

积分

一级逆天

积分
10

终身成就奖

发表于 2020-4-2 09:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
使用模拟SPI的方式

#define DP_SI     PBout(14)             // PB14 - SI
#define DP_SCK     PBout(15)             // PB15 - SCK
#define DP_CS     PCout(8)             // PC8 - CS

/*此处定义DP_SCK模拟时序的延时,可更改其延时时间来更改电平保持时间,从而影响通信速率 */
//如果外部信号线过长,需要降低通信速率,可将该值改大
#define    MCP_SCK_delay    delay_us(1)


//MCP41010芯片初始化,控制放大倍数:PB14-SI, PB15-SCK, PC8-CS
void MCP41010_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOB,GPIOC时钟

    //GPIOB初始化设置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;   //SI, SCK对应IO口
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;              //普通输出模式
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;             //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;         //100MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;               //上拉
    GPIO_Init(GPIOB, &GPIO_InitStructure);                     //初始化GPIO
   
    //GPIOC初始化设置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;                  //CS对应IO口
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;              //普通输出模式
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;             //推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;         //100MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;               //上拉
    GPIO_Init(GPIOC, &GPIO_InitStructure);                     //初始化GPIO
   
    GPIO_ResetBits(GPIOB,GPIO_Pin_14 | GPIO_Pin_15);           //GPIOB14,15置低
    GPIO_ResetBits(GPIOC,GPIO_Pin_8);                          //GPIOC8置低
}


//SPI发送单字节
//xtemp:发送的字节
void MCP41010_SPI_SendOneByte(uint8_t xtemp)
{
    uint8_t xnum = 0;
   
    /* DP_SCK发送8个脉冲,在上升沿时送入数据 */
    for(xnum=0; xnum<8; xnum++)
    {
        //DP_SI写数据
        DP_SI = (xtemp & 0x80) >>7;
        xtemp = xtemp << 1;
        
        //延时待数据稳定后,在DP_SCK产生上升沿脉冲,数据送入MCP41010
        MCP_SCK_delay;
        DP_SCK = 1;
        
        //DP_SCK产生下降沿脉冲
        MCP_SCK_delay;
        DP_SCK = 0;
    }
}

//设置MCP41010的滑动变阻器抽头位置
//xRes:电阻编码值
//注:00时,W抽头处于抽头B的位置,阻值等于抽头电阻,典型值为52Ω
//注:FF时,W抽头处于抽头A的位置,阻值等为9985.94Ω,抽头始终不会与A端相连
//注:对于10KΩ的器件来说,LSB为39.0625Ω
//注:每次芯片上电后,抽头寄存器的值为0x80
void MCP41010_SetRes(uint8_t xRes)
{
    //MCP41010芯片使能
    DP_CS = 0;
   
    //发送第一字节,控制方式位
    //0x13。写数据,对电位器0,1操作
    MCP41010_SPI_SendOneByte(0x13);
   
    //发送第二字节,滑动变阻器抽头位
    MCP41010_SPI_SendOneByte(xRes);
   
    //MCP41010芯片失能
    DP_CS = 1;
}
  • 打卡等级:常住青年
  • 打卡总天数:17
  • 打卡月天数:0
  • 打卡总奖励:61
  • 最近打卡:2025-01-13 19:11:02

0

主题

8150

回帖

7628

积分

二级逆天

积分
7628

终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

QQ
发表于 2020-4-2 22:03 | 显示全部楼层
回复

使用道具 举报

1

主题

3851

回帖

8743

积分

二级逆天

积分
8743

终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

QQ
发表于 2020-4-6 07:48 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:初入少年
  • 打卡总天数:2
  • 打卡月天数:0
  • 打卡总奖励:7
  • 最近打卡:2025-03-11 13:04:56

1

主题

104

回帖

291

积分

二级逆天

积分
291

终身成就奖原创先锋奖

发表于 2020-4-6 13:16 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:以坛为家III
  • 打卡总天数:742
  • 打卡月天数:0
  • 打卡总奖励:2905
  • 最近打卡:2026-08-20 09:00:04

3

主题

9037

回帖

1万

积分

三级逆天

积分
13664

社区居民终身成就奖特殊贡献奖原创先锋奖

QQ
发表于 2020-4-8 08:52 | 显示全部楼层
回复

使用道具 举报

  • 打卡等级:初入少年
  • 打卡总天数:4
  • 打卡月天数:0
  • 打卡总奖励:13
  • 最近打卡:2025-02-25 18:34:20

9

主题

134

回帖

103

积分

二级逆天

积分
103

终身成就奖

发表于 2020-10-22 09:54 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请举报投诉

本站所有资料仅限参考学习交流,PCB原理图源码等所有资料不保证准确没问题,请不要用作生产。否则后果自负。

闽公网安备35062302000276号 | 闽ICP备2024076463号-1 | 论坛技术支持QQ群171867948 | 论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表