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

STM32F103实现小车的转动

[复制链接]
STMCU-管管 发布时间:2021-6-25 13:42
STM32F103实现小车的转动
首先,我们要明白:电机转动的实质其实是对PWM波的控制输出;
! L0 q! q2 o8 E6 c. I( 库函数直接调用封装好的函数 TIM_SetCompare1()或者用CCR调节占空比)# s" t: }2 W( @" Y; @0 V

, ?' \0 V: G) k2 F; p

; d) G% T- E2 b2 ^% g# BPWM波输出的原理图如下:
6 j2 \. B' ]6 p, G8 \
21.png
其次,我用到了L298N型号的电机驱动,于是我通过淘宝的拍立淘或者是百度进行了电机的初步了解8 w8 |- {6 T) H* Y8 j4 z3 z
下面我从网上找到了一个L298N电机驱动实物图,进行详细的描述:(通过此图可以进行实物连接)
( k! X4 U6 W, `注:千万小心,不要把引脚接反了,会少了芯片。
5 t/ ]9 V* R" v0 _( v
22.png
然后,进行代码的编写,可以引用正点原子的例程代码,在此基础上进行代码的编写。' ~2 e9 ~7 c& O' H
我小车是直接控制两个电机,四个电机分成两组。让其中一侧电机的状态相同,另一个状态相同,,没有分别单独控制。
' L1 f; ]+ D$ y8 J1 _+ |0 k1 K通过下图可以参考:IN1 IN2 IN3 IN4
- `6 Q$ r' u& Z% f: y' `1 0 1 0 实现电机的正转 小车前进) E' J7 h0 y: \0 \$ v; r2 U. b
0 1 0 1 实现电机的反转 小车后退
1 n3 `- `$ n, K6 K# T% t4 I) ^- m1 0 0 1 小车右转
7 [  M2 R( i1 J- t! j* g0 1 1 0 小车左转
* m0 e6 e4 ]0 y: F
( X7 [" [$ s& f( ^0 q8 \* P
: }2 Q# T+ w& Q& o- V
但所有的前提是要先学会时钟实验和GPIO的初始化,这个时候就要补上上次STM32学习的内容了。% _& w. c& R8 d5 c" e# Q! M8 _3 O- Y
先进行STM32时钟和GPIO的学习
  [/ I+ m  x1 R) j附上电机初始化代码# f6 v2 A/ n* D+ ~
  1. void Motor_Init(void)
    " R& @$ _2 L6 X4 u5 F
  2. {
    & t2 T" @  ^# r; x5 }- E
  3.         GPIO_InitTypeDef GPIO_InitStruct;) q1 |. O5 ]+ a; w# p
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB,ENABLE);              //使能GPIOA和GPIOB7 e/ a8 u9 P! t& p. v  m! T  j1 \
  5.        
    ; R0 c/ O  O' n, }6 n4 D( a1 B
  6.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 //推挽输出$ e3 m; h4 L/ d3 t& G( ]
  7.         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 |GPIO_Pin_7 ;7 h4 E# `  L6 \9 g5 \3 K
  8.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;$ D, ?- X! D7 O% U; u7 c) _
  9.         GPIO_Init(GPIOA,&GPIO_InitStruct);                                         9 N0 w5 K0 {2 q! c/ x
  10.         GPIO_ResetBits(GPIOA,GPIO_Pin_6 |GPIO_Pin_7);    //引脚先输出高电平$ R8 L/ |5 W- ?5 K) R
  11.         . g- q1 b, S4 F, S5 r
  12.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 2 ?, X" D( @, N
  13.         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 |GPIO_Pin_1 ;
    - f) j4 {/ q4 y$ h
  14.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;# _+ ~5 i6 c) H  i6 Y! M" C
  15.         GPIO_Init(GPIOB,&GPIO_InitStruct);                                         
    # v2 ~# w0 q" E& X/ M; N
  16.         GPIO_ResetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1);    //引脚输出高电平
    # Z5 ?1 q6 m- W4 c0 H) @
复制代码
之后,还需要自己写函数实现小车的前进,后退,左转和右转
  J$ Q6 e4 Q3 K+ j: O) R  B8 p: j7 \- _" A! G8 p

; m  r  {& {# R7 ^& g' I需要注意的是PWM时钟输出的arr和psc的关系:
7 I9 [# N* [+ x* _& h+ f7 ~7 o系统时钟设置为72MHz;
1 d2 K6 A* a5 O! p* bPWMFre=Sys/(arr+1)(psc+1)5 \7 F" x5 ?0 i- k7 d
TIM1_PWM_Init(999,71);//分频。PWM频率=72000/(999+1)*(71+1)=1Khz" h- _; }* k" ?% e  t/ {
周期为:1/1khz;
6 x6 A' `8 c( Y  y1 I, O" f
: V3 k& t% S6 y4 i" e
* j- _- D6 ^- y% ~/ l5 U5 o

, J6 {1 }, b0 E
( U3 j( d. B1 b( C0 K8 s
+ P4 T$ ?5 |* [

- r! E% c, C- q( u
9 \$ G  l7 I, O

3 \# L- F! x: T) D8 A/ T
赞 收藏 评论0 发布时间:2021-6-25 13:42

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版