AC7811-PWDT脉冲宽度检测

news2024/11/16 21:32:45

PWDT是Pulse Width Detect Timer(脉冲宽度检测定时器)缩写。可作为测量脉冲宽度的工具或作为16位定时器。

功能

检测脉冲宽度

可编程起始测量触发沿

支持 3 个霍尔传感器的信号输入测量

支持来自模拟比较器的 3 个输入

定时器

在禁用定时器或在正常操作时,修改定时器加载值

功能框图

反电动势信号可推出霍尔信号?

PWDT 功能框图可知,ACMP 模块的输出可作为 PWDT 模块输入。该功能主要用于电机控制,无传感方案应用。

大致原理如下:由于电机自身特性,BLDC/PMSM 电机在运行时会产生反电动势(BLDC 为梯形波,PMSM 为正弦波)。通过反电动势采集电路,把采集到的电压输入给 ACMP 模块,ACMP 模块比较后输入给 PWDT,PWDT 根据三个输入值进行异或运算得到HALL 状态。

时钟配置

Pwdtclk 是由 PSC[2:0]从总线时钟分频得到。对于可测量脉冲宽度的范围,可通过设置 pwdtclk 进行调节。

在配置时钟分频时,有如下几点需注意:

1、输入信号的脉宽要在可捕获的范围内才行

2、脉冲宽度测量的精度

配置 PSC[2:0]以适当的值,以达到更准确的测量值。

一个基本原则是,使用较小的 PSC[2:0]可以获得更准确的测量值。显然,输入脉冲越窄,相对测量误差越大。

所以配备了滤波器功能:

模块中的滤波器设计用于滤除高或低电平小于本段中描述的特定宽度的噪声信号。

就像下面这个例子:

配置 FILTVAL = 15 及 FILT_PSC = 2 时,滤波器脉冲宽度为 60 bclk,小于 60 bclk 的脉冲被判断为噪声脉冲并将被过滤掉

单通道输入测量

对于基本测量,可以通过设置 PINSEL[1:0]来选择测量特定的通道输入,并可以根据实际应用通过设置 EDGE[1:0]来选择 4 种测量模式中的一种

 

 

三通道输入测量

对于霍尔测量,模块测量从 3 个通道输入的异或(XOR)得到的脉冲输入,设置 EDGE[1:0]= 2'b01。此外,内部 3 个通道比较器输入的配置类似于霍尔测量,只需把 CMPEN 同时配置为 1'b1。

对于霍尔测量或 3 个内部比较器输入,只需选择一种模式用于电机速度计算或换向,如下图所示。

实战测试

单通道

电路部分

产生一定频率与占空比的通道:

检测通道:PB8,对应PWDT_IN0,在Demo板子上是H_U接口

只需要在产生PWM的引脚引出一根杜邦线,连到PWDT检测通道上即可

软件部分

PWDT模块的初始化

/**
* PWDT_Initalize
*
* @param[in] none
*
* @return 0:Success
*
* @brief PWDT模块初始化
*/
void PWDT_Initalize(void)
{
    PWDT_ConfigType  pwdtConfig = {0};
    ///配置PWDT
    pwdtConfig.overflowIntEn      = 1; //使能溢出中断
    pwdtConfig.readyIntEn         = 1; //使能脉宽有效中断
    pwdtConfig.pwdtIntEn           = 1; //使能PWDT模块中断
    pwdtConfig.pwdtEn              = 1; //使能PWDT模块
    pwdtConfig.edgeMode            = RISING_START_CAPTURE_ALL; //上升沿开始捕获,双边沿捕获
    pwdtConfig.clockPreScaler     = PWDT_CLK_PRESCALER_8; //PWDT时钟源8分频
    pwdtConfig.clockSource        = PWDT_PCLKS_BUS; //PWDT时钟源为总线时钟
    pwdtConfig.pwdtTimerEn         = 0; //关闭PWDT timer
    pwdtConfig.pwdtHallEn          = 0; //关闭PWDT HALL功能
    pwdtConfig.pinSelect           = 0; //引脚选择 00/01/10/11分别选择pwdt_in0,pwdt_in1,pwdt_in2,internal_pwdtin
    pwdtConfig.pwdtFilterEn        = 1; //使能PWDT滤波,可滤掉小于pwdtFilterValue * (1 << pwdtFilterPsc)*bclk 的干扰信号
    //Filter width = 1024 * 15 = 15360*bclk
    pwdtConfig.pwdtFilterPsc       = 10;//滤波器分频  1~12分别表示2/4/8.../4096
    pwdtConfig.pwdtFilterValue     = 15;//0~15表示滤波不同脉宽
    PWDT_SetCallback(PWDT_Capture);//设置PWDT中断处理回调函数
    PWDT_Init(&pwdtConfig);//设置PWDT
}

产生PWM信号

/**
* PWM2_GenerateFrequency
*
* @param[in] none
*
* @return 0:Success
*
* @brief 使用PWM2 CH0,CH2,CH4产生频率为100HZ,占空比为50%的信号,每组信号相移60度。
*/
void PWM2_GenerateFrequency(void)
{
    //组合模式,高有效
    PWM_PWMInit(PWM2, PWM_PWMMODE_COMBINE, PWM_PWM_HIGHTRUEPULSE);
    //占空比 = (CH2n+1-CH2n)/(MOD+1) = (65-5)/(119+1) = 50%
    PWM_SetChannelValue(PWM2, PWM_CHANNEL_CHANNEL0, 5);
    PWM_SetChannelValue(PWM2, PWM_CHANNEL_CHANNEL1, 65);
    //CH2,CH3PWM输出相位相对CH0,CH1相位delay60度
    //(25-5)/(119+1) * 360度 = 60度
    PWM_SetChannelValue(PWM2, PWM_CHANNEL_CHANNEL2, 25);
    PWM_SetChannelValue(PWM2, PWM_CHANNEL_CHANNEL3, 85);
    //CH4,CH5PWM输出相位相对CH2,CH3相位delay60度
    PWM_SetChannelValue(PWM2, PWM_CHANNEL_CHANNEL4, 45);
    PWM_SetChannelValue(PWM2, PWM_CHANNEL_CHANNEL5, 105);
    PWM_SetModValue(PWM2, 119);  
    PWM_ClockSet(PWM2, PWM_CLOCK_SYSTEMCLOCK, 3999);   //频率:48000000/(3999 + 1)/(119 + 1) = 100Hz
}

PWDT检测部分

/**
* PWDT_Capture
*
* @param[in] none
*
* @return none
*
* @brief PWDT Pulse Width Detection CallBack
*/
void PWDT_Capture(void)
{
    if (PWDT_GetOverflowFlag())
    {
        //清PWDT溢出中断
        PWDT_ClrOverflowFlag();
    }
    
    if (PWDT_GetReadyFlag())
    {
        //清脉宽有效中断
        PWDT_ClrReadyFlag();
        g_positvePulse = ((PWDT->INIT0 >> 16) & 0xFFFF); //获取正脉宽计数值
        g_negativePulse = (PWDT->NPWCV & 0xFFFF);       //获取负脉宽计数值
        if (0 != (g_positvePulse + g_negativePulse))
        {
            /*
                计算频率和占空比
                频率 = PWDT时钟源 / PWDT时钟分频 / 正+负脉宽计数值
                占空比 = 正脉宽计数值 / 正+负脉宽计数值
            */
            g_freq = SYS_CLK / (PWDT_DIVIDER) / (g_positvePulse + 1 + g_negativePulse + 1);
            g_duty = (float)((float)g_positvePulse / (float)(g_positvePulse +1 + g_negativePulse + 1)); 
            printf("\ng_freq=%d, g_duty =%f.\r\n", g_freq, g_duty);
        }
        
    }
}

烧录测试

发现没有打印频率与占空比的结果

debug之后发现一直没有获取这个标志位

排除PWM产生功能原因

后来发现是电路的原因,R54焊盘被带掉了,而它正好是信号通道上的必经之路。

没办法,换通道了只能。

更换成,通道1,测试成功

使用霍尔信号捕获功能

霍尔两种安装方式的不同

因为HALL少了一个通道,所以暂时不进行此实验。

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

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

相关文章

【JavaScript】DOM 操作元素样式和元素类名

文章目录【JavaScript】DOM 操作元素样式和元素类名一. 操作元素样式(1)操作行内元素1. 获取元素的样式2. 设置元素的样式(2) 操作非行内元素和行内元素1. 获取元素的样式二. 操作元素类名(1) className1. 获取元素的类名2. 设置元素的类名3. 追加元素的类名(2) classList1. 获…

【谷粒商城基础篇】项目简介与分布式概念

谷粒商城笔记合集 分布式基础篇分布式高级篇高可用集群篇简介&环境搭建项目简介与分布式概念&#xff08;第一、二章&#xff09;基础环境搭建&#xff08;第三章&#xff09;整合SpringCloud整合SpringCloud、SpringCloud alibaba&#xff08;第四、五章&#xff09;前端知…

如何使用WebRTC建立一个视频会议App(二)

如何使用WebRTC建立一个视频会议App(一)_音视频开发老马的博客-CSDN博客 服务器接收到‘’准备好了‘’的信息并通过发送同样信息通知第一个参与者。这就开始了被称作发信的交换信息过程&#xff0c;因此我们需要添加相应的handlers到client.js文件中。 当第一个参与者接收到准…

BGP在数据中心的应用3——构建自动化的BGP配置

注&#xff1a; 本文根据《BGP in the Datacenter》整理&#xff0c;有兴趣和英文阅读能力的朋友可以直接看原文&#xff1a;https://www.oreilly.com/library/view/bgp-in-the/9781491983416/上一部分笔记请参考&#xff1a;https://blog.csdn.net/tushanpeipei/article/deta…

【回答问题】ChatGPT上线了!推荐20个姿态估计深度学习模型

推荐20个姿态估计深度学习模型 好的&#xff0c;这里是 20 个深度学习模型用于姿态估计的推荐&#xff1a; 2D/3D Convolutional Neural Networks Recurrent Neural Networks Self-supervised Learning Generative Adversarial Networks Attention-based Networks Graph Neur…

git add .卡住不动

问题描述 代码修改完了准备上传到github&#xff0c;使用 git add . 命令发现一直卡住不动了。没办法只能强行退出&#xff0c;如下图所示。 解决办法 研究了一番&#xff0c;发现了这类问题的套路&#xff0c;在此给大家提供一个debug的思路。 首先需要知道&#xff0c;git a…

保姆级手把手图文并茂教你配置MAC系统Flutter环境

Flutter 是什么 Flutter是Google开源的构建用户界面&#xff08;UI&#xff09;工具包&#xff0c;帮助开发者通过一套代码库高效构建多平台精美应用&#xff0c;支持移动、Web、桌面和嵌入式平台。Flutter 开源、免费&#xff0c;拥有宽松的开源协议&#xff0c;适合商业项目…

返回一个数组中所有元素的小数部分、整数部分为两个数组 numpy.modf()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 返回一个数组中所有元素的 小数部分、整数部分 为两个数组 numpy.modf() [太阳]选择题 关于以下python代码表述错误的一项是? import numpy as np anp.array([-0.5,1,1.5]) print…

《对线面试官》| 高频计算机网络面试题

目录1、说说 OSI 七层模型和 TCP/IP 四层模型的关系和区别2、说说 TCP 与 UDP 的区别3、TCP 是如何实现数据的可靠性&#xff1f;4、 TCP 协议如何提高传输效率&#xff1f;5、你知道 TCP 如何处理拥塞吗&#xff1f;6、为什么 TCP 链接需要三次握手&#xff0c;两次不可以么&a…

小程序后台数据交互-个人中心

目录 一&#xff0c;获取用户昵称和头像 登录过程 二&#xff0c;登录-小程序 三&#xff0c;后台 小程序服器配置 一&#xff0c;获取用户昵称和头像 登录过程 小程序登录 小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识&#xff0c;快速建立小…

SOFARegistry | 聊一聊服务发现的数据一致性

文&#xff5c;肖健&#xff08;花名&#xff1a;昱恒&#xff09;蚂蚁集团技术专家专注于服务发现领域&#xff0c;目前主要从事蚂蚁注册中心 SOFARegistry 设计、研发工作。本文 9492 字 阅读 24 分钟PART. 1前言1.1 什么是服务发现在微服务的体系中&#xff0c;多个应用程序…

Hydra(九头蛇)工具使用

Hydra工具使用1.Hydra简介1.1.Hydra介绍1.2.Hydra支持协议1.3.Hydra下载2.Hydra使用2.1.Hydra基本使用方式2.2.Hydra常用参数2.3.Hydra注意事项2.4.Kail字典2.5.Hydra密码生成器3.Hydra案例3.1.创建账号密码文件3.2.SSH协议爆破3.2.1.靶机信息3.2.2.开始爆破3.2.2.1.不知账号3.…

C#语言实例源码系列-游戏-实现华容道

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

Rust个人学习之聊聊Rust的变量

今天看了Rust的变量相关内容&#xff0c;Rust变量很重要的一个设计点是: Rust变量默认是不可变的。 很难理解? 我们接下来一起研究一下Rust的变量&#xff0c; 在Rust中变量是通过关键字let进行声明的 let x 5; 上述语句就是定义了一个名称为x的变量&#xff0c;变量的值为…

修改esp idf hello_world_main.c,验证Strategy 策略基类。出现一个问题,加以解决

修改esp32 idf hello_world_main.c&#xff0c;验证Strategy 策略基类。出现几个问题&#xff0c;加以解决&#xff1a; 错误&#xff1a; …/main/hello_world_main.cpp: In function ‘void test01()’: …/main/hello_world_main.cpp:77:12: error: deleting object of ab…

入门力扣自学笔记228 C++ (题目编号:2042)

2042. 检查句子中的数字是否递增题目&#xff1a;句子是由若干 token 组成的一个列表&#xff0c;token 间用 单个 空格分隔&#xff0c;句子没有前导或尾随空格。每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 &#xff0c;要么是一个由小写英文字母组成的 单词…

很好用的gRPC和WebSocket调试工具Apipost!强烈推荐

随着软件开发行业的发展&#xff0c;越来越多的公司和开发人员在工作中会涉及到gRPC和WebSocket等接口类型&#xff0c;但是目前市面上能支持这种接口的调试工具却几乎没有&#xff0c;国外的工具大都晦涩难懂&#xff0c;不符合我们的开发习惯&#xff0c;很难上手使用。 经过…

Android开发——APP ANR治理

一、背景介绍 ANR&#xff08;Application Not Response&#xff09;指应用程序无响应&#xff0c;通常出现在主线程被阻塞时&#xff0c;并伴随ANR弹窗出现。ANR发生时要么关闭当前app&#xff0c;要么等待&#xff0c;等待的结果大概率还是继续ANR&#xff0c;最终需要杀掉应…

在msys2上安装武汉大学的开源PPP解算软件-PRIDE PPP-AR

最近一篇文章《免费提供POSMV的GNSS数据解算服务&#xff0c;验潮仪丢失的一种补救》发表了以后&#xff0c;有一位相识的网友提供了一个重要信息&#xff1a;武汉大学PPP解算软件名字为PRIDE PPP-AR 开源了&#xff0c;其GUI自动下载星历文件进行自主解算。PRIDE PPP-AR 的官网…

2022年中小企业数字化转型路径报告(附下载链接)

省时查报告-专业、及时、全面的行研报告库省时查方案-专业、及时、全面的营销策划方案库【免费下载】2022年11月份热门报告盘点罗振宇2023年跨年演讲PPT原稿吴晓波2022年年终秀演讲PPT原稿2023年&#xff0c;如何科学制定年度规划&#xff1f;《底层逻辑》高清配图清华大学256页…