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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
有刷电机驱动电路
0 n$ w6 v4 W! w2 `3 `有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。( y# F  V: C) }, P' |9 ]
- ~1 {. W7 M7 d6 E
在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。2 K* _* `; f1 n
& j1 ?. p$ i2 K3 H
20201229152425486.png
, ]! Q5 q" B9 e( Q

  X$ c% \5 G; S6 Z3 Z下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。3 x# y+ f3 Y1 L

- C. s. [' {- r
20201229152425562.png
/ p% b# u3 z% |
! J. ~* ^% C0 m% K

6 q3 ^( k( i  K$ T) D/ _
20201229152425807.png
/ G7 X$ K+ O% R
- _; V/ D) ^; [* I
& n; ]7 ?) c5 B" H9 o5 M
资料来源于 IOR 公司数据手册: R% Q) D3 x& [& ?; A( I' C

* i3 ^/ E0 x$ i) {* v我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。* ~' C& F$ h& Z/ V: k5 H- Q, h

5 L7 Y- u% ^7 G) `4 T; n) F
20201229152425648.png
" I  ?$ K3 G4 a5 [; U

9 G1 T3 n0 ]$ f! X, p9 q1.TIM模块
- v3 y( q- c# _' z! STIM 模块最重要的三个寄存器是:
9 B2 R4 I0 k1 N, U6 t- R, k# \, U+ i% U% a! g
Counter Register (TIMx_CNT) 计数寄存器! D( ], x+ {+ u
8 F" a1 F* P0 V
Auto-Reload Register (TIMx_ARR) 重置寄存器
5 Y7 C" Y5 M" f8 c7 i# ?4 N
) W$ O  h+ B1 ]' }& Y. X9 oCapture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器
. }+ A1 \# C* ?6 A4 Y3 N& L4 }! Y6 T% G4 Q8 b
20201229152425708.png

5 y! A4 R# l; K; J
( k, n' J3 E8 x+ ?2 Z* zCounter 在时钟的驱动下计数
8 K7 ?2 s3 D8 @' g& S- m0 ^% u) ]- ^
Auto-Reload 设定计数的最大限制值
0 m9 d0 L! V% Z! q
6 Y; Q0 S& b0 t( aCapture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件
$ Q* f. p9 c2 M: ?9 C! m( v/ i) J) d3 ]( A6 {+ m
在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。1 H2 ?4 b3 O4 X
  N) W. U2 u3 {5 t  m( A9 Y
有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。
" h* p' \4 C' Y! o& j* U& U' Q: i9 y! x" G5 p+ `+ Q! u
所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。- K- M8 U  z5 u. A, k
  s! g. f, Y' @: A7 e  n7 a3 M
2.代码6 P& p. G2 m  S2 h8 F6 K
$ ]' B/ t3 t) l, j; Y
我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。6 O9 ~0 s) q5 {
- o' C* J, v9 A. N  p& V5 Y
STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx
' R& p4 l2 _6 W$ X+ y1 |! Y; b8 m7 _) T: L9 ^) L
这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。  I# n6 B$ T- @5 a

9 q- E# |) b8 S然后把ADC采样的代码添加进来:
+ G- ^0 t% Q" V  s2 u' r' ^* y3 [/ n- d# y
Step 1:
: E4 z  x% l/ O! R& h* z
3 a+ a( V9 ^6 h/ }0 T- d' t; R: Nstm32f0xx_hal_conf.h
6 b" U7 X9 ~1 `6 N/ f
2 R* t( V$ s5 i#define HAL_ADC_MODULE_ENABLED
- Q; J5 I( i! F4 P# G+ n, M: u% S1 a- K4 j: m+ O; q3 E* D# `$ H+ Z7 B
Step 2:8 X1 g" ~- J# _& P/ @  `1 a) ~6 A

& e- e9 y; G$ kmain.h" P8 b- N, G: z4 ?
2 d+ `$ m( t! B9 w6 U6 |) C/ ]
添加ADC相关宏定义# d% n, f' t* g% _# K4 P

+ a6 e; t6 [# Y
20201229152425927.png
% w' t1 ^& l! }3 l$ K

, B. m7 t6 D( MStep 3:
' u2 P; f5 Q  c4 x: A: S; @% @' M4 h( @' p
stm32f0xx_hal_msp.c
# ]+ o. h0 m, N& j6 M9 p9 C  A& X( k8 E: E* r+ Z; X% a
添加ADC使用的引脚的初始化代码" u6 Q  r& T8 ?
" B0 Y! b: j7 ]  C; ~
20201229152425911.png
0 M: `  E0 ?- l. f7 D. V. K

8 k0 {' R, \/ k' G" m; `4 qStep 4:0 i' ]- s/ c  u$ i" R

& ~# e) K; A! O1 Q2 s6 C" g把ADC的驱动文件添加进工程,在主程序初始化ADC。. T: ?6 h0 k+ B3 B/ U/ c. \
0 n% b/ V4 Y" r4 n. u
20201229152426192.png
( y1 h* E+ D- B& l; \4 l& ?1 C
, B; G2 b, M5 U3 U8 A
Step 5:: g# l( i' c! b/ j
- I, P; X4 p6 u% `
读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。7 Y* n  Y$ n9 n5 o* b* U( P6 {4 `+ \

" ?( L* I8 A* o5 D" h. J
20201229152426108.png
1 z0 Y+ P& u7 ?. K

6 U. J7 j7 A8 \% ]& z8 V1 T9 u9 x
( c7 Q& G2 p% \! f1 _( K1 R. y6 k% h( {( ?5 m- t$ K
如果需要参考代码,可以在 Github 搜索 TopSemic 找到。7 o7 g4 c& f! M. {) b1 f5 R2 ]: b
) t# n9 }9 Z9 {3 {( j
( @) E( _( U1 j' S
收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答

所属标签

相似技术帖

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