蓝桥杯嵌入式学习日记(七)——MCP4017【STM32】【HAL库】

一、了解MCP4017数字电位器原理图

  MCP4017是一款可编程的电阻,其内置了7位寄存器,共计127个档位的分辨率。本质是一个IC器件,在蓝桥杯嵌入式比赛中通过IIC总线使用STMG4向MCP4017发送数据。
在这里插入图片描述

在CT117E_M4开发板上,MCP4017还连接了PB14引脚,旨在让选手使用其上的ADC通道来检测MCP4017分得的电压,从而判读其阻值。
其中3、4引脚分别为时钟线与数据线,1、2分别为电源与地。
在这里插入图片描述

而5、6端从图中可以看到,5是内置可变电阻的一端,而6端则是滑片W。
从两个原理图中可以得到,6的另一端连接了10k的电阻与VDD相连,而内置可变电阻的A端则是悬空,5的另一端则接地。于此得出。

当滑片连接A端,电阻R(WB) = R(AB) 。
当滑片连接B端,电阻R(WB) = 0。

于此可以得出
V = R W B R W B + R 17 ∗ 3.3 V V = {R_{WB} \above{2pt} R_{WB}+R_{17}} * 3.3 V V=RWB+R17RWB3.3V

记住这里之后可以用ADC来检测。并且由文档了解最大可达100kΩ。

在这里插入图片描述

在这里插入图片描述

相关内容上一篇已经讲过,有不懂的可以前往观看EEPROM(AT24C02)以及IIC协议

二、MCP4017代码编写

1、数据地址

在这里插入图片描述
地址码为0101111以及读写位,即有0101 1110(0x5e)为写地址,0101 1111(0x5f)为读地址。

2、数据写入

在这里插入图片描述
相信对于学过上一篇的大家,已经很熟悉写的流程了。

void MCP4017_Write(u8 val)
{   
	I2CStart();
	I2CSendByte(0x5e);  
	I2CWaitAck();
	
	I2CSendByte(val);  
	I2CWaitAck();
	I2CStop();
}

3、数据读取

在这里插入图片描述

u8 MCP4017_Read(void)
{   
	u8 val; 
	I2CStart();
	I2CSendByte(0x5F);  
	I2CWaitAck();
	
	val = I2CReceiveByte();
	I2CSendNotAck();
	I2CStop();
	return val;
}

这里与上节不同点在于读取的时候不需要进行第二次启动I2C,注意区分

三、利用ADC读取电压

在上面我们说到6端口连接着PB14引脚。这里我们在STM32cubemx中设置ADC1的5通道
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

按照顺序依次进行,这里将ADC1的通道数改为2,然后在下方Rank设置两个通道的优先级和扫描周期,这里将对MCP4017电压读取的扫描周期设置为640.5个时钟周期,设置到最慢。当然你可以根据就需求进行设置,这里只演示这种。

  MCP4017_Write (0x7f) ;
  MCP_Val = MCP4017_Read();

这里我们设置MCP4017为最大电阻100kΩ。

  HAL_ADC_Start(&hadc1) ;
  MCP_Volt = HAL_ADC_GetValue(&hadc1) /4096.0f *3.3f ;
	
  HAL_ADC_Start(&hadc1) ;
  r38 = HAL_ADC_GetValue(&hadc1) /4096.0f *3.3f ;

  HAL_ADC_Start(&hadc2) ;
  r37 = HAL_ADC_GetValue(&hadc2) /4096.0f *3.3f ;

在这里插入图片描述
文中所用的工程我会贴在下面,如有需要可自行下载,如果有疑问或者有什么错误之处还望留言指正。

链接:https://pan.baidu.com/s/1l_ZYS3oETi3X1bdTDi062g?pwd=1111
提取码:1111

  • 14
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lumine.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值