news 2026/5/2 6:11:08

AS5600改PWM输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AS5600改PWM输出

AS5600磁编码器,默认OUT脚输出模拟量,改PWM输出,修改方式

使用I2C引脚修改

下面以ESP32单片机为例

I2C的SDA,SCL接默认的I2C引脚21和22

out脚接34号

GND接地

VCC接3.3V

代码如下:

/*打开 Arduino IDE → 库管理器 → 搜索并安装 AS5600(作者 RobTillaart)。在VSCode+PlatformIO里面同样记载这个库即可*/

#include <Wire.h>

#include <AS5600.h>

AS5600 as5600; // 默认 I2C 地址 0x36

#define PWM_INPUT_PIN 34 // AS5600 的 OUT 引脚接到 ESP32 GPIO34


// ======================

// 测量 PWM 占空比函数

// ======================

float measurePWMDuty() {

const uint32_t timeout = 30000; // 超时时间(微秒),对应约115Hz

// 测量一个完整周期的高电平时间

uint32_t highTime = pulseIn(PWM_INPUT_PIN, HIGH, timeout);

if (highTime == 0) {

return 0.0; // 测量失败

}

// 测量低电平时间(为了更准确)

uint32_t lowTime = pulseIn(PWM_INPUT_PIN, LOW, timeout);

if (lowTime == 0) {

return 0.0;

}

uint32_t totalTime = highTime + lowTime;

if (totalTime == 0) return 0.0;

return (highTime * 100.0) / totalTime;

}

void setup() {

Serial.begin(115200);

Wire.begin(); // ESP32 默认 SDA=21, SCL=22

pinMode(PWM_INPUT_PIN, INPUT); // 设置 GPIO34 为输入

delay(100);

Serial.println("=== AS5600 PWM 输出 + ESP32 PWM 读取测试 ===");

// 设置为 PWM 输出模式

bool success = as5600.setOutputMode(AS5600_OUTMODE_PWM);

if (success) {

Serial.println("✓ 成功设置为 PWM 输出模式");

} else {

Serial.println("✗ PWM 模式设置失败!");

}

// 设置 PWM 频率(115Hz 便于观察和测量)

as5600.setPWMFrequency(AS5600_PWM_115);

// 设置旋转方向(根据你的实际安装方向修改)

as5600.setDirection(AS5600_CLOCK_WISE);

delay(50);

// 打印配置寄存器,确认设置是否成功

uint16_t conf = as5600.getConfiguration();

Serial.print("当前 CONF 寄存器: 0x");

Serial.println(conf, HEX);

Serial.println("OUT 引脚已连接到 GPIO34");

Serial.println("开始读取角度...\n");

}

void loop() {

// 1. 通过 I2C 读取角度(推荐,最准确)

uint16_t raw = as5600.readAngle(); // 0 ~ 4095

float angle = raw * (360.0 / 4096.0); // 转换为角度

// 2. PWM 理论占空比

float duty_theory = (raw * 100.0) / 4096.0;

// 3. 通过 GPIO34 实际测量 PWM 占空比

float duty_measured = measurePWMDuty();

// 打印结果

Serial.printf("Raw: %4d | Angle: %6.1f° | Theory: %5.1f%% | Measured: %5.1f%%\n",

raw, angle, duty_theory, duty_measured);

delay(200); // 可根据需要调整刷新速度

}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 6:07:26

python 库劫持:原理、利用与防御

Python 库劫持&#xff08;Library Hijacking&#xff09;是一种常见的权限提升或持久化攻击手段。其核心逻辑在于利用 Python 解析器加载模块时的搜索路径优先级&#xff0c;诱使程序加载攻击者伪造的恶意模块&#xff0c;而非合法的标准库或第三方库。一、 Python 模块搜索机…

作者头像 李华
网站建设 2026/5/2 5:56:54

立创EDA转AD再进Ansys Q3D:一条龙搞定PCB寄生参数提取(附排雷手册)

立创EDA到Ansys Q3D全流程实战&#xff1a;PCB寄生参数精准提取指南 在电子设计领域&#xff0c;从原理图到PCB布局只是产品开发的第一步。真正考验设计可靠性的&#xff0c;往往是那些"看不见"的寄生参数——它们如同电路中的隐形杀手&#xff0c;可能导致信号完整性…

作者头像 李华