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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
有刷电机驱动电路
# E7 W4 @5 |; w& Q有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。
  Q. \) c" @' V9 I( E
0 F) b8 q7 F$ K) H) g  @! U7 u+ X在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。
* x) H% y. L8 ]0 s, A7 a
! U. w) V  w+ O) p5 v
20201229152425486.png
7 [/ U7 J: a" _

9 [9 d& ]# x( N' {( g: b下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。
  B5 A9 W# `' ]( P
7 ~3 C! @: v2 j& {9 j: X  \
20201229152425562.png
) \! J" k& c% l& C
4 N$ J) N0 J+ q

7 j/ a7 I& `: N3 P4 O
20201229152425807.png
3 `; O9 t% V; Y9 H3 \
6 p. @+ [& q/ S+ G; }3 B
' j7 |/ H0 w" U9 w- G9 O
资料来源于 IOR 公司数据手册2 \& H& C& {5 C
  i9 o4 {  z9 L- E6 E$ @* h
我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。
: E9 S  e4 Z" S9 V. A5 E( ?0 }/ |6 G9 n4 P
20201229152425648.png

$ }) @5 |" M9 @5 O  s  l* H; Z* @8 o
1.TIM模块. _, @! {8 I/ r. |* y' w
TIM 模块最重要的三个寄存器是:* }8 y; L8 E! w& z& W
, G7 i! P2 `; }8 }" ]
Counter Register (TIMx_CNT) 计数寄存器
# f2 |' \% A( O
3 N) y1 M3 t9 `% aAuto-Reload Register (TIMx_ARR) 重置寄存器4 E5 N3 G& E; X8 c1 `3 D

- S6 S2 D+ P, H1 V1 B+ @Capture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器4 J; z+ o" j( F
# w2 @% p- V7 ^/ N# T: T
20201229152425708.png

- B+ c" ^. x/ t7 E( u! Q% c- C0 f; ^& {' a; c5 R/ j0 b7 H$ X- _
Counter 在时钟的驱动下计数: [% F: F! |9 `& ~7 c- o2 z6 f

& h  o" d3 D+ O, L  hAuto-Reload 设定计数的最大限制值/ {6 h0 i/ @5 _" s
9 e/ K% a7 b2 J$ l* ?$ k
Capture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件# f4 e* ~4 A! J

8 @# j0 U( ~) h: ?1 j, q4 _3 J" L在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。* r, D% h3 G% I1 Y

: I% a, E- c0 h( V有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。! H2 v% ^' b0 s! k1 g

9 t3 ?) T+ y1 b$ v* u+ _所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。
3 l$ A, p8 G( @
2 J# X( @' s9 ~0 L  V: C& A2.代码0 H9 T1 W: D! d5 L, e/ ?, [- N
: u" n! R4 h2 h: h5 f7 }% K; q
我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。
( M. h8 l! q5 B: T3 s+ w+ V, w9 p- a/ X& I% s. M: Y: X( f: M" f. U
STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx& u. {8 N/ I- f# n! x+ s8 R# S
, f' O; Q, Y; x- O. n6 R
这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。
, @4 k- t7 x  Q7 I  W/ l' F. \; n' D, @6 u- y9 j
然后把ADC采样的代码添加进来:( X. _* Y* b- L7 a% S: O: S

' @' M( F$ W; `$ y/ u! Q! YStep 1:
% [: I( ~  L- ~2 m2 v' w0 |  `, b% z: k- s  e& v
stm32f0xx_hal_conf.h( j. q3 M8 h  ]+ y6 N
, M: `5 P& y7 T
#define HAL_ADC_MODULE_ENABLED' j$ q* @9 l6 g1 Y; X" r

& _& _2 k3 u. `4 |Step 2:
3 q" n! |+ b/ M1 E- R' h; d& {
6 g- ?; G- S: z5 s' c  Fmain.h$ d# ~/ R4 r, _, T9 j# k) v

$ r6 s9 j4 a4 a9 Q' C4 U添加ADC相关宏定义
4 S, J8 w( t. A- `9 W/ o+ y+ }
" r* [3 T' N# i+ N6 q
20201229152425927.png
6 j1 q0 ~# ~# S' n0 i1 l0 r

3 l  E  W) a1 w* C) q9 {- tStep 3:8 p& x8 b. U' o5 A4 L/ K
0 p! ~) a- i2 l7 ]# d. _
stm32f0xx_hal_msp.c
5 J, t* r/ j* {  j! A" |& y" A$ J' M7 @7 U+ W* d8 j
添加ADC使用的引脚的初始化代码
7 {3 H9 s$ d( L4 o' {# x; @9 Y9 I) Y
20201229152425911.png

( H2 |9 [3 Q1 g- Y4 Y+ O/ t& F4 \: y2 C6 u: g8 R3 D7 R8 ], s
Step 4:: ], a/ g9 @$ b% n9 x3 F. T
# W1 }( }3 O4 b9 r% a3 R
把ADC的驱动文件添加进工程,在主程序初始化ADC。
* v1 n% p3 Z2 ^  |: [$ a/ g' p6 k! V
20201229152426192.png
( A1 Y" o. l" Z/ f5 z$ {

4 ?  u! Q  N" C5 D* C6 J$ oStep 5:) V; E. N; h6 f

+ ]( A' J7 ]) }1 j6 z1 I# V读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。
% H4 F) M# K7 K% r% o+ ]" n  l6 W: m' [! F$ {
20201229152426108.png

9 v5 o7 M. `: v, a
4 ^5 q) w2 B: Y8 {6 b  Q4 e) u, \5 K) p* p
7 D: B' n4 X( c2 X$ W) f
如果需要参考代码,可以在 Github 搜索 TopSemic 找到。
6 U$ w& i& j* ?* v% g; P
  \  `% L2 o1 S! H+ Q1 Z' w: N# t: n6 ^/ f) e
收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版