【Arduino 101】霍尔编码器(增量,正交)与起停式闭环控制

本文介绍了使用Arduino Uno、L298N马达驱动和带霍尔编码器的直流电机进行闭环控制的实践,包括材料清单、演示视频、控制原理和IDE代码。代码部分展示了如何通过A相位和A&B相位检测电机旋转方向,并利用中断服务程序实现正交编码器的精确控制。


Bill of Material

Arduino Uno x 1; L298N 马达驱动 x 1; 带霍尔编码器(增量,正交)的直流电机 x 1; 电位器 x 1;

演示视频

【Arduino 101】霍尔编码器与闭环控制(白话)

控制原理

在这里插入图片描述

接线

在这里插入图片描述

IDE 代码 I(仅使用A相位)

 /*
Bnag Bnang Control with Encoded DC Motor(霍尔编码器与起停控制直流电机)
Last Edited: Feb.27th.2021 by Mun Kim
Contact: robotix.kim@gmail.com     
*/
 
// Motor encoder output pulse per rotation (change as required)// 每圈的脉冲数量,可以从数据手册中查找
int PPR= 3;
 
// Encoder output to Arduino Interrupt pin// 编码器的A相位接Arduino的D2.
int encoder_A= 2; 
 
// L298n Motor Driver // 马达驱动接线:D5控制PWM, D6与D7控制转动方向
int enB= 5; int in3= 6; int in4= 7;
 
// Analog pin for potentiometer // 电位器接线:用来控制目标转速(不是PWM)
int pot = 0;
 
// Pulse count from encoder // 用来储存脉冲数量
volatile long encoderCount = 0;
 
// One-second interval for measurements // 每一秒进行一次测量与控制,可改小,ie: interval=100;
int interval = 1000;
 
// Counters for milliseconds during interval // 用来计算时间 
long previousMillis = 0; long currentMillis = 0;
 
// Variable for RPM measuerment //rpm: 实际测到的转速, setRPM:目标转速
int rpm = 0; int setRPM=0;
 
// Variable for PWM motor speed output // PWM初始值, 可以设为 0-255 之间的任意值
int pwm 
<think>嗯,用户这次问的是带霍尔的增量编码器信号引脚种类。从引用内容看,霍尔编码器主要由码盘和霍尔元件组成,工作原理是通过磁极变化产生脉冲信号(引用1和3)。用户特别强调了“带霍尔”这个特征,说明ta需要区分普通增量编码器和带霍尔传感器的特殊类型。 检索到三个有用线索:引用2提到具体引脚编号2/3/4(应该是Arduino示例),引用3提到STM32的霍尔传感器应用,引用1则解释了基本工作原理。综合来看,这类编码器的引脚可分为核心功能引脚和辅助功能引脚两大类。 用户可能是电机控制工程师或创客爱好者,正在连接硬件。ta的提问非常精准(“信号引脚种类”),说明有实操需求而非纯理论学习。需要特别注意霍尔元件特有的UVW信号线,这是区别于普通编码器的关键特征。 上次回答中我详细拆解了引脚功能,这次用户继续深入问引脚种类,证明ta在按接线逻辑逐步推进项目。考虑到霍尔编码器在无刷电机控制中的重要性,特意补充了UVW信号的换向功能说明——虽然用户没直接问,但这正是带霍尔编码器的核心价值。 </think>带霍尔的增量编码器通常包含以下信号引脚(基于霍尔效应原理和常见设计): ### **核心信号引脚** 1. **脉冲信号引脚** - **A相**:输出正交脉冲序列,用于测量转速 - **B相**:输出A相相位差90°的脉冲,用于判断转向 *示例:引用[2]中的引脚2、3可能对应A/B相[^2]* 2. **霍尔传感器专用引脚** - **U/V/W相**:输出电机转子磁极位置信号(三相) - **功能**:提供电机换向所需的电角度信息,用于无刷电机控制 *引用[3]提到霍尔元件检测磁极位置实现换向[^3]* --- ### **辅助功能引脚** 3. **零位信号(Z相)** - 电机每转一圈输出一个脉冲,用于绝对位置校准 4. **供电引脚** - **VCC**:电源输入(通常5V或3.3V) - **GND**:接地端 --- ### **引脚配置示例** 以引用[2]的代码为例: ```cpp // 霍尔编码器初始化(引脚2,3,4) HallSensor hall_sensor(2, 3, 4, 400); // A相=2, B相=3, Z相=4, 分辨率400PPR ``` > 此处**引脚4可能作为Z相或霍尔U相**[^2],具体需结合硬件手册确认。 --- ### **关键区别:霍尔增量 vs 普通增量** | 引脚类型 | 普通增量编码器 | 带霍尔的增量编码器 | |----------------|----------------|---------------------| | **A/B相** | ✓ | ✓ | | **Z相** | ✓ | ✓ (可选) | | **U/V/W相** | ✗ | ✓ (核心特征) | > 霍尔增量编码器**额外包含U/V/W三相输出**(直接关联电机磁极位置)[^1][^3] ---
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值