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

STM32F103实现小车的转动

[复制链接]
STMCU-管管 发布时间:2021-6-25 13:42
STM32F103实现小车的转动
首先,我们要明白:电机转动的实质其实是对PWM波的控制输出;8 f) n  D- K! d5 z" n4 v* F; ^
( 库函数直接调用封装好的函数 TIM_SetCompare1()或者用CCR调节占空比)# u6 ?9 [2 T4 C5 z
3 Q7 ~2 i8 ~, J% f; x6 ?; ^7 z0 d
+ Y! a% H6 r  O
PWM波输出的原理图如下:2 h9 i  K8 F  m7 i% `
21.png
其次,我用到了L298N型号的电机驱动,于是我通过淘宝的拍立淘或者是百度进行了电机的初步了解8 o; \1 D! H. A. [3 b
下面我从网上找到了一个L298N电机驱动实物图,进行详细的描述:(通过此图可以进行实物连接)
) M$ P7 ^; |2 l注:千万小心,不要把引脚接反了,会少了芯片。0 Y! |+ [( P! q: o' H1 K
22.png
然后,进行代码的编写,可以引用正点原子的例程代码,在此基础上进行代码的编写。* Z' ~) L* `0 ?: M' z( `
我小车是直接控制两个电机,四个电机分成两组。让其中一侧电机的状态相同,另一个状态相同,,没有分别单独控制。- e' S9 d& R0 r
通过下图可以参考:IN1 IN2 IN3 IN4
' |7 l& m9 _& `0 t5 ^; `! F1 0 1 0 实现电机的正转 小车前进
' Y: Y' j* v" _0 1 0 1 实现电机的反转 小车后退4 ]  U* b1 s2 z6 t# ~0 z
1 0 0 1 小车右转
4 L% @# q8 w  R8 }0 1 1 0 小车左转
1 w! s5 O( K* H2 v
1 R. w8 H5 }) R2 Q
% a5 b, p* v9 `1 D3 y+ C+ x1 x; G
但所有的前提是要先学会时钟实验和GPIO的初始化,这个时候就要补上上次STM32学习的内容了。8 O, B, E* L2 _' u  f/ O; P
先进行STM32时钟和GPIO的学习0 y2 z) e& v+ g6 w: h% j3 E5 d
附上电机初始化代码' P! G3 z; R* _% f$ c! u( _
  1. void Motor_Init(void)8 I. y( |4 r- X8 v8 s
  2. {
    : R6 |4 s1 ~+ w4 n$ }8 _0 `
  3.         GPIO_InitTypeDef GPIO_InitStruct;3 X# ]+ Z8 ~& _: v6 P0 X
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB,ENABLE);              //使能GPIOA和GPIOB2 \$ P; P. [. x* q, r7 @
  5.         9 q2 b$ W; r# R, Z" Q1 |; ]: R
  6.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 //推挽输出
    + A; d  w0 f/ a" Y
  7.         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 |GPIO_Pin_7 ;
    5 u% w. J$ Q( L7 w* s
  8.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    4 p2 A6 i: ]; `9 a0 k* s2 [
  9.         GPIO_Init(GPIOA,&GPIO_InitStruct);                                         + c6 Z/ }) C9 Z5 J: r( G9 k
  10.         GPIO_ResetBits(GPIOA,GPIO_Pin_6 |GPIO_Pin_7);    //引脚先输出高电平
    ! {+ x! s/ C3 r9 B/ X
  11.        
    ; V. D+ S) M8 ]3 s
  12.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 % Z7 r' {- g7 D8 P; }$ [
  13.         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 |GPIO_Pin_1 ;
    ; V# H1 ~* t6 B' h
  14.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    8 o1 `$ @- n0 g( g& D6 ~, k
  15.         GPIO_Init(GPIOB,&GPIO_InitStruct);                                         
    # P: d2 m5 c/ L  _5 M
  16.         GPIO_ResetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1);    //引脚输出高电平
    / i, A  `' O5 @8 L1 {
复制代码
之后,还需要自己写函数实现小车的前进,后退,左转和右转' z# J2 A. g) s& h2 W

/ [2 H. J: @# D2 v. M0 u* A

9 n2 `$ i& N) H需要注意的是PWM时钟输出的arr和psc的关系:
- j6 g6 V' J9 R系统时钟设置为72MHz;& _8 E6 W) f, ?) v' G/ J9 _! D9 ?: L* `
PWMFre=Sys/(arr+1)(psc+1)" p0 t# [1 u; l9 P
TIM1_PWM_Init(999,71);//分频。PWM频率=72000/(999+1)*(71+1)=1Khz
# e$ `) U; i' ^3 L% @1 k周期为:1/1khz;8 k& l& k, H5 Q2 H* c6 D
) _/ R& l/ u5 d$ {

* T6 p2 H/ P5 a+ R8 Y

9 T& Y8 A" q- v6 O$ o
  @' ~1 ~* W- c5 E& d
+ s; z/ U' H0 j) \$ U
. s  ^9 c5 \8 w

  E7 I/ H% u$ ~* ]( I' [- D2 `2 ]9 D- x. {0 K" |3 o, y
收藏 评论0 发布时间:2021-6-25 13:42

举报

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