PCAP01介绍和STM32模拟SPI驱动

2023-11-19

一.芯片介绍

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的

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PCAP01介绍和STM32模拟SPI驱动 的相关文章

随机推荐

  • 单片机晶振和波特率的关系

    在串行通信中 MCS 51串口可约定四种工作方式 其中 方式0和方式2的波特率是固定的 而方式1和方式3的波特率是可变的 由定时器T1的溢出率决定 波特率是指串行端口每秒内可以传输的波特位数 这里所指的波特率 如标准9600不是每秒种可以传
  • 苹果iPhone一键解锁破解流程(新机篇)

    网上详细流程已经很多了 建议破解之前都看一下 我这边说的就是要注意的几个地方 这几天我都泡在网上 感觉基本都会了 今天拿到机子 还是弄了3个小时 基本流程 1 拿到新机以后 首先要破解才能进入系统 如果不能进入系统 itunne不能更新到1
  • kafka配置内外网访问

    listeners 学名叫监听器 其实就是告诉外部连接者要通过什么协议访问指定主机名和端口开放的 Kafka 服务 advertised listeners 和 listeners 相比多了个 advertised Advertised 的
  • linux的aux命令,Linux中 ps aux 命令

    ps aux USER PID CPU MEM VSZ RSS TT STAT STARTED TIME COMMAND root 11 100 0 0 0 0 16 RL 4Dec09 98403 03 48 idle cpu root
  • 如何将git项目转移给其他人

    为什么80 的码农都做不了架构师 gt gt gt 方法很简单 成员管理里将要转给项目的人设置为master 权限 然后他再登录系统将你移除项目就实现了项目转移 转载于 https my oschina net zhaky blog 907
  • 【Three.js】第十六章 Shadows 阴影

    16 Shadows 阴影 介绍 上节课我们学会了灯光 现在我们需要阴影 物体的背面应该在黑暗中 这就是阴影所谓的核心 我们缺少的是物体对象的投影 也就是根据被投影的对象在其他对象身上创建阴影 阴影渲染一直是实时 3D 渲染的一大挑战 开发
  • go 学习 之 GORM数据插入,查询,修改,删除

    GORM插入数据 gorm新增记录 定义一个用户 并初始化数据 u User Username tizi365 Password 123456 CreateTime time Now Unix 插入一条用户数据 下面代码会自动生成SQL语句
  • TCP快速重传机制

    一 快速重传机制 上一篇讲到了TCP 的超时重传 但是超时重传往往会带来许多微妙的问题 比如说 当一个报文段丢失时 会等待一定的超时周期然后才重传分组 增加了端到端的时延 当一个报文段丢失时 在其等待超时的过程中 可能会出现这种情况 其后的
  • 清空v4l2 usbcamera缓存

    做过usbcamera的同学们应该都知道 usbcamera有一个缓存队列 当应用上面调用startPreview的时候 就会层层的调到usbcamera 的ioctl mFd VIDIOC DQBUF tmp buf 用于从队列里出去一个
  • Qt C++ map使用const初始化 QMap使用const初始化

    QMap怎么使用const初始化 有的时候 需要通过字符串去访问一些固定的参数 class A 男生11人 女生10人 教室面积150平 class B 男生11人 女生11人 教室面积155平 当然可以使用枚举加数组的方式 但是就是想用m
  • Kafka入门基础知识学习笔记-Kafka只是消息引擎吗

    学习极客时间 Kafka核心技术与实战 入门 03 05 作者 胡夕 Apache Kafka 的一名代码贡献者 目前在社区的 Patch 提交总数位列第 22 位 应该说算是国内比较活跃的贡献者了 胡夕老师 赠言 聪明人也要下死功夫 最近
  • sh: 1: vue-cli-service: Permission denied npm ERR! code ELIFECYCLE npm ERR! errno 126 npm ERR! my-pr

    在linux环境下 用npm run build编译打包前端 报以下错误 sh 1 vue cli service Permission denied npm ERR code ELIFECYCLE npm ERR errno 126 np
  • WEB-7-多线程

    多线程 一 背景 二 认识线程 Thread 1 理解 2 进程和线程的区别 高频面试题 3 使用代码创建多线程 三 线程的相关操作 1 创建线程 1 方法一 继承 Thread 类 2 方法二 实现 Runnable 接口 3 其它方法
  • 对自动化测试的一些见解

    1 手工测试和自动化测试用例 手工测试用例是针对功能测试人员的 而自动化测试用例是针对自动化测试用例框架或工具的 1 手工测试用例特点 较好的异常处理能力 能通过人为的逻辑判断校验当前步骤是否正确实现 人工执行用例具有一定步骤跳跃性 人工测
  • 《随笔三十六》——C#中的 “ 解析 泛型 “ HashSet 类 中的属性”

    目录 HashSet Constructors Propertys HashSet Comparer HashSet Count Methods HashSet Add HashSet Clear HashSet Contains Hash
  • C++57个入门知识点_28 继承的可见性(父类成员在子类中可见性;影响因素:父类内部关键字+继承位置关键字;父亲某属性成员,变为儿子中某种属性成员;编译期检查访问权限,子类对象内存包含父类所有成员)

    前面我们学习了类的基本用法 并在上篇C 57个入门知识点 27 继承的概念 类的组合关系 将一个类的对象作为另外一个类的成员 类的组合关系的访问 继承的概念 A类是B的儿子 A被称为子类 B被称为父类或者A被称为派生类 B被称为基类 中介绍
  • 基于物联网的智能体育器材管理系统

    继续更新之前做过的一些Arduino基础项目之基于ESPduino的智能体育器材管理系统 实现效果 本系统可以将采集到的数据上传至阿里云物联网平台 并通过物联网平台发送至用户的手机app上 用户可以远程查看室内情况 并可以远程处理室内异常情
  • typeScript--[es6class类实现继承]

    一 js中实现继承 js实现继承 父类 function Father name this name name this say function console log this name 在唱歌 var f new Father 逍遥的
  • Git提交代码报错:remote: HTTP Basic: Access denied

    一 问题 由于账号更改或其他原因导致提交代码时报错 账号密码验证不通过 密码或者权限不对 导致 Git 操作失败 remote HTTP Basic Access denied fatal Authentication failed for
  • PCAP01介绍和STM32模拟SPI驱动

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