线性霍尔传感器——霍尔摇杆

线性霍尔传感器——自制霍尔摇杆

1. 线性霍尔传感器实验

霍尔传感器型号:AH3503

stm32f103的ADC信号采集 原始读取范围0 - 4096,对应电压值:0 - 3.3 V

磁铁:直径:8mm ,厚度:1.5mm

stm32读取ADC值测试代码

void adc_read(uint32_t *adc)
{
    uint8_t num = 2;    // ADC data number

		 for(uint8_t i=0;i<num;i++)
		{
				HAL_ADC_Start(&hadc1);
				HAL_ADC_PollForConversion(&hadc1,100);
				adc[i] = HAL_ADC_GetValue(&hadc1);;     // return 32bit
				HAL_Delay(1);	
				printf("%d\n",adc[i]);
		}
		HAL_ADC_Stop(&hadc1); 

}

输出数据如下:第二个数据为霍尔摇杆的!

在这里插入图片描述

1.1 实验——霍尔摇杆

在旋转角度固定55°-60°情况下,如何增大线性霍尔传感器量程范围呢?

分别在以下不同条件下实验:

接线及安装图如下:(黑:GND; 蓝:3.3V; 黄:ADC信号引脚)

1678689661489
序号条件最小值最大值量程(差值)
1单侧2片18722224352
2单侧放4片磁铁16592472813
4单侧放8片磁铁16322541909
5两侧分别4片(N-S极)135127291378
6单侧放8片磁铁(5V电压)14152077662
7单侧放4片磁铁(5V电压)14301991561

个人的大致理解:

1)磁场强度越强->测量范围越大 ;提高磁场强度方式:减小与传感器的距离(大大增加量程),增加磁铁数量

2)两侧N-S极放置比单侧放置效果好

3)尽管怎么放置也很难达到**碳膜摇杆(60°的碳膜电位器)**满量程效果

1.2 实验——平移模式下量程

在4片/8片磁铁,0-20mm的距离范围进行测量:(手动粗糙测量)

在这里插入图片描述

​ 测量结果曲线如下图:

在这里插入图片描述

比较合适距离范围:3 -11 mm 4个磁铁的量程:784; 8个磁铁:722

在Arduino上编写霍尔效应摇杆校准代码,首先你需要确保已连接一个带有霍尔传感器摇杆模块。这里是一个简单的步骤指南: 1. **设置硬件**: - 将摇杆模块的信号线连接到Arduino的数字输入引脚。通常,霍尔传感器会提供中断信号或者模拟电压变化。 2. **引入库**: - 如果你还没有,需要下载并安装适用于Arduino的第三方摇杆库,如`SimpleJoystick`或自定义库。 ```cpp #include <SimpleJoystick.h> SimpleJoystick joystick(Serial1); // 选择适当的串口(如Serial1) ``` 3. **初始化**: 初始化摇杆并在接收到信号时处理事件。 ```cpp void setup() { Serial.begin(9600); joystick.attachInterrupt(); // 连接中断服务函数 } ``` 4. **校准过程**: 校准通常是通过读取摇杆的中心位置(无偏移角度)并存储作为基准值来完成。你可以让用户手动移动摇杆到各个极端位置,并记录下对应的输入。 ```cpp void calibration() { int centerX = 0; int centerY = 0; for (int i = 0; i < 5; i++) { // 可能需要多次校准 centerX = joystick.getX(); centerY = joystick.getY(); Serial.print("Center X: "); Serial.println(centerX); delay(500); } // 存储校准值 CalibrationData.centerX = centerX; CalibrationData.centerY = centerY; } ``` 5. **校准后的使用**: 之后,在`loop()`函数中检查摇杆的位置,并应用校准数据进行修正。 ```cpp void loop() { int x = joystick.getX(); int y = joystick.getY(); if (!joystick.isCalibrated()) { calibration(); joystick.calibrate(CalibrationData); } // 使用校准后的坐标 int calibratedX = x - CalibrationData.centerX; int calibratedY = y - CalibrationData.centerY; Serial.print("Calibrated X: "); Serial.println(calibratedX); Serial.print("Calibrated Y: "); Serial.println(calibratedY); } ``` 记得在实际项目中添加错误处理和用户交互提示,以便在需要时引导用户参与校准流程。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面壁者-yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值