PCAP01介绍和STM32模拟SPI驱动

一.芯片介绍

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的

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

excel常见的数学函数篇2

一、数学函数 1、ABS(number):返回数字的绝对值 语法:ABS(数字);返回数字的绝对值;若引用单元格,把数字换为单元格地址即可 2、INT(number):向小取整 语法:INT(数字);若引用单元格…

QT SSL handshake failed问题分析与解决 QT基础入门【网络编程】openssl

问题: 使用https方式进行post 和get请求时,有时候会出现SSL handshake failed的问题,其实是调用Qt QNetworkAccessManager出现的问题。 其实SSL握手是建立HTTPS连接过程的第一步。为了验证和建立连接,用户的浏览器和网站的服务器必须经过一系列检查(握手),从而建立HTTP…

【STM32RT-Thread零基础入门】 4. 线程介绍(理论)

文章目录 前言一、线程的概念二、线程的调度三、上下文切换四、线程的重要属性1. 线程栈2. 线程的状态3. 线程优先级4. 线程时间片5. 线程的入口函数 五、RT-Thread命令查看系统线程信息总结 前言 前文中的最后一个任务发现,一个main()函数很难同时实现按键功能和闪…

postgresql的在windows下的安装

postgresql的在windows下的安装 下载安装步骤超级用户设置密码本地化设置安装信息安装完成 查看postgresql服务pgAdmin的使用打开命令 行工具查询数据库版本 创建数据库 下载 官网地址 https://www.postgresql.org/ 下载页面 https://www.postgresql.org/download/ windows下…

使用yolov5进行安全帽检测填坑指南

参考项目 c​​​​​​​​​​​​​​GitHub - PeterH0323/Smart_Construction: Base on YOLOv5 Head Person Helmet Detection on Construction Sites,基于目标检测工地安全帽和禁入危险区域识别系统,🚀😆附 YOLOv5 训练自己的…

小素数,大智慧

小素数,大智慧 定义判断方法方法1方法2方法3方法4方法5方法6方法7 定义 素数(质数):在大于 1 的自然数中,只有 1 和该数本身两个因数的数 素数(质数):在大于1的自然数中,…

ES6自用笔记

目录 原型链 引用类型:__proto__(隐式原型)属性,属性值是对象函数:prototype(原型)属性,属性值是对象 相关方法 person.prototype.isPrototypeOf(stu) Object.getPrototypeOf(Object)替换已不推荐的Object._ _ proto _ _ Ob…

易服客工作室:Uncode主题 - 创意和WooCommerce WordPress主题

Uncode主题是一款像素完美的创意 WordPress 主题,适用于任何类型的网站(作品集、代理机构、自由职业者、博客),也是适用于商店(电子商务、在线商店、企业)的顶级 WooCommerce 主题。Uncode 的设计非常注重细…

21.1 CSS 文字样式

1. 字体倾斜 font-style属性: 为文本设置字体样式.常用取值: normal: 正常显示文本. 快捷键: fstab. italic: 显示斜体文本. 快捷键: fsntab.<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>fo…

matlab中exp和expm的区别

exp()为数组 X 中的每个元素返回指数 e x e^{x} ex expm()计算 X 的矩阵指数。 两个函数传入矩阵后计算的结果是不同的&#xff0c;千万不能混淆。之前曾经想当然得把exp里传入矩阵当矩阵指数使用&#xff0c;也未验证正确性&#xff0c;实不应该。

深入理解 Flutter 图片加载原理 | 京东云技术团队

前言 随着Flutter稳定版本逐步迭代更新&#xff0c;京东APP内部的Flutter业务也日益增多&#xff0c;Flutter开发为我们提供了高效的开发环境、优秀的跨平台适配、丰富的功能组件及动画、接近原生的交互体验&#xff0c;但随之也带来了一些OOM问题&#xff0c;通过线上监控信息…

【leetcode 力扣刷题】快乐数/可被k整除的最小整数(可能存在无限循环的技巧题)

可能存在无限循环的技巧题 202. 快乐数数学分析 1015. 可被k整除的最小整数数学分析 202. 快乐数 题目链接&#xff1a;202. 快乐数 题目内容&#xff1a; 理解题意&#xff0c;快乐数就是重复每位数的平方之和得到的新数的过程&#xff0c;最终这个数能变成1。变成1以后&…

docker的资源控制及数据管理

docker的资源控制及docker数据管理 一.docker的资源控制 1.CPU 资源控制 1.1 资源控制工具 cgroups&#xff0c;是一个非常强大的linux内核工具&#xff0c;他不仅可以限制被 namespace 隔离起来的资源&#xff0c; 还可以为资源设置权重、计算使用量、操控进程启停等等。 …

HTML中的字符串转义

为什么要转义&#xff1f; 转义可以防止 xss 攻击。接下来&#xff0c;我们来看一下如何转义。 HTML Sanitizer API Sanitizer 是浏览器自带的转义方法&#xff0c;在2021年初被提出&#xff0c;兼容性问题很大。 列举几个常用的 API&#xff1a; const $div document.qu…

Python批量爬虫下载文件——把Excel中的超链接快速变成网址

本文的背景是&#xff1a;大学关系很好的老师问我能不能把Excel中1000个超链接网址对应的pdf文档下载下来。虽然可以手动一个一个点击下载&#xff0c;但是这样太费人力和时间了。我想起了之前的爬虫经验&#xff0c;给老师分析了一下可行性&#xff0c;就动手实践了。    没…

【网络架构】华为hw交换机网络高可用网络架构拓扑图以及配置

一、网络拓扑 1.网络架构 核心层:接入网络----路由器 汇聚层:vlan间通信 创建vlan ---什么是vlan:虚拟局域网,在大型平面网络中,为了实现广播控制引入了vlan,可以根据功能或者部门等创建vlan,再把相关的端口加入到vlan.为了实现不用交换机上的相同vlan通信,需要配置中继,为了…

《HeadFirst设计模式(第二版)》第八章代码——模板方法模式

代码文件目录&#xff1a; CaffeineBeverage package Chapter8_TemplateMethodPattern;/*** Author 竹心* Date 2023/8/17**/public abstract class CaffeineBeverage {final void prepareRecipe(){boilWater();brew();pourInCup();//这里使用钩子customerWantsCondiments()来…

FPGA:uart原理+tx发送模块+rx接收模块

文章目录 一、串口通信二、UART通信三、tx发送模块四、rx模块接收 一、串口通信 处理器与外部设备通信的两种方式&#xff1a; 串行通信&#xff1a; 指数据的各个位使用多条数据线同时进行传输。 并行通信&#xff1a; 将数据分成一位一位的形式在一条数据线上逐个传输。 串…

Dodaf架构的学习分享

一.Dodaf的内容 Dodaf的背景 DODAF&#xff08;Department of Defense Architecture Framework&#xff09;起源于美国国防部&#xff0c;是一个用于支持复杂系统设计、规划和实施的架构框架。以下是DODAF的背景和起源&#xff1a; 复杂系统需求&#xff1a;在军事和国防领域&…

stm32单片机开关输入控制蜂鸣器参考代码(附PROTEUS电路图)

说明&#xff1a;这个buzzer的额定电压需要改为3V&#xff0c;否则不会叫&#xff0c;源代码几乎是完全一样的 //gpio.c文件 /* USER CODE BEGIN Header */ /********************************************************************************* file gpio.c* brief Thi…