从零开始:用STM32F103C8T6和SG90舵机DIY一个会走路的四足机器人(附完整代码)

张开发
2026/4/10 14:53:04 15 分钟阅读

分享文章

从零开始:用STM32F103C8T6和SG90舵机DIY一个会走路的四足机器人(附完整代码)
从零构建四足机器人STM32F103C8T6与SG90舵机实战指南1. 项目概述与硬件选型四足机器人作为移动机器人的经典形态其运动灵活性和地形适应性远超轮式结构。对于电子爱好者而言用STM32F103C8T6这种蓝色药丸开发板搭配经济实惠的SG90舵机实现基础行走功能是入门机器人控制的绝佳实践。不同于轮式机器人简单的电机控制四足系统需要协调多个关节的时序动作这对PWM信号生成和电源管理都提出了更高要求。核心硬件清单主控STM32F103C8T6最小系统板72MHz主频64KB Flash执行器4个SG90舵机180°旋转范围4.8V供电电源2节18650锂电池7.4V配合AMS1117-5.0稳压模块结构件3D打印或激光切割的腿部机构建议PLA材料辅助工具USB-TTL调试器、杜邦线若干关键提示SG90舵机空载电流约100mA但在负载状态下可能达到500mA务必确保电源能提供至少2A的持续电流输出。2. 硬件系统搭建2.1 机械结构设计原则四足机器人的机械结构直接影响运动效率和稳定性。DIY时需注意重心分布电池等重物应尽量靠近几何中心腿部长度建议10-15cm过长会增加舵机负载关节自由度单腿至少1个自由度上下摆动足端设计增加橡胶垫提升摩擦力典型结构参数示例部件规格备注机身尺寸12x12cm方形框架腿长12cm铰链连接总重量≤300g含电池2.2 电路连接方案STM32与舵机的典型连接方式// PB6(TIM4-CH1) - 舵机1信号线 // PB7(TIM4-CH2) - 舵机2信号线 // PB8(TIM4-CH3) - 舵机3信号线 // PB9(TIM4-CH4) - 舵机4信号线 // VCC(5V) - 舵机电源正极 // GND - 舵机电源负极电源管理建议方案[18650电池组] - [DC-DC降压模块] - [5V稳压输出] - [3.3V LDO] - STM32供电3. 软件系统实现3.1 PWM信号生成配置使用TIM4产生4路PWM控制信号void PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStruct; TIM_TimeBaseInitTypeDef TIM_InitStruct; TIM_OCInitTypeDef TIM_OCInitStruct; // 时钟使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIO配置 GPIO_InitStruct.GPIO_Pin GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStruct.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStruct.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_InitStruct); // 定时器基础配置 TIM_InitStruct.TIM_Period 20000 - 1; // 20ms周期 TIM_InitStruct.TIM_Prescaler 72 - 1; // 1MHz计数频率 TIM_InitStruct.TIM_ClockDivision TIM_CKD_DIV1; TIM_InitStruct.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, TIM_InitStruct); // PWM输出配置 TIM_OCInitStruct.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStruct.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStruct.TIM_OCPolarity TIM_OCPolarity_High; TIM_OCInitStruct.TIM_Pulse 1500; // 初始1.5ms脉宽 TIM_OC1Init(TIM4, TIM_OCInitStruct); TIM_OC2Init(TIM4, TIM_OCInitStruct); TIM_OC3Init(TIM4, TIM_OCInitStruct); TIM_OC4Init(TIM4, TIM_OCInitStruct); TIM_Cmd(TIM4, ENABLE); }3.2 步态算法实现四足机器人的三角步态Trot Gait是最稳定的行走模式之一。其特点是对角线两腿同步运动// 步态相位定义 typedef enum { PHASE_1, // 腿1、3抬起 PHASE_2, // 腿1、3下落腿2、4抬起 PHASE_3, // 腿2、4下落 PHASE_4 // 所有腿支撑 } GaitPhase; void trotGaitControl(GaitPhase phase) { switch(phase) { case PHASE_1: setServoAngle(0, 45); // 腿1抬起 setServoAngle(2, 45); // 腿3抬起 setServoAngle(1, 0); // 腿2支撑 setServoAngle(3, 0); // 腿4支撑 break; case PHASE_2: setServoAngle(0, 0); setServoAngle(2, 0); setServoAngle(1, 45); setServoAngle(3, 45); break; case PHASE_3: setServoAngle(1, 0); setServoAngle(3, 0); break; case PHASE_4: // 所有腿处于支撑状态 setServoAngle(0, 0); setServoAngle(1, 0); setServoAngle(2, 0); setServoAngle(3, 0); break; } }4. 调试与优化技巧4.1 常见问题解决方案舵机抖动问题检查电源电压是否稳定建议用示波器观察确保PWM信号周期严格为20ms在舵机电源端并联1000μF电容运动不协调校准每个舵机的中立点调整机械结构的装配间隙降低步态切换速度4.2 性能优化方向动态调整步长void adjustStrideLength(uint8_t percent) { // percent: 0-100% 步长比例 stride_amplitude MAX_STRIDE * percent / 100; }能耗优化策略在静止状态关闭未使用的舵机电源采用PWM软启动减少冲击电流运动平滑处理void smoothMove(uint8_t servo_id, float target_angle) { float current getCurrentAngle(servo_id); for(float acurrent; a!target; astep) { setServoAngle(servo_id, a); delay_ms(5); } }5. 进阶功能扩展5.1 无线遥控集成通过HC-05蓝牙模块添加手机控制功能void Bluetooth_Control(void) { if(USART_ReceiveData() F) { // 前进指令 startTrotGait(FORWARD); } else if(USART_ReceiveData() S) { // 停止指令 stopAllServos(); } }5.2 姿态传感器应用MPU6050姿态检测实现自适应平衡传感器数据控制响应参数调整前倾 10°加速后退步频20%后倾 10°加速前进步频20%侧倾 15°停止运动触发保护5.3 视觉导航方案配合OpenMV实现简单路径识别# OpenMV简单颜色追踪示例 import sensor, image, time sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time 2000) while(True): img sensor.snapshot() blobs img.find_blobs([(0, 100, -50, 50, -50, 50)]) # 红色物体检测 if blobs: largest max(blobs, keylambda b: b.pixels()) img.draw_rectangle(largest.rect())6. 项目资源与后续学习完整工程文件应包含STM32工程Keil/IAR项目3D打印模型STL格式电路原理图PDF格式调试记录文档推荐学习路径《STM32库开发实战指南》ROS机器人操作系统基础现代控制理论在机器人中的应用在完成基础行走功能后可以考虑添加超声波避障、语音交互等模块逐步提升机器人的智能化水平。实际开发中最耗时的往往是机械结构的调试建议先用纸板制作原型验证运动方案再投入精加工。

更多文章