stm32手绕电感电磁循迹小车
时间: 2024-12-26 10:20:09 浏览: 8
### STM32 控制手绕电感进行电磁循迹的小车项目
#### 硬件连接说明
对于基于STM32的手绕电感电磁循迹小车,主要使用的硬件组件包括stm32f103c8t6微控制器、舵机、电机、L298N驱动模块、OLED显示屏以及用于检测轨迹的电磁传感器(即手绕电感)。为了实现有效的路径跟随功能,建议采用五路电感布局方案:中间一路负责三岔路口识别;横向两路专注于常规路线跟踪;而侧边倾斜布置的两条则专门处理圆形交叉口情况[^3]。
具体接线如下:
- **电源部分**
- VCC 接至电池正极
- GND 连接到公共接地端
- **信号采集电路**
- 各个电感的一端分别接入MCU的不同ADC通道引脚上,另一端共同连回GND
- ADC采样得到的数据将被用来判断当前车辆相对于黑线的位置偏差程度
- **执行机构接口**
- 左右两侧直流马达通过H桥型功率放大器件(L298N)与单片机相连,接受PWM波形指令调节转速方向
- 方向调整由伺服电动机完成,其控制脉冲同样来源于主控单元
#### 示例代码展示
下面给出一段简单的C语言程序片段来演示如何利用上述配置让智能小车沿预定轨道行驶。此段代码实现了基本的比例积分微分(PID)闭环控制系统逻辑,能够根据实际偏离量自动修正前进姿态并保持稳定运行状态。
```c
#include "stm32f1xx_hal.h"
// 定义PID参数
float Kp = 1.2, Ki = 0.5, Kd = 0.7;
volatile float error_sum = 0; // 积分项累加变量
volatile float last_error = 0; // 上次误差存储空间
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
static uint16_t adc_value[5]; // 存储五个电感读数
/* 获取各传感器AD转换结果 */
for(int i=0;i<5;i++){
__HAL_ADC_ENABLE(&hadc);
while(__HAL_ADC_GET_FLAG(&hadc, ADC_FLAG_EOC)==RESET);
adc_value[i]=__HAL_ADC_GET_VALUE(&hadc);
__HAL_ADC_DISABLE(&hadc);
if(i==4){ // 当最后一个传感器数据获取完毕后计算总和
int sum=adc_value[0]+adc_value[1]*2+adc_value[2]*4+
adc_value[3]*2+adc_value[4];
volatile float current_position=(sum/10)-2; // 计算当前位置偏移
// 实现PID运算过程...
...
// 输出速度差给左右轮子作为输入
motor_set_speed(left_motor ,base_speed-pid_output);
motor_set_speed(right_motor, base_speed+pid_output);
}
}
}
```
这段代码展示了定时中断服务函数内部的工作流程,在每次计时期满时都会触发一次新的测量周期,并据此更新电机的速度设置以维持正确的行进线路[^1]。
阅读全文