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,别配错引脚复用。
三、一步步测试
- 先拆了舵机,用示波器或者逻辑分析仪测STM32引脚的PWM信号,确认是50Hz,高电平在1ms~2ms之间。信号正常的话,就是硬件(供电或舵机)的问题;信号不对,就查软件配置。
- 信号正常的话,给舵机单独供电并共地,再接PWM信号试试。
- 要是还不动,换个确定好的舵机测试,排除舵机本身故障。
内容的提问来源于stack exchange,提问作者امیرحسین محمد امری
相关产品推荐
相关产品推荐

