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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
有刷电机驱动电路0 \8 j" f& ^. J9 p. ]
有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。
! m' l/ k" C: m/ |  f. T
# D$ F0 E6 d% Z7 c在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。( M6 x$ M. U2 C' r7 ?) K

! x- a/ C) Z" t3 N6 `( Y
20201229152425486.png

% z) ?5 `* _; E/ ?8 v. N; o7 \! z: ], d; M+ b
下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。
& b* y, [6 w1 r& g6 t; b; \7 k, G
  O9 L9 I  `, Y. k
20201229152425562.png

1 K# V% u, ], \8 _- m. w5 f$ ?5 W! I8 p, \3 T% i- e

0 p$ }* b$ ~3 {2 y6 A% P: u. C9 s
20201229152425807.png
( |6 w3 @0 B  ^) m! _* {9 u3 {) L% E

" A1 Y& w# u$ n9 a, E  s' m" C6 E# ]: }+ Z
资料来源于 IOR 公司数据手册
3 c+ e/ x- S  ]( h8 K; b) e; T  M/ x3 N1 G( ^  X
我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。6 G4 I8 x, A% X5 @) J. o  |  V/ |

+ R6 G- r8 s$ [  V4 L& d2 L
20201229152425648.png
+ d  F! [' @' b- z* O

7 N$ e$ E  j6 r2 U9 L: p1.TIM模块
( G1 e! @* r. L$ ^: S( E3 dTIM 模块最重要的三个寄存器是:! e8 V2 L6 Q( N1 G8 z
5 {3 l3 a8 d+ h1 y& R4 H
Counter Register (TIMx_CNT) 计数寄存器
" H3 v  n% K% U0 V4 P8 E  i- s* @; g
Auto-Reload Register (TIMx_ARR) 重置寄存器' F; G# a9 p9 a9 x! N

1 e0 {0 J3 M0 ?" p, UCapture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器6 G9 Z* t4 e7 y) x4 d
9 `6 C  g) [# k7 G% @
20201229152425708.png

" }. y; M: s, L5 T
- }1 S0 K! D0 @4 RCounter 在时钟的驱动下计数4 j$ w% G8 Z  ?) r) M" D: K
) R  L- C$ M' \5 D( @
Auto-Reload 设定计数的最大限制值/ g* o; I5 \- H+ b4 Y

+ j6 H' n1 Y4 T: NCapture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件
( i( M' ?  X/ L& F" S& f3 f0 O
! P; N+ m: ?6 w' _  V2 u8 i3 j在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。
. q! A1 |! g# x- l( R( R2 _; q1 s& P
有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。5 v% z6 I) e+ L( V  B# u/ x& e

/ K3 z% v4 ~% v5 d% h: L# H3 [( P所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。
% s3 }/ X3 ]* X5 R! \
5 b$ U3 P5 N/ c+ P9 C: t- [5 `; H2.代码
8 e  v1 B) I9 M8 K* d9 w$ S. E5 h9 f, _+ e- j$ N4 z
我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。  B' F4 |8 K+ W
) T) I$ N6 @) l
STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx
$ u- K5 c4 F1 M2 C+ b: ?+ e* z& C3 S) T# O: C; h
这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。
& T: @1 \6 _9 [; ]0 M3 d+ \
- G7 h( O' z4 s7 y) g然后把ADC采样的代码添加进来:
# C/ Z3 ?9 n% j6 ]( M$ A0 b, w' G5 n! \
Step 1:! W& L& K) v& S: X% `0 j: e

: _5 [5 F( A3 N" wstm32f0xx_hal_conf.h
0 |6 W, o( S+ w& c0 n3 F4 l7 K: G; L! j! w) U
#define HAL_ADC_MODULE_ENABLED
3 T. O- L! M3 I6 |2 I
8 E% C8 Q. ^- ^! XStep 2:
4 Q* r/ q3 b" E9 I! S" v5 M* e4 F* s
main.h; D# F! h- ?' A- |

% c9 M+ W, |( v$ O% b4 _添加ADC相关宏定义! i$ V# g' C% G$ A4 _, [$ D* \+ f1 I! E
; C5 l5 c/ Q6 @) X9 |
20201229152425927.png
$ s2 U& \: q( X8 S2 l( c+ a! T5 k
' H6 Z7 w& Z7 K, q' `
Step 3:! L9 B& n9 B6 A, C2 x
5 ?% M8 U' C1 i. V, k1 L
stm32f0xx_hal_msp.c
) k+ K3 Y/ n" l' }+ |- o; ~( S0 b1 m9 k1 y- l/ B/ l3 |
添加ADC使用的引脚的初始化代码) g9 J3 O! w/ @) S5 I: {0 X
. ?& X+ ^8 v0 G8 S
20201229152425911.png
( l" T1 J1 F' c7 O/ n" x4 u

8 R+ i6 L2 N" J& m4 Q+ s, XStep 4:
; |8 g9 p: _! U- o: C# `7 K" X! a% H
把ADC的驱动文件添加进工程,在主程序初始化ADC。4 l2 w' {3 s/ Y  M, z4 o

+ [- R' o. F+ P& D4 x& o( }# `
20201229152426192.png
) c+ N- \4 i% [: C2 B

& C/ f% F9 \1 XStep 5:6 `% @. t+ u+ e1 a
% W2 P- w5 Y6 Y" _# ?
读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。
1 K" ]2 S% Z' B0 L3 h$ x
0 z: f4 u( y& U0 U
20201229152426108.png

( E0 q/ y7 u0 F- w; e! i
" y. N; ]0 c" a) {
# z" C4 g, H& J. T- ?' x$ m0 T4 k* f) w! B6 G1 g$ B9 s
如果需要参考代码,可以在 Github 搜索 TopSemic 找到。% m. T. R/ L9 [! {! u

! L$ N* R9 J* L* ?) O, U$ p/ w) \4 F4 z5 A2 f% u
收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答

所属标签

相似技术帖

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