蓝桥杯 stm32 MCP4017

news2024/10/7 12:29:13

本文代码使用 HAL 库。

文章目录

  • 前言
  • 一、MCP4017 的重要特性
  • 二、MCP4017 计算 RBW 阻值
  • 三、MCP4017 地址
  • 四、MCP4017 读写函数
  • 五、CubeMX 创建工程 (利用 ADC 测量 MCP4017 电压)、
        • 对应代码:
  • 总结


前言

一、MCP4017 的重要特性

蓝桥杯 板子上的是 MCP4017T-104ELT,如 图1。

  • MCP4017 是一个 可编程电阻,通过 写入的数值 可以 改变电阻的大小

在这里插入图片描述
重点在于 6 引脚(W),5 引脚(B)。VDD 接 一个 R17 的 10 K电阻,经过 PB14 口 接 跳帽 J15,再接到 5 引脚的 跳帽 J16,最后接地

将其 6 引脚,5 引脚 的内部电路图 简化为 图2 。相当于一个 滑动变阻器 ,RAB 是一个大电阻,通过滑动划片 W ,可改变 RWB 的阻值

当 W 划到最左边 A 处时,RWB = RAB ; 当 W 划到 中间时,RWB = 1/2 RAB ; 当 W 划到 最右边时, RWB 约等于 0( 内部有一些模拟开关,不完全等于 0 )。
在这里插入图片描述

  • MCP40177 位 的 电阻器网络分辨率 。
  • 有 0 ~ 127 个电阻器 。 (在 RAB 中有128个电阻器)
  • 通电默认PB14 口电阻为 中等比例。
  • RAB 电阻值为 0 ~ 100 K 欧。
  • 带有读取和写命令的简单 I2C 协议。

二、MCP4017 计算 RBW 阻值

RAB 大电阻的 内部结构 如 图 3 。其 内部有 128 (N 范围是 0 ~ 127)个 电阻器 Rs
RW 相当于模拟开关,阻值接近于 0 。
在这里插入图片描述

参考数据手册 可知 RAB 的最大 电阻为 100 K 欧。则 每个 Rs 的 阻值 为 RAB / 128 = 100K / 128.
在这里插入图片描述

上面讲到 MCP4017 是一个 可编程电阻,类似于一个 滑动变阻器。

当 图 2 中 W 划到最左边 A 处时,相当于 图 3 中 N = 127,则 RWB = RAB 。
当 W 划到 最右边时,相当于 N = 0,则 RWB = 0 。

例如:
当 图 3 中 N = 0 时,可以看到 W 和 B 之间有 0 个 RS 电阻 和 一个RW,则 RWB = RS ·0 + RW 。
当 图 3 中 N = 1 时,可以看到 W 和 B 之间有 1 个 RS 电阻 和 一个RW,则 RWB = RS · 1 + RW 。

上面讲了 RS 的阻值:
在这里插入图片描述

则我们需要的 RWB = RW + N · RS = RW + N · RAB / 128在这里插入图片描述

三、MCP4017 地址

MCP4017 是 I2C总线上 的一个 从属设备,它支持 7位 从属寻址。从属地址包含7个固定位,一个读写位(0101111 R/W)。如下 图 3 。

在这里插入图片描述

前 7 位 都是固定的,最后一位 R/W = 0 代表 写,则 地址为 01011110 , 即 0x5e。
最后一位 R/W = 1 代表 读,则 地址为 01011111 , 即 0x5f。

四、MCP4017 读写函数

比赛会给出我们 iic 的底层驱动代码,我们需要自己写出 MCP4017 读写函数。

这里 写入读取 的数据是 单 字节的,不要超过相应的范围

  1. 写 函数。
void MCP4017_Write(u8 val)
{
	I2CStart();  //起始信号
	I2CSendByte(0x5e); //控制字,写
	I2CWaitAck();  //等待响应
	
	I2CSendByte(val); //发送要写入的数据
	I2CWaitAck();
	I2CStop(); //停止
}

  1. 读 函数。
u8 MCP4017_Read(void)
{
	u8 val;
	
	I2CStart();  //起始信号
	I2CSendByte(0x5f); //控制字,读
	I2CWaitAck();  //等待响应
	
	val = I2CReceiveByte(); //接收数据
	I2CSendNotAck();
	I2CStop(); //停止
	
	return val;
}

举例:
电压显示 大约 3V 。
3.3 · ( 127 / (127 + 10)大约 显示 3 V电压。

MCP4017_Write(0x7f);  //0x7f 十进制就是 127

五、CubeMX 创建工程 (利用 ADC 测量 MCP4017 电压)、

(1)设置 RCC。
在这里插入图片描述

(2)在 STM32G431 内部集成 两个 最高位 12 位 的 ADC1, ADC2 ;对应的 IO 接口是 PB12 , PB15。我们选用 ADC1,使用 PB12 测量电压。MCP4017 的 io 接口是 PB14

设置 IO 接口。
在这里插入图片描述

(3)由于我们使用的两个都是 ADC1 ,则需要在 ADC1 里设置信息。

  • 设置为 两个 通道。
    在这里插入图片描述
  • 设置对应的通道 1,2 ,及其速度。(设置慢一些为 640.5 Cycles)
    在这里插入图片描述
    (4)添加 .c / .h 文件。

在这里插入图片描述
(5)创建工程。
在这里插入图片描述

对应代码:

 floatvolt_mcp; //电压值

 I2CInit(); //初始化 i2c
 MCP4017_Write(0x3f); 
 
 HAL_ADC_Start(&hadc1); //启动 ADC1
 volt_mcp = HAL_ADC_GetValue(&hadc1) / 4095.0f * 3.3f; //读出数据

若对 ADC 的代码不了解的 ,可以参考我之前的文章:

蓝桥杯 stm32 实现 ADC 采集数据功能 CubeMX


总结

大家可以自己试试,不理解的可以留言讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179343.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

冯诺依曼体系结构及操作系统(OS)的简单认识

文章目录冯诺依曼体系结构操作系统(Operator System)冯诺依曼体系结构 冯诺依曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储结构。数学家冯诺依曼提出了计算机制造的三个基本原则,即采用二进制逻辑…

虚拟机的介绍及安装

文章目录虚拟机介绍VMware WorkStation安装在VMware上安装Linux远程连接Linux系统虚拟机介绍 通过虚拟化技术,在电脑内,虚拟出计算机硬件,并给虚拟的硬件安装操作系统,即可得到一台虚拟的电脑,称之为虚拟机。 VMware…

Ubuntu安装wordpress

这里写自定义目录标题开始环境安装打开参考链接开始 环境 这里安装的php是7.4版本, apt install apache2 php mariadb-server apt install php7.4-mysql php-dev记得需要单独安装php7.4-mysql,不然可能会报错连接数据库出错,中电是wp_chec…

(机械师T90外接显卡GTX-1080)Win10笔记本通过M.2接口外接独立显卡+解决错误代码43

文章目录前言一、硬件清单二、硬件安装1.插入转接卡2.显卡安装3.接入电源4.连接显示器三、驱动安装(重点)1.禁用笔记本独显2.卸载驱动3.安装新驱动4.解决错误代码43外接显卡使用体验前言 据外接显卡成功也快有一个月了,期间畅玩了刺客信条奥…

【C进阶】程序环境和预处理

⭐博客主页:️CS semi主页 ⭐欢迎关注:点赞收藏留言 ⭐系列专栏:C语言进阶 ⭐代码仓库:C Advanced 家人们更新不易,你们的点赞和关注对我而言十分重要,友友们麻烦多多点赞+关注,你们…

新年快到了,如何运用Python实现春联

这篇博文可能写晚了,现在已经是初五了,哈哈!小编也是最近才想到的,看到老爸去年二十九(或者三十)在写春联,当时觉得他写的好慢啊!(不过让我来写,肯定不行!),于是萌生了用小编所学知识实现春联,只不过家里面没有打印机,不然代码写完之后,之后直接用打印机打印出来就…

【汤姆猫的实现 Objective-C语言】

一、实现之后的效果 1.左边3个按钮,分别是 1)点击之后,汤姆猫掏出一只白色的小鸟,刚要吃,它飞走了, 2)汤姆猫放屁 3)汤姆猫喝牛奶, 右边3个按钮,分别是 1)汤姆猫用爪子把屏幕抓出3个道子, 2)汤姆猫用披萨饼砸屏幕, 3)汤姆猫拿出两个锣,对着一敲, 2.这…

Java 23种设计模式(7.结构型模式-装饰者模式)

结构型模式-装饰者模式 代码分析 类图 代码 abstract class Component {abstract void operation(); }public class ConcreteComponent extends Component {void operation() {System.out.println("具体类");} }public class Decorator extends Component{private …

为向IPv6过渡的组织发布安全指南

美国国家安全局 (NSA) 已发布指南,以帮助国防部 (DoD) 和其他系统管理员识别和减轻与过渡到互联网协议版本 6 (IPv6) 相关的网络风险。 IPv6 由互联网工程任务组 (IETF) 开发,是用于识别和定位系统并在互联网上路由流量的协议的最新版本,提供…

统计学习方法 学习笔记(5)决策树

决策树5.1.决策树模型与学习5.2.特征选择5.3.决策树的生成5.4.决策树的剪枝5.5.CART算法决策树基本概述: 算法类别:一种基本的分类和回归方法;基本结构:呈现树形结构,在分类问题中表示基于特征对实例进行分类的过程。…

云原生之使用docker部署Postgresql数据库

云原生之使用docker部署Postgresql数据库一、Postgresql介绍1.PostgreSQL简介2.PostgreSQL的特点二、检查本地docker环境1.检查系统版本2.检查docker版本3.检查docker状态三、下载Postgresql镜像四、部署Postgresql数据库1.创建Postgresql容器2.查看Postgresql容器状态3.查看Po…

通配符的匹配很全面, 但无法找到元素 ‘context:component-scan‘ 的声明。

HTTP状态 500 - 内部服务器错误 类型 异常报告 消息 Servlet[springMVC]的Servlet.init()引发异常 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 javax.servlet.ServletException: Servlet[springMVC]的Servlet.init&#x…

一文看懂Linux基础

文章目录什么是Linux操作系统window和linux的对比快照的拍摄Linux的文件结构kali Linux的简单介绍基础命令vim命令文件权限kali的常见工具查看命令1.查看操作:2.删除操作:3.复制操作:4.移动操作:5.重命名操作:7.上传文…

【时间复杂度和空间复杂度】

1.时间复杂度时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个数学函数,它定量描述了该算法的额外运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起…

Linux系统用户和权限

文章目录root用户用户、用户组管理查看权限控制修改权限控制 - chmod修改权限控制 - chownroot用户 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中,拥有最大权限的账户名为:root(超级管理员) …

机器学习(七):Azure机器学习模型搭建实验

文章目录 Azure机器学习模型搭建实验 前言 Azure平台简介 Azure机器学习实验 Azure机器学习模型搭建实验 前言 了解Azure机器学习平台,知道机器学习流程。 Azure平台简介 Azure Machine Learning(简称“AML”)是微软在其公有云Azure上推…

前缀树 字典树 TrieTree的学习与模拟实现

目录前言前缀树介绍C实现核心思想前缀树的大致框架前缀树插入字符串前缀树查找完整的字符串前缀树查找前缀匹配的字符串前缀树删除完整字符串总结完整代码前言 哥们在去年12月的一次实习面试的时候,远在旧金山的一家美企CTO面试我,岗位在西安&#xff0…

【MySQL进阶】MySQL视图详解

序号系列文章6【MySQL基础】MySQL单表操作详解7【MySQL基础】运算符及相关函数详解8【MySQL基础】MySQL多表操作详解9【MySQL进阶】MySQL事务详解文章目录前言1,视图1.1,视图概述1.2,视图使用环境1.3,视图创建格式1.4,…

【C语言课堂】 函数递归

欢迎来到 Claffic 的博客 💞💞💞 前言: 时隔多日,来还欠大家的 C 语言学习啦,上期讲了函数,其实函数中应该包括函数递归的,这里单独拿出来讲解的原因是函数递归属于重难知识&#xf…

【编程入门】开源记事本(Flutter版)

背景 前面已输出多个系列: 《十余种编程语言做个计算器》 《十余种编程语言写2048小游戏》 《17种编程语言10种排序算法》 《十余种编程语言写博客系统》 《十余种编程语言写云笔记》 本系列对比云笔记,将更为简化,去掉了网络调用&#xff0…