You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F303RE驱动9g CS90舵机无响应问题求助

排查STM32F303RE驱动CS90舵机无动作问题

一、先查硬件(优先排除,舵机对供电/接线敏感)

  • 供电必须达标:9g舵机峰值电流能到几百mA,STM32引脚输出电流最多几十mA,直接从引脚供电会功率不足,舵机根本动不了。得给舵机单独接3.7V锂电池或者5V稳压电源,而且舵机的地必须和开发板的地连在一起,不然信号传不进去。
  • 接线别接错:舵机三根线,红/棕是电源正/负,橙/黄是PWM信号输入,确认信号端接的是TIM2对应的PWM输出引脚。
  • 单独测舵机:找个靠谱的控制器(比如Arduino)给舵机发标准50Hz PWM——高电平1ms对应0度,2ms对应180度,看舵机动不动,先排除舵机本身坏了的可能。

二、再查软件配置和代码

1. PWM参数与输出模式

你算的50Hz频率是对的,但要确认这几点:

  • PWM输出模式得设成模式1或模式2(一般用模式1:计数器小于比较值时输出高电平),引脚必须设成复用推挽输出,不能是普通GPIO输出。
  • 舵机认的高电平范围是1ms到2ms,对应你20ms的周期,CCR寄存器的值得在50到100之间((1ms/20ms)*1000=50,(2ms/20ms)*1000=100)。如果代码里给的CCR值不在这个区间,舵机不会响应。

2. 摇杆ADC映射逻辑

虽然控制LED正常,但要确认ADC值转成CCR值的映射是否正确:
比如12位ADC输出是04095,得线性转成50100,代码大概是这样:

uint16_t adc_val = HAL_ADC_GetValue(&hadc1);
uint16_t pwm_ccr = 50 + (adc_val * 50) / 4095;
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pwm_ccr);

要确保转出来的CCR值确实在50~100之间,别超范围。

3. 初始化代码检查

  • 有没有调用HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_X);?光配置定时器不启动,引脚不会输出PWM信号。
  • 确认GPIO引脚的复用功能对应TIM2的正确通道,比如PA0是TIM2_CH1,PA1是TIM2_CH2,别配错引脚复用。

三、一步步测试

  1. 先拆了舵机,用示波器或者逻辑分析仪测STM32引脚的PWM信号,确认是50Hz,高电平在1ms~2ms之间。信号正常的话,就是硬件(供电或舵机)的问题;信号不对,就查软件配置。
  2. 信号正常的话,给舵机单独供电并共地,再接PWM信号试试。
  3. 要是还不动,换个确定好的舵机测试,排除舵机本身故障。

内容的提问来源于stack exchange,提问作者امیرحسین محمد امری

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:17:32