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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
有刷电机驱动电路
* l# e, X9 ~0 W3 p( q% m4 R6 A有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。
) z4 e3 m7 r! w& J$ j; y
7 l! e7 X: \' K- @2 Y在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。
: t& v) n: K& X- k1 x, Z: Y
2 v: t1 b, G2 i& ~0 W  p
20201229152425486.png
! K5 Y  n* P6 l4 j
- ]* y( C6 m% y, `4 V+ O  s
下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。8 P( ?) k! n( D" `" }, F0 u' A& M

& m( v  M7 I5 ~) e; J- l6 l
20201229152425562.png
2 u* r4 o2 ~! i! r/ Q$ s, p9 _% Z

# e' r( Z. C% M2 f/ R6 }' z& d5 y0 d
20201229152425807.png
$ ^% t" C5 l% D; p: W  t- i
" N/ x/ u( t# @2 a4 U

. _5 o5 d9 `/ i4 M9 s3 p资料来源于 IOR 公司数据手册
* F: P6 K! A4 p7 f
& Z$ c$ c+ L2 S6 p" i, q5 |我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。
' W- d9 c5 R, Q/ h" g; ]; _. ~8 {2 @: D4 M
20201229152425648.png

) b5 U/ ?2 r' k7 B) e7 p+ R7 j- G5 h- N: v' S1 W
1.TIM模块2 s2 s: C+ Z- d% j
TIM 模块最重要的三个寄存器是:
0 _) p0 `( n) P# W. t; H/ i+ H4 Z0 b
Counter Register (TIMx_CNT) 计数寄存器
2 @" V/ ~/ x3 Z- ]+ Y6 o
6 g" `, }+ ]: k5 k  O4 x* CAuto-Reload Register (TIMx_ARR) 重置寄存器
1 g% p) A' E& `$ u, C4 n  ?6 H5 |; x9 [+ p5 n0 ^% A1 ^8 ~) Y
Capture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器
9 E: k  o7 m& a% ?3 b% `8 a$ l1 A" b
20201229152425708.png
5 p7 v+ s$ |4 q, g$ r  H5 G  E
+ K. R8 X% H  e* r6 ]; m/ l
Counter 在时钟的驱动下计数3 r* n3 P% \* Q/ V0 T0 V

! X4 Z# {' U# y( X* O# zAuto-Reload 设定计数的最大限制值* d' z0 I) t  o( X
5 b9 m( b  z: f
Capture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件
5 J* L9 C$ b7 I* q7 w$ F% m: P0 Z# g
5 l8 ?$ a& Y% A+ r  q0 Y9 l在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。  M' o$ ?2 S6 ~7 N+ s" d1 ~

* N$ C% Q- t. I( g1 ]有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。: {# P% U( c  L

* Z6 D' P( r" r( ]4 w3 K所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。7 L: |3 `9 _+ C1 K

; E& h4 x- ]: B" L$ h2.代码
, |  }) [$ I6 @0 q3 w& E+ W  x$ S! z" _. l5 d
我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。
  k: I: M& J. N3 Y6 Q! [3 C" C4 n* U( l9 e% w- t
STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx9 _3 B% Q. \8 \3 [0 o+ u9 p6 b0 g
7 e  z1 Q2 Q4 f9 q  u; A+ C0 P
这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。! Z# g4 U- o; F6 y* w* _& @+ I

% N: Y; H: g4 B' F  M; q+ |# _  N然后把ADC采样的代码添加进来:
0 Y  Z2 J' E# U
& I  r, }+ t' W1 JStep 1:! T- N+ C/ y1 d
- d3 Y' C& i: R3 I8 n3 Z
stm32f0xx_hal_conf.h
4 G/ L, B  ]$ B+ P& Q! F/ B/ ]- o1 [* x
#define HAL_ADC_MODULE_ENABLED, y& H$ o  u' |+ N

$ x3 E) R+ R3 h- F2 MStep 2:* {4 e, d( e4 l4 Y7 \) S
3 i# t$ M# G, W/ Y7 L
main.h
. K( S- o9 [* s  V" p6 @0 U6 `0 E. W8 [9 ~0 L0 R, `( Z0 ?2 S
添加ADC相关宏定义: ^+ |+ j9 g% P5 {

: \' O6 F) }8 H& r  f
20201229152425927.png

2 E9 b+ F" X( z% ?8 h. D" \) t; m: S" C' p% x, B& i+ D5 c
Step 3:
  \! s2 m! ^: |
- V! w4 b) x: Bstm32f0xx_hal_msp.c
9 F, i2 ?  m6 t( f! S; L# Q& v, N6 f
添加ADC使用的引脚的初始化代码: M/ K5 H- ~% e; b
) L, C9 m3 F, U# x7 v1 L2 k9 }
20201229152425911.png
. }! F! p, l1 I5 M! f  {
- b8 W" |; W5 u) {; o/ V$ P9 q
Step 4:
' r; Q% n5 t6 b( j" w4 K: Z  u0 q9 t% X3 H+ B: S- l" O- N
把ADC的驱动文件添加进工程,在主程序初始化ADC。+ S/ N. A2 j  i* \6 u3 O% L( r
: k" z. y  x, M
20201229152426192.png
! |; H) V% ?& P6 j0 W
/ }( o/ a4 b7 t" ~7 Z0 d; _  d; ^  N
Step 5:
# v) C! C8 `, L/ e% F5 W
: _) L" ]+ t: y3 \" y读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。6 U0 _3 l& C  }5 J+ Z! Y& F

3 c' i. f6 B; w
20201229152426108.png
/ ~* z( a* _$ l' I" j4 ]% B
7 a; l% ]( D1 c2 h  J8 q: X
5 \+ A! y; X$ W4 ?) v  P
7 d* {0 x+ i# w; d) f% ^9 F( M
如果需要参考代码,可以在 Github 搜索 TopSemic 找到。. w2 K4 M# s/ S' k7 r% K

" _3 o+ N6 l/ ~7 Y5 o$ T5 K; p& A2 ^8 A* N+ Z7 F
收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版