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

STM32F103实现小车的转动

[复制链接]
STMCU-管管 发布时间:2021-6-25 13:42
STM32F103实现小车的转动
首先,我们要明白:电机转动的实质其实是对PWM波的控制输出;9 {% @! |# K8 n  R4 l
( 库函数直接调用封装好的函数 TIM_SetCompare1()或者用CCR调节占空比)& I# V9 T' N6 E: G  G2 b

& c- l2 y6 y7 q2 U" O  s
) f- C$ h% ?. Z5 |
PWM波输出的原理图如下:2 M  t  X/ L; b9 m. ]3 z9 t1 ]
21.png
其次,我用到了L298N型号的电机驱动,于是我通过淘宝的拍立淘或者是百度进行了电机的初步了解
5 v* g( k- G' l- n; l) L下面我从网上找到了一个L298N电机驱动实物图,进行详细的描述:(通过此图可以进行实物连接). u) M, H  O& O8 c' C  D1 c
注:千万小心,不要把引脚接反了,会少了芯片。
8 Y# C: G; Y' N8 L- z  M
22.png
然后,进行代码的编写,可以引用正点原子的例程代码,在此基础上进行代码的编写。
$ Z  }( I1 @* d& h4 {0 l$ j我小车是直接控制两个电机,四个电机分成两组。让其中一侧电机的状态相同,另一个状态相同,,没有分别单独控制。' ]4 o6 }4 j: `/ O, I
通过下图可以参考:IN1 IN2 IN3 IN4
! S; a$ F5 [0 K+ K; A# E1 0 1 0 实现电机的正转 小车前进
- m! ~. ~' X# A( {0 1 0 1 实现电机的反转 小车后退+ T& r0 L9 E6 W4 V
1 0 0 1 小车右转
) L# `, I; {) f% y( h0 1 1 0 小车左转! q8 x4 g9 L+ l
& v/ R  Q& ?8 _4 P
+ F4 d' g! ^2 y% s/ i
但所有的前提是要先学会时钟实验和GPIO的初始化,这个时候就要补上上次STM32学习的内容了。4 I* _/ M, Q1 i5 F( b! S
先进行STM32时钟和GPIO的学习0 s: n+ t$ C5 r) `6 o9 l
附上电机初始化代码
0 W1 ?9 x" J0 n5 |! D: l
  1. void Motor_Init(void)) ~6 W2 C; l% @
  2. {
    $ d0 u) S  G) y* Z
  3.         GPIO_InitTypeDef GPIO_InitStruct;/ {# V1 B2 }+ g0 k" E! Q$ T
  4.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB,ENABLE);              //使能GPIOA和GPIOB
    5 |& _+ l( g9 s9 p  C; A3 t
  5.        
    4 g- ?, J6 W" l) Q/ T0 b
  6.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 //推挽输出3 P8 Z. ]) A: u
  7.         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 |GPIO_Pin_7 ;
    1 `: h" b" J! }5 `8 o8 T
  8.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;& n( d. F6 t& s7 u$ m# `5 F
  9.         GPIO_Init(GPIOA,&GPIO_InitStruct);                                         1 s: [( j9 T6 W9 y5 `' B
  10.         GPIO_ResetBits(GPIOA,GPIO_Pin_6 |GPIO_Pin_7);    //引脚先输出高电平! ]* L+ a" h; K/ n+ X; r) a
  11.         $ `( w3 v! P) y/ l( t& g" B; W
  12.         GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP;                                 
    % w; N! o+ [# H. d0 M
  13.         GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0 |GPIO_Pin_1 ;
    6 }8 V# d' r2 @2 p5 ]/ g
  14.         GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    $ g9 J2 [  E$ Q8 s) v' N7 a) p3 @) K
  15.         GPIO_Init(GPIOB,&GPIO_InitStruct);                                         
    . N% O# E6 l. b3 S7 S
  16.         GPIO_ResetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1);    //引脚输出高电平
    7 c$ F$ D3 @* b& [4 K. N
复制代码
之后,还需要自己写函数实现小车的前进,后退,左转和右转$ e5 O$ V$ g, g3 N" C5 T

. `. u6 G4 `8 y7 s
! ?' T$ u# a! B, Y' Y$ |! ^$ l3 D
需要注意的是PWM时钟输出的arr和psc的关系:; M$ m. y0 G1 ?0 S. L
系统时钟设置为72MHz;
* k( F* v3 }* n6 e) p6 P. A, cPWMFre=Sys/(arr+1)(psc+1)
; ?, w4 U* X7 G, z7 c, bTIM1_PWM_Init(999,71);//分频。PWM频率=72000/(999+1)*(71+1)=1Khz4 l0 D- N+ {- V
周期为:1/1khz;
' t/ P1 A' a: f8 s. M# g3 Q' k
7 ~7 U1 ?' g4 d( A3 z
" |/ S* k4 Y# Y
" {' B( Q% F0 E4 m. Q: \( o2 z

( t% Z  M9 b6 R. a4 p+ \( }' b) q) [
6 i* [. q5 n  Z; M3 z* M2 E* p

4 v4 h4 K6 ~% z8 h7 z
3 ?- O( q3 h- H+ i2 w3 p- Y  ]

( A# @: y- h) ^9 |( z& f- {, z
赞 收藏 评论0 发布时间:2021-6-25 13:42

举报

0个回答

所属标签

相似技术帖

官网相关资源

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