STMCU小助手
发布时间:2022-11-25 14:06
|
MG90S舵机 如图所示,舵机有三根线,红色接5V正极,黑色接地;黄色为信号线,接收PWM信号* K5 E7 j- e4 E* g; }0 N9 T 8 b* ^- S+ K; K& `0 G" l
8 I( e' ~1 C/ c: Y4 Y 实物图 O- |$ H* N5 e- \
: Y# z$ |5 n6 Z( [% v" H | 输出PWM控制舵机4 O, ~( k5 }8 I( {& b STM32控制舵机,总的来说是向舵机信号线发送周期为20ms的PWM(Pulse Width Modulation 脉冲宽度调制)信号来控制舵机转角,PWM脉冲的占空比决定了舵机的转角位置,对应关系如下图; : X4 R& y9 }6 B L. q
8 ]" [! V% @3 Y) g; O" Q) ~ STM32靠定时器TIM实现PWM信号的输出,STM32有多个定时器,分为通用定时器和高级定时器,每个通用定时器都可以输出4路PWM,本文采用TM2_CH4,及定时器2的第4路PWM;对应STM32F103C8T6上的PB11引脚; 创建工程输出PWM6 l+ _! m1 W( Q4 V9 }2 V ? 本文使用STM32CubeMX创建工程,更加简单高效,即便对单片机不熟悉也可操作成功;8 y' x; c2 t0 N: K- e% K- S. m 9 W' z. v3 C" Q: z 一、打开STM32CubeMX,新建一个工程,搜索并选择STM32F103C8,然后start project;
7 q* [4 Y3 g) n4 S 二、进行基本设置,配置RCC、SYS、HCLK % S ~1 W8 m% ?' R$ K RCC -> 设置高速外部时钟HSE 选择外部时钟源, r7 L+ P$ u# C- H, \- B SYS -> 选择Debug方式 serial wire W% j. n8 J+ H2 }7 [; {0 @9 F HCLK -> 设置为72MHZ' d$ \. l+ @+ G' w/ a 0 B( P6 K- j) @, b. R
) p" I0 ^, |8 X; b8 L6 w& Y% M
1 g% }- E4 p, C! J 三、设置定时器4 W% O; k# @5 y, s1 f: j 1.选择TIM2 2.选择内部时钟源 3.设置Channel4为PWM模式/ F# K) t; b U& K4 j- L( ^4 B$ L 4.右侧对应管脚自动设置为复用模式7 L) ]% R: Y5 H5 W- W' t! u/ ~8 x
4 D% ]' k7 s, P/ O 设置定时器参数/ b- ^' {5 X5 d6 }1 B 控制舵机我们需要设置PWM输出一个周期时间为20ms的信号,定时器时钟为72Mhz 1.预分频Prescaler设置为720-1,则单周期为72M/(Prescaler + 1) = 100Khz(0.01ms)* U- S; ?. q) S+ M* a0 y 2.以20ms为周期,则Counter Period为20ms/0.01ms - 1 = 1999, E) C9 H0 c6 e, A: z; | 3.此处可设定默认脉冲宽度为0.5ms,及0.5/20*2000 = 50 8 X; I# m( ?$ G5 T# U
2 F4 F) C3 Z$ {6 f 四、接下来设置输出格式 1.添加工程名PWM 2.修改IDE为MDK-ARM V5 3.在Code Genetator中设置包含库与工程格式 / H0 c4 A( A+ a( |+ y5 u7 R
1 U" {6 |* @, m: x5 ` 至此STM32CubeMX已设置完成,接下来GENERATE CODE,并打开文件;& F, }+ I. U) U 在main函数中启动定时器,并输出一定的脉冲的PWM信号即可驱动舵机; 五、修改代码 在main.c文件相应位置处添加如下代码 1.启动PWM输出 2.输出PWM信号; \2 Y1 {' h, B! x6 n+ n5 `# z" r' F , E9 z& ^" K |$ u' ~/ Z
添加完以上代码之后,编译,然后通过JLink将程序LOAD到STM32F103C8T6,将舵机信号线连接PB11(TIM2_CHANNEL4)口,并接上电源,舵机即可转动到指定角度;由以上定时器设定可知,compareValue值50、150、250 对应 0.5ms、1.5ms、2.5ms 对应 0°、90°、180°;若想让舵机连续转动,在50~250内循环改变compareValue值即可;' `0 `$ ~+ D9 o3 j- g* W1 \" a 六、接线! I: G, F! \/ C# R7 G- d 开始时用单片机的5V输出给舵机供电,舵机哒哒哒响,但是不转,怀疑是供电不给力,单独供电后驱动成功;0 F0 _2 _/ v5 ~ {/ N* F 1.JIink连接电脑和单片机,下载程序到单片机并给单片机供电+ c8 H- X* k4 P& _5 s- R 2.舵机黄色信号线接STM32F103C8T6引脚PB11,接收PWM信号 3.舵机红色电源线接稳压板5V输出正极,舵机黑色地线需与单片机地相连6 z& U* q+ i# }$ p; f
8 L( r2 f" v; x6 q9 F 调试0 }, t; X8 U$ d0 V$ Y- T: N/ n3 F 实操中可能会出现各种各样的问题,以下有几种调试方法% I3 } v+ I+ M) V7 G2 P0 S 一、舵机测试$ a8 j: C8 c( k- c/ [5 [0 R . L, W) K( E ^2 g9 W 调试模块一端接电,一段接舵机,手动模式下,舵机会跟着旋钮同步旋转,可以用来测试舵机是否健康;. K5 a M& F6 M. [
二、串口调试助手
% R$ \2 c0 q3 ?+ X8 v) u4 B# D 可下载串口调试助手,用ttl转USB模块连接电脑,在特定位置进行打印输出,检查程序是否按预设运行! c5 T/ Y; m8 s ———————————————— 版权声明:DDHEJKS . g' p7 D, {* M/ w/ A |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版