PCAP01介绍和STM32模拟SPI驱动

news2024/11/26 9:51:26

一.芯片介绍

Pcap01是德国acam公司设计的一款革命性的电容测量芯片。该芯片 内部有DSP计算单元,可以直接将电容元件接到Pcap01芯片,然后芯片计算出容值大小,通过SPI总线将电容容值数据传送给CPU,电容测量完全数字化。
在这里插入图片描述

二,测量原理

PCAP测量的原理是基于电容的充放电时间比。
在这里插入图片描述
PCAP01有8个通道,每一个通道都可以读取相对应的电容充放电时间比,当我们把PC0通道的电容值确定后,再通过这个比值,就可以计算出相对应的电容。
在这里插入图片描述

三.硬件设计

下图是PCAP01芯片的引脚定义
在这里插入图片描述
PC0到PC7为8个测量通道,接电容。此外PCAP01还有测量温度的功能,不过笔者暂时没有用到。
电容的理解方式有两种,一种为漂移模式,另一种为接地模式。

在这里插入图片描述在这里插入图片描述

在本次设计中,我选择了单传感器接地模式。
PCAP01与MCU的通信模式有两种,一种为I2C,另一种为SPI,本次设计选择模拟SPI。通过设置IIC_EN脚就可以选择相对应的通信方式。
在这里插入图片描述
下面为原理图设计,最好是有一个LDO把PCAP01的电源和其他电源隔离开。

四.软件编写

PCAP01测量可以按照官方的例程编写。
1.初始化IO
2.写固件
3.写配置寄存器
4.开始测量
5.读结果寄存器
第一步先看通信协议和操作码。
在这里插入图片描述
其中读写寄存器都是32位操作,SRAM为24位,操作码位8位

void write_date_8(u8 date);   //写入一个8位数据
void write_date_16(u16 date); //写入一个16位数据
void write_date_32(u32 date); //写入一个32位数据

第一步为初始化IO

void PCAP_SPI_Init(void)
{ 
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 |GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7);
	GPIO_ResetBits(GPIOA,GPIO_Pin_4);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
	GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	GPIO_SetBits(GPIOA,GPIO_Pin_6);
	

}

第2步写固件和写配置寄存器放在一起写。配置寄存器为下图。
在这里插入图片描述
寄存器0为操作OTP,寄存器1到4设置电容测量的相关参数,寄存器5-6为设置温度测量的相关参数,寄存器10设置功耗模式。详细的可以看具体手册。
在这里插入图片描述

void Pcap01_init(void)   
{
	PCAP_SPI_Init();
	write_date_8(0x88);       
	write_firmware(); 
	write_date_32(0xc04200F0);       
    write_date_32(0xc1201022); 
    write_date_32(0xc207160B);  
    write_date_32(0xc3066064);   
    write_date_32(0xc4040300);  
    write_date_32(0xc5000000);  
	write_date_32(0xc6008040);   
    write_date_32(0xc71F0000);    
    write_date_32(0xc8800030);     
    write_date_32(0xc9FF000F);     
    write_date_32(0xca180047);     
    write_date_32(0xcd000011); 
	write_date_32(0xce002ff0);    
	write_date_32(0xcf000000); 
    write_date_32(0xD0000000);   
    write_date_32(0xD1000000);   
    write_date_32(0xD2000000);   
    write_date_32(0xD3200001);  
    write_date_32(0xD4000001);   
	write_date_8(0x8A); //复位输出结果数据。          
    printf("PCAP01 cofing\r\n");
   //8bit操作码8CH表示开始一次电容测量
   write_date_8(0x8C);   
   delay_ms(500);
}

开始测量后就可以读结果寄存器了,注意要开始测量后要延时一小段时间,在这可以读取状态寄存器,如果数值是900000或者100000就没有错误。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

float Get_cap(void)
{
    //读一次状态寄存器
    write_date_8(0x48);   
    cap_status = spi_read();//返回结果代表测量结果,返回10000或者90000	
	printf("cap_status= %lx \r\n", cap_status);	 
	//读一次PC1电容/PC0电容
	write_date_8(0x41);   
	cap_reszult1 = spi_read();
	cap_time = (double)cap_reszult1/(double)cap_temp;  // PC1电容/PC0电容的放电时间比
	cap_c1 =cap_time*cap_ref;     //  计算PC1的数值
	printf("cap_c1=%.4f \r\n",cap_c1);
}

目前的版本楼主只写到用软件SPI,争取接下来写一版硬件SPI的

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

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

相关文章

不要着急购买iPhone 15,先看看这5点再做决定吧!

人们对下个月可能推出的iPhone 15感到兴奋,这是有充分理由的——有传言称,新机型正在做出一些重大改变,尤其是在iPhone 15 Pro机型方面。从四款新iPhone都采用USB-C,到iPhone 15 Pro Max采用潜望镜式长焦镜头以实现更好的变焦,听起来有很多功能值得兴奋。 当然,除非你没…

软件综合测试实训室建设方案

一、实训室总体目标 培养目标:培养软件测试的专业技术人才,使学生掌握软件测试的基本理论知识,熟练运用各类测试工具,具备随产品版本迭代进行回归测试的能力。 建设目标:打造一流的软件测试培训基地,建成集教学实训、技术研发、项目实习为一体的软件测试人才培养高地。 二、…

文件上传xxx

本地保存文件 将文件保存到服务器本地硬盘中 max-request-size 多个文件总大小不能大于100M PostMapping("/upload")public Result upload(String username,Integer age,MultipartFile image) throws IOException {log.info("用户名:{},牛叔:{},文件…

Android 多渠道打包及VasDolly使用

目录 1.添加productFlavors的配置buildConfigFieldmanifestPlaceholdersresValue 2.设置apk文件的名称,便于识别3.添加vasdolly、添加gradle脚本(windows) 作用:一次性可以打多个apk包,名字、包名、logo等可以不相同。…

掌控未知:项目中如何巧妙应对突发与紧急

引言 在项目管理的领域中,每一个项目都伴随着一系列的不确定性和挑战。这些不确定性可能源于外部环境的变化、团队内部的动态或技术的快速迭代。而在这些不确定性中,突发和紧急事件尤为考验项目经理的应变能力和决策智慧。那么,如何在项目中…

【排排站:探索数据结构中的队列奇象】

本章重点 队列的概念及结构 队列的实现方式 链表方式实现栈接口 队列面试题 一、队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out) 入队列&#x…

休息刷一下周赛

7004.判断字母缩略词&#xff08;字符串&#xff09; 思路&#xff1a;1.判断字符串个数是否跟缩略词长度相同 2.定位比较 class Solution { public:bool isAcronym(vector<string>& words, string s) {int nwords.size();if(n!s.size()) return false;for(int i0…

solidworks(3)

两个方法 sr&#xff1a;代表半径&#xff08;画图时记得换成直径&#xff09;

700. 二叉搜索树中的搜索

给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 输入&#xff1a;root [4,2,7,1,3], val 2 输出&#xff1a;[2,1,3]…

窗口看门狗

从下往上看: 1. 时钟设置 RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG,ENABLE);//使能独立看门狗时钟 WWDG_SetPrescaler(WWDG_Prescaler_8);//看门狗预分频器WWDG counter clock (PCLK1/4096)/8 2.设置窗口值 实际就是设置WWDG_CR的低七位值, 但是这个值要大于0x40(也就是…

Docker容器:docker镜像的创建及dockerfile案例

文章目录 一.docker镜像的三种创建方法1.基于现有镜像创建1.1 启动镜像1.2 生成新镜像 2.基于本地模板创建2.1 OPENVZ 下载模板2.2 导入容器生成镜像 3.基于dockerfile创建3.1 dockerfile结构及分层3.2 联合文件系统3.3 docker镜像加载原理及过程 4.dockerfile操作常用的指令4.…

16.ingress

文章目录 ingress外部访问externalIP组成Ingress-Nginx部署 nginx-ingress-controllerDaemonSetHostNetwork创建 ingress控制器创建ingress资源 DeploymentNodePort模式Ingress HTTPS 代理访问生成证书和私钥创建secret资源创建Ingress资源 Nginx 进行 BasicAuthnginx进行重写总…

18----注释

本节是markdown教程的最后一节&#xff0c;也是最简单的一节----注释。 我们常见的注释可能是这样的&#xff1a; 也可能是这样的&#xff1a; 注释无处不在&#xff0c;就让我们抱着一丝期待&#xff0c;来看看markdown的注释吧&#xff01; 一、基本用法&#xff1a; Ma…

深入AQS原理(我在一开始学的时候就把非公平锁和公平锁给弄混了)

谈到并发&#xff0c;我们不得不说AQS(AbstractQueuedSynchronizer)&#xff0c;所谓的AQS即是抽象的队列式的同步器&#xff0c;内部定义了很多锁相关的方法&#xff0c;我们熟知的ReentrantLock、ReentrantReadWriteLock、CountDownLatch、Semaphore等都是基于AQS来实现的。 …

13.实现业务功能--板块信息

目录 获取在首页中显示的版块 1. 实现逻辑 2. 创建扩展 Mapper.xml 3. 修改 DAO 4. 创建 Service 接口 5. 实现 Service 接口 6. 生成测试方法 7. 实现 Controller 8. 实现前端页面 在数据库中执行以下 SQL 语句&#xff1a; INSERT INTO t_board (id, name, article…

Dockerfile制作Web应用系统nginx镜像

目录 1.所需实现的具体内容 2.编写Dockerfile Dockerfile文件内容&#xff1a; 默认网页内容&#xff1a; 3.构建镜像 4.现在我们运行一个容器&#xff0c;查看我们的网页是否可访问 5.现在再将我们的镜像打包并上传到镜像仓库 1.所需实现的具体内容 基于centos基础镜像…

GAN:对抗生成网络,前向传播和后巷传播的区别

目录 GAN&#xff1a;对抗生成网络 损失函数 判别器开始波动很大&#xff0c;先调整判别器 生成样本和真实样本的统一&#xff1a;真假难辨​编辑 文字专图片​编辑 头像转表情包​编辑 头像转3D​编辑 后向传播 1. 前向传播&#xff08;forward&#xff09; 2. 反向传播&…

自我管理篇--“90%的简历会被刷掉”这个现象背后的原因

以上简历模板资源的排版可能不是最优&#xff0c;但工作经历可以借鉴 文章目录 一、简历问题出在什么地方二、如何提升简历的质量三、如何避免常见的简历错误四、如何让你的简历脱颖而出五、如何准备面试 为什么90%的简历会被淘汰 在当今竞争激烈的就业市场中&#xff0c;求职者…

OCR扫描仪应该怎么选?

选择OCR扫描仪时&#xff0c;以下几个因素需要考虑&#xff1a; 1. 扫描质量&#xff1a;确保选购的OCR扫描仪能够提供高质量的扫描结果。关注分辨率&#xff08;通常以dpi表示&#xff09;&#xff0c;辨识度和颜色深度等技术指标&#xff0c;以满足您的需求。 2. 扫描速度&a…

电脑报错vcomp100.dll丢失怎样修复?这三个方法可以解决

vcomp100.dll是微软Visual C 2005 Redistributable Package的一部分&#xff0c;它包含了运行某些程序所需的C运行时库。当电脑中的vcomp100.dll文件丢失或损坏时&#xff0c;可能会导致一些程序无法正常运行&#xff0c;甚至出现系统崩溃等问题。 那么&#xff0c;当遇到这样的…