PWM方式读取AS5600磁编码器数据

PWM方式读取AS5600磁编码器获取角度例程


  • 📍相关篇《STM32 软件I2C方式读取AS5600磁编码器获取角度例程》
  • 📌《HAL STM32 硬件I2C方式读取AS5600磁编码器获取角度例程》
  • 🎉本例程包含:Arduino测试代码STM32标准库代码HAL STM32代码

📙PWM 输出模式

📝AS5600可以在CONF寄存器的OUTS位上设置PWM编码的数字输出(OUTS = 10)。在该模式下OUT引脚输出一个数字PWM 信号。每个脉冲的占空比与磁铁旋转的绝对角度成正比。PWM信号由4351个PWM时钟周期组成.该PWM 框架由以下部分组成:
• 128 PWM 高时钟周期
• 4095 PWM 数据时钟周期
• 128 PWM 低时钟周期

  • 📄AS5600 脉冲宽度调制模式的输出特性:
    在这里插入图片描述

📑PWM脉宽测量

📝AS5600 输出的PWM信号,主要是对其脉宽测量。通过定时器查询检测引脚的高电平时间即可。如果使用定时器捕获功能也可以,只不过需要特定通道引脚才行。
  • 🎈相关篇《STM32 HAL库定时器输入捕获SlaveMode脉宽测量》

  • 🍁先通过IIC读取的角度值和逻辑分析仪抓取的AS5600 OUT引脚的输出PWM占空比波形对比图:

在这里插入图片描述

  • 🌿由于AS5600 OUT引脚输出的PWM频率,最高920Hz,对于STM32单片机,定时器捕获脉宽,频率并不需要太高,占空比范围10% - 90%。
    在这里插入图片描述
  • 🔖上面对应的角度值:359
    在这里插入图片描述

⛳AS5600 PWM方式输出配置

  • 👉AS5600 芯片默认情况下,OUT引脚是不输出数字PWM波形的,需要通过i2C通讯方式,配置CONF寄存器,对应位,才能让OUT引脚,输出PWM波形。明白这一点很重要。网上很少有人提及,可能使用该方式的不多。一旦配置好后,断电重启是可以保持该寄存器原写入的数据。(也就是一次配置,终生有效)
    在这里插入图片描述
    在这里插入图片描述

📘代码实现PWM脉宽测量

📗Arduino脉宽测量代码
  • 🌿利用pulseIn()函数获取脉宽时间。
void setup() {Serial.begin(115200);Serial.println("Start initing.....");
}void loop() {long int a = millis();int value = pulseIn(6, HIGH);//读取高电平持续时间Serial.print(millis() - a);Serial.print("  ");Serial.println(value);delay(200);Serial.flush();
}
📘标准库代码源码
链接:https://pan.baidu.com/s/110g03mNORMLpaWO6IJNaAg?pwd=ue13 
提取码:ue13
📒HAL库代码源码
  • 📝核心代码实现:
uint16_t get_AS5600_pwm_value(void)
{flag_as5600_outtime = 0;__HAL_TIM_SET_COUNTER(&htim3, 0) ;HAL_TIM_Base_Start_IT(&htim3); //启动定时器while(HAL_GPIO_ReadPin(ECHO_GPIO_Port, ECHO_Pin) &&(flag_as5600_outtime == 0)); //高电平过去一个while(!HAL_GPIO_ReadPin(ECHO_GPIO_Port, ECHO_Pin)&&(flag_as5600_outtime == 0)); //低电平过去一个,开始读取数据__HAL_TIM_SET_COUNTER(&htim3, 0) ; //清空计数值
//    HAL_TIM_Base_Start_IT(&htim3); //启动定时器while(HAL_GPIO_ReadPin(ECHO_GPIO_Port, ECHO_Pin)&&(flag_as5600_outtime == 0)) {} //读取结束HAL_TIM_Base_Stop_IT(&htim3); //启动定时器if(flag_as5600_outtime == 1) {flag_as5600_outtime = 0;return 65535;}return (__HAL_TIM_GET_COUNTER(&htim3));
}void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM3) {if(__HAL_TIM_GET_IT_SOURCE(htim, TIM_IT_UPDATE) != RESET) {flag_as5600_outtime = 1; //超时__HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);}// __HAL_TIM_CLEAR_IT(htim, TIM_IT_UPDATE);//清楚更新中断标志位// HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}}
链接:https://pan.baidu.com/s/1SiZ3Ndw6_YDZ1T3UICn07g?pwd=i2nh 
提取码:i2nh

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

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

相关文章

Mac删除软件,动一动手指,几秒就彻底删除 mac删除软件删不掉的解决方法 mac删除软件后怎么删除软件数据

当你入职新公司,接手前任员工使用的Mac电脑时,很可能会遇到一个非常普遍的问题:电脑中装有大量你不需要的软件。这些软件不仅占用宝贵的硬盘空间,还可能影响电脑的运行速度和效率。为了获得一个干净、清爽的使用体验,删…

Java 关键字 this 使用详解(通俗易懂)

this关键字主要有以下三个地方使用 在方法体中引用当前对象,即其方法被调用的对象,以便将当前对象的实例变量或当前对象作为参数传递给其他方法。 ① t this.x; 要在方法中引用当前对象,可以使用关键字 this。 ② return this; 作为当前…

[java]网络编程

网络编程概述 计算机网络: 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统。 Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序…

题库管理系统-基于Springboot实现JAVA+SQL离散数学题库管理系统(完整源码+LW+翻译)

基于Springboot实现JAVASQL离散数学题库管理系统(完整源码LW翻译) 概述: 本系统具体完成的功能如下: 1题库的管理与维护:新题的录入,修改,删除等功能。 2生成试卷:包括自动生成与手工改动,要…

使用msf进行有防火墙限制的3389端口转发

使用msf进行有防火墙限制的3389端口转发 这里主要是针对在内网中遇到需要开启3389的时候,发现存在防火墙,就没有办法直接远程连接,这个时候就可以使用端口转发使用msf,使用前记得先初始化,连接好数据库这里先使用msf进…

二.音视频编辑-媒体组合-播放

引言 当涉及到音视频编辑时,媒体资源的提取和组合是至关重要的环节。在iOS平台上,AVFoundation框架提供了丰富而强大的功能,使得媒体资源的操作变得轻松而高效。从原始的媒体中提取片段,然后将它们巧妙地组合成一个完整的作品&am…

51之定时器与中断系统

目录 1.定时器与中断系统简介 1.1中断系统 1.2定时器 1.2.1定时器简介 1.2.2定时器大致原理及其配置 1.2.3定时器所需的所有配置总介 2.定时器0实现LED闪烁 3.使用软件生成定时器初始化程序 1.定时器与中断系统简介 1.1中断系统 首先,我们需要来了解一下什么…

深入浅出 -- 系统架构之单体到分布式架构的演变

一、传统模式的技术改革 在很多年以前,其实没有严格意义上的前后端工程师之分,每个后端就是前端,同理,前端也可以是后端,即Ajax、jQuery技术未盛行前的年代。 起初,大部分前端界面很简单,显示的…

AcWing1402.星空之夜

【题目链接】1402. 星空之夜 - AcWing题库 夜空深处,闪亮的星星以星群的形式出现在人们眼中,形态万千。 一个星群是指一组非空的在水平,垂直或对角线方向相邻的星星的集合。 一个星群不能是一个更大星群的一部分。 星群可能是相似的。 如…

【蓝桥杯】GCD与LCM

一.概述 最大公约数(GCD)和最小公倍数(Least Common Multiple,LCM) 在C中,可以使用 std::__gcd(a, b)来计算最大公约数 1.欧几里德算法/辗转相除法 int gcd(int a,int b){return b?gcd(b, a%b):a; } 2…

Tensorboard以及Transforms初步学习

一.前情提要 1.本文是代码结合知识点,注释即为知识点 2.主要详细讲解Tensorboard以及Transforms代码以及基础知识 3.若想深入学习,建议阅读 P3. Python学习中的两大法宝函数(当然也可以用在PyTorch)_哔哩哔哩_bilibili 二.简述…

抖音运营技巧

1、视频时长 抖音的作品是否能够继续被推荐,取决于综合数据,包括完播率、点赞率、评论率、转发率和收藏率等。其中,完播率是最容易控制的因素。对于新号来说,在没有粉丝的初期,发布过长的视频可能会导致无人观看。因此…

金田金业带你一文了解现货黄金开户注意事项

现货黄金作为一种受欢迎的投资品种,吸引了越来越多的投资者。然而,在进行现货黄金开户时,有一些重要的注意事项需要牢记。本文将为您详细介绍现货黄金开户的九大关键要点,确保您能够在投资过程中做出明智的决策。 第一&#xff0c…

Java- maven下载jar包,提示找不到,Could not find artifact

1、执行下面命令行 mvn install:install-file -Dfile/home/quangang/桌面/isv-sdk-2.0.jar -DgroupIdcom.jd -DartifactIdisv-sdk -Dversion2.0 -Dpackangjar 2、然后这里要加上jar包

No dashboards are active for the current data set.

再次记录一下这个离谱的问题 之前出现这个问题是因为目录没写对 今天遇到这个问题的原因是目录是对的,跟目录是否带有中文也没关系 是writer写入的时候写的是空的,离谱的是写入是空的情况下也会生成events日志文件,看起来好像成功写入了一样&…

Spring源码解析上

spring源码解析 整体架构 defaultListableBeanFactory xmlBeanDefinitionReader 创建XmlBeanFactory 对资源文件进行加载–Resource 利用LoadBeandefinitions(resource)方法加载配置中的bean loadBeandefinitions加载步骤 doLoadBeanDefinition xml配置模式 validationMode 获…

2024-04-05 问AI: 介绍一下深度学习中的Leaky ReLU函数

文心一言 Leaky ReLU(Leaky Rectified Linear Unit)函数是深度学习领域中的一种激活函数,主要用于解决ReLU(Rectified Linear Unit)函数在负值区域为零的问题。ReLU函数在输入为正时保持原样,而在输入为负…

nodejs实现TCP端口转发并截包的小工具

近期我正致力于开发一个基于 Go-CQHTTP 的 QQ 机器人应用程序项目,该项目现已成功实现了 Go-CQHTTP 的容器化部署,利用 Docker 技术确保其运行环境的一致性与便捷性。随着项目推进,接下来的工作重心转向部署配套的签名服务器(qsig…

软考111-上午题-【计算机网络】-URL和DNS

一、URL解析 org:各类组织结构(非盈利团队) 1-1、顶级域 顶级域名是域名的最后一个部分,即是域名最后一点之后的字母,例如:www.baidu.com这个域名中,顶级域是.com(或.COM&#xff…