你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F103实现小车的转动

[复制链接]
STMCU-管管 发布时间:2021-6-25 13:42
STM32F103实现小车的转动
首先,我们要明白:电机转动的实质其实是对PWM波的控制输出;
5 b9 o- Y( a8 ]4 ^4 W3 m1 i; t( 库函数直接调用封装好的函数 TIM_SetCompare1()或者用CCR调节占空比)+ A. w1 T0 f5 H& ?

5 ?  a2 F( K9 e( E

% J% u3 y& d: \; o" nPWM波输出的原理图如下:
4 M$ k8 m& c7 h% H/ i
21.png
其次,我用到了L298N型号的电机驱动,于是我通过淘宝的拍立淘或者是百度进行了电机的初步了解
  w) Y! p6 b" N7 e) E/ S下面我从网上找到了一个L298N电机驱动实物图,进行详细的描述:(通过此图可以进行实物连接)) x6 e5 M1 |' R: L8 }5 K+ {" V% v
注:千万小心,不要把引脚接反了,会少了芯片。; [9 h, x. X  R5 `4 B6 c+ D% b
22.png
然后,进行代码的编写,可以引用正点原子的例程代码,在此基础上进行代码的编写。
- _) U. @5 F$ X3 t2 F" X我小车是直接控制两个电机,四个电机分成两组。让其中一侧电机的状态相同,另一个状态相同,,没有分别单独控制。
  q  @+ G( G& ?. m通过下图可以参考:IN1 IN2 IN3 IN42 R9 Y* O0 q; ]! q
1 0 1 0 实现电机的正转 小车前进
: z1 i; k5 i: m7 X9 ~0 1 0 1 实现电机的反转 小车后退
& H6 O# `' ^2 i$ h, o+ x: o1 0 0 1 小车右转
* N; ]5 _- L0 X3 z4 k4 o) L9 [0 1 1 0 小车左转. F6 V/ c! J6 J- {* H3 q! l

& G. ~9 }0 a! k) ^1 |
* B# ^) ~3 }+ r$ v
但所有的前提是要先学会时钟实验和GPIO的初始化,这个时候就要补上上次STM32学习的内容了。$ z' w$ W( h/ [) g- M3 S0 ]
先进行STM32时钟和GPIO的学习$ u% o- {2 u9 j6 _! [* M
附上电机初始化代码
! F! q' Z0 K3 i6 ~* |3 A
  1. void Motor_Init(void)7 c! F; T7 Y( O# V# m
  2. {
    6 S) h/ s$ C  H; a% u
  3.         GPIO_InitTypeDef GPIO_InitStruct;
    8 ^2 k, @( z  f% s' n0 H
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB,ENABLE);              //使能GPIOA和GPIOB0 E3 \2 K; W4 f1 [5 X4 |
  5.        
    . d, L- }7 v4 H  j) G! R+ ?. Z" k
  6.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 //推挽输出
    7 \3 B9 }& \4 ?0 z: M  Y
  7.         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 |GPIO_Pin_7 ;4 j  l$ [! A' i6 [
  8.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    6 }1 l& u& e6 q# f! N& {
  9.         GPIO_Init(GPIOA,&GPIO_InitStruct);                                         
    5 u) ^' ?- \6 [/ C% l
  10.         GPIO_ResetBits(GPIOA,GPIO_Pin_6 |GPIO_Pin_7);    //引脚先输出高电平  Q" i0 L4 K% m! b9 J
  11.        
    3 {6 X* O4 F6 p8 Z
  12.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 
    . ?5 D# R4 e) q
  13.         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 |GPIO_Pin_1 ;0 }6 J" s& A- n2 p
  14.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;0 [+ s6 I) w: Y% J# t* n
  15.         GPIO_Init(GPIOB,&GPIO_InitStruct);                                         
    5 g+ z  ?. Z( Q$ ^
  16.         GPIO_ResetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1);    //引脚输出高电平
    9 ]- L0 E, y: M; y1 I3 v7 t2 ]
复制代码
之后,还需要自己写函数实现小车的前进,后退,左转和右转
7 t5 R$ `1 q9 N* T4 C
, B4 j( N/ F# L) a

+ J3 _: Y( S7 [/ _  ~8 ]需要注意的是PWM时钟输出的arr和psc的关系:
9 O0 J/ {' |, D2 f* V% j系统时钟设置为72MHz;' D$ `  c) _) _4 l4 \( S6 ^
PWMFre=Sys/(arr+1)(psc+1)1 W. O5 I* o$ ~# k) `% D( X4 q
TIM1_PWM_Init(999,71);//分频。PWM频率=72000/(999+1)*(71+1)=1Khz
+ y7 s+ b; V0 }* b周期为:1/1khz;
6 t8 E0 `. g" ]( k4 S
6 x# i3 Z: D/ ~9 l0 L2 |8 q; x& B/ [, v

2 ~4 B& d$ D5 L/ f' i
# j7 T3 Z2 _! j$ j2 w6 l  u
+ j& W, K/ U+ P

: w5 y9 c5 e2 ^2 z' P( m: @# V

3 y4 Y9 d4 P1 t' J3 W9 c- ~, m5 l7 q
收藏 评论0 发布时间:2021-6-25 13:42

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版