公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

这篇文章原本打算作为 2023 年 7 月 18 日同名帖子的补充帖子,但在我有机会添加这篇文章之前,它就被锁定了。 由于这可能对其他设计中的其他用户有价值,我将在这里发布。

最初的问题是使用电容的液位探测器。 上一篇文章展示了一种可以应用的使用 CapSense 的方法。 但是,在发布之前,我开发了一种替代方法,事实证明该方法足以满足该应用程序的需求。 这篇文章描述了这种方法,但更重要的是,描述了如何在模拟和数字之间切换引脚。

该项目涉及测量冷却水库中的水位。 一旦液位达到合适的水平,循环泵就会开启。 在更高的层面上,供水被关闭。 两个设定点都有滞后。 绝对测量并不重要,它只需要是可重复的。 传感器由两根绝缘电线组成,每根U形相隔约两英寸,下降到水库然后退出。 实际的电线从来没有接触过水。 但是水是这个电"容器的介电体",随着水位的升高并覆盖更多的U形电线,电容器的价值会增加。 电容约为 100 pf。

测量技术包括在CPU的低电平(数字方式)上设置一个Sense引脚以对"电容器进行放电,"然后切换到恒定电流为其充电,同时使用比较器观察生成的电压。 计时器确定了达到比较器阈值电压需要多长时间。 计时器计数越大,电容越高,因此水位越高。

下图显示了各种硬件模块是如何接线和配置的。 原始帖子中的关键问题也是使这项工作发挥作用的关键部分是如何在引脚的模拟和数字之间切换。 在数字模式下,它会被拉低。 在模拟模式下,它被来自 IDAC1 的恒定电流上拉,电压由比较器测量。

CY8C4247 没有可编程基准输出。 有一个引脚 CAN 将基本基准电压连接到它,用于滤波目的,但这太低了,无法满足我的需求,因此,我设置了IDAC2以将恒定电流驱动到电阻器(接地),该电阻器为比较器提供了固定电压。

以下代码是整件事的关键:

CY_SET_REG32(CYREG_HSIOM_PORT_SEL2, hsiomreg & ~(0xF0000000));
// This disconnects the pin from the Bmux bus and connects it to CPU GPIO
Wait(30); // (milliseconds) Wait for capacitor to discharge
// Connecting the pin to Bmux bus where the 8 bit IDAC_1 is connected and the comparator is connected
CY_SET_REG32(CYREG_HSIOM_PORT_SEL2, hsiomreg);

一条指令 CAN 模拟和数字之间切换。 除了引脚模块中静态内置的配置外,无需对数字端进行配置。 应该注意的是,引脚短暂浮动。 在开始使用恒定电流为电容器充电的线性斜坡之前,它的电压会升高。 此外,当引脚在数字相位处于零伏特时,比较器当时连接的是DAC而不是引脚,因此显示为高电平。 切换回模拟模式时,比较器立即报告为低电平。 这为开始测量周期提供了一种非常方便的方式。

计时器由比较器输出变为低电平时启动,并因其变为高电平而停止。 比较器变为高电平后,将使用以下行读取计数器。 计时器的启动输入配置为重置计数,因此程序不必解决这个问题。

data = timer_1_readCapture ();

此应用程序的数据值从大约 500(空)到 1700(满)不等。 数据中有大约100个噪声计数,这可能是由于"电容器与电路板之间"有大约两英尺长的电线隔开。 两根电线(另一根是 PCB 接地)保持很远的距离,以最大限度地减少额外的固定电容。 此外,PCB 接地没有连接到任何外部接地,因此测量之上可能有相当大的60 Hz,这使得读数变得"嘈杂"。 对多个读数求平均值,并丢弃异常值。 但是通过这种过滤,设计可以可靠地运行并达到所需的目标。

同样,这里的关键是如何在引脚的模拟和数字使用之间切换。 它必须是数字输出来给"电容器"放电,模拟输入和输出才能感应电荷并驱动为"电容器充电的电流"。 其他应用程序也存在同样的需求。 例如,电阻式触摸屏需要执行以下步骤:

1.将左(和/或右)设置为低电平(数字输出),并用上拉功能读取顶部或底部(数字输入),以检测何时发生触摸。

2.将左低和右设置为高。 将顶部和底部切换为模拟,然后使用 ADC 进行测量,以确定触摸的 X 位置。

3.将顶部和底部设置为高电平(数字),然后左右切换到模拟,然后使用 ADC 测量一个,以确定触摸的 Y 位置。

4.返回步骤 1 查看触摸是否仍然存在

这同样需要在数字输出和模拟输出之间切换四个引脚,其中两个引脚和过程中的不同点具有ADC功能。

 

 

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨威尔顿

如果您正在寻找除了数字配置之外还可以使用单指令在模拟引脚和数字引脚之间切换(您已经在上面进行了配置),那么想要将GPIO控制为数字输入或输出需要再配置一个寄存器配置。

你必须单独使用端口配置寄存器 (CYREG_PRT1_PC),它允许特定的 GPIO 在 GPIO 之间进行选择——作为输入模式、输出模式模拟配置模式。&

有关更多详细信息,请参阅 PSoC 4200 技术参考手册&注册手册。

Maragani_0-1693216301505.png

Maragani_1-1693216347223.png

 

谢谢

Sateeeh M

 

 

 

 

在原帖中查看解决方案

0 点赞
3 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

@Wilton

感谢您发布 “行之有效” 的解决方案。

你可以考虑在 Res " ources/Code Examples 子"表单中发布指向这个话题的链接。这可能对那些在该论坛中监控新代码示例的人有所帮助。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

感谢您发布解决方案。 请注意,论坛编辑器允许将图像嵌入到帖子中(相机图标),这使读者更轻松(无需下载)。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨威尔顿

如果您正在寻找除了数字配置之外还可以使用单指令在模拟引脚和数字引脚之间切换(您已经在上面进行了配置),那么想要将GPIO控制为数字输入或输出需要再配置一个寄存器配置。

你必须单独使用端口配置寄存器 (CYREG_PRT1_PC),它允许特定的 GPIO 在 GPIO 之间进行选择——作为输入模式、输出模式模拟配置模式。&

有关更多详细信息,请参阅 PSoC 4200 技术参考手册&注册手册。

Maragani_0-1693216301505.png

Maragani_1-1693216347223.png

 

谢谢

Sateeeh M

 

 

 

 

0 点赞