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

【经验分享】STM32F0单片机 PWM + ADC 控制有刷电机

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
有刷电机驱动电路$ {1 ^+ f7 F* m9 B+ O' x
有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。( Y) p7 J3 {9 _

( ?$ [7 `3 o) q& O8 {9 i在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。# k( i/ v9 d5 x7 A. I
7 ]1 J9 {3 ]5 }: |
20201229152425486.png
  j5 W% ]5 _( z" e( ~1 _, H* U

8 k1 I6 V* p" L, _" J" r下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。
- D7 z. H6 c, H4 F' q! P/ V: ]& f
4 U8 h7 \7 a9 v( b# y
20201229152425562.png

! a8 E% O. b4 Q! I8 Q: T, \: A
# |* t( c0 w% R; ]* l/ c- ^
! W* i" L1 `! V
20201229152425807.png
/ ~7 k. r) |9 \' F  `
8 ?! Y/ g& _& J' Q& l

6 I; z( n4 d/ h资料来源于 IOR 公司数据手册# i+ G0 d5 z$ B2 t* _; R: I7 |
$ r- f$ R& d* e9 H2 ~4 m1 e
我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。
' t0 z3 U; v2 w7 M  w8 u( Q2 m- _# Y0 Y0 |% d: A
20201229152425648.png

( k! w6 s2 X7 `" y6 ]& n! T) V  ?2 Y! _  ^5 a
1.TIM模块
, e! F6 p9 L. q& WTIM 模块最重要的三个寄存器是:( N* E# n* |6 a7 w% a- C
$ T. X' @9 X0 s3 O0 Z
Counter Register (TIMx_CNT) 计数寄存器
3 k- l( ]* P7 B
3 A4 ^% _% Y2 n* LAuto-Reload Register (TIMx_ARR) 重置寄存器
* ]( @0 ^5 y: C% y: w6 C: c
- V4 u* N1 B* \Capture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器
* h5 P: V) z: U
8 B. t* q  A7 `* R7 L0 @! V0 b* H
20201229152425708.png

- s2 b# y$ ?- \: C9 N) _% I6 H# s0 U9 j! u: v0 E9 e' l$ f
Counter 在时钟的驱动下计数  S5 D$ |& L8 @& W1 l  a  B5 e3 {

! X0 d; j  Z+ Y* I! j7 H- F) wAuto-Reload 设定计数的最大限制值6 S% u' W- b2 D. A# h- t' p, p
( ^* x% m6 g; M1 U' Z+ ]+ U
Capture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件( T: }3 c- c" z7 m2 W! J7 H
" n& s4 Z( r# s0 `3 A) g) Z% w8 `8 U
在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。
# P6 W/ q* D* J  v4 V4 \6 ]+ H" w. U, [% X
有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。: p+ k- _9 U7 g' u2 J: Z
+ Q' L2 Y: a( S. C( b: r0 h
所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。
! E, T( j( N, O! e7 S- {" t. C- W
! M+ f: x( K) I0 t' L2.代码  x! F( q7 x+ p8 _% x% c+ r

7 O7 \  S! `+ C* I4 ?我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。
9 J! |9 y4 M3 P* G  D( H& Y  B% S5 ~$ m. A8 \- Q* f, f' \
STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx
: R4 H# S2 S  I% i
6 V6 x) z" T/ L5 T! F9 |- L% P这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。
" Q8 d* k! }2 U: p# d: L5 v: s; S+ _! [3 x: F
然后把ADC采样的代码添加进来:
: G! p: `  Y* H
! H$ Z4 m3 b' E; r8 K8 sStep 1:
0 {, |7 X4 z/ A1 Q1 M& d
* w; m0 z: T( s- t" u, Wstm32f0xx_hal_conf.h
, v9 [% z/ L9 A4 s3 R, c. d, e+ S) h* J. u7 b
#define HAL_ADC_MODULE_ENABLED! l5 T$ {8 G" C9 j2 g3 R  E: Y( @
# ]/ `8 m, X1 N6 [- N8 O1 c' X
Step 2:
9 e& C2 I% Y1 C5 o. k5 j' W0 }5 m3 n+ l6 L7 I' A
main.h
  G! k# F4 Z% O2 b7 L& n$ z
. }. e# _0 s0 Q; a! O4 I添加ADC相关宏定义: S1 z# K) p2 n# E# D

: o( o( I3 G5 I! I5 E2 }) D! R
20201229152425927.png
7 `8 Z* P% T' G5 y

, ^0 N7 ~8 E& MStep 3:
, U) i" v9 v/ X, a6 b+ p1 A) a, g/ M- p
stm32f0xx_hal_msp.c. E& w/ A4 Q# B& E6 n1 k" V- X
8 Q/ ^6 h. S- H" x$ H, U
添加ADC使用的引脚的初始化代码' h- X: a$ `+ u% i% p. f/ T3 }, j3 x

5 s, a& g" Q9 i1 {! o
20201229152425911.png
5 [: c' C7 X, z  P# W
& T3 G6 L. ^) K% r
Step 4:6 X; a& F+ y* j$ N6 h# ^* S# Z
9 r8 Q# H# f/ f% P2 ?
把ADC的驱动文件添加进工程,在主程序初始化ADC。
9 m' k# c# e5 Q' V( {7 O+ M! Y# N2 C1 E+ f; p  C
20201229152426192.png

' h" m: l9 x7 T5 _" }! k
8 v6 e8 K9 ?' N& v; b6 r  U% WStep 5:
1 o! A+ x3 N; {- [5 n; j1 M" |  P4 y# `, s, ?
读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。* Y& O7 F2 h5 A

6 B! m- j2 z1 \/ F$ {. H
20201229152426108.png
3 n! Q% j! W" p! }' Q

' h2 o8 b7 f, O% ^$ |) a  I7 B& E1 E

  E  @6 y0 Y  X' L! q如果需要参考代码,可以在 Github 搜索 TopSemic 找到。4 A9 ^: Q! W; W% p6 t  w1 n
, w$ w$ s* ?# z4 N( [$ U

& j$ l0 ~; l, |1 R; _
赞 收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答

所属标签

相似技术帖

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