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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
有刷电机驱动电路# J: z& `+ _7 w2 K, R! ]
有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。
- E9 \$ l& u  \+ V" e# t: U8 T5 F3 I
1 p! R5 [! E' _1 S/ N) }在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。% _) M  F% x- G1 K5 P: ^' A* [' P6 R
* F7 Q; d1 `" v1 C3 c
20201229152425486.png

0 |* c' {- T4 G$ L, c" ^$ E, I
% W  o+ Q0 Q* `) m. f# a0 G  e下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。
; k7 F  {* S/ n: `5 C: g1 t+ D, d) ~; r
20201229152425562.png

; Q7 `' c+ V. a# D6 Y8 r" s
* ?: L6 J" P- Z& R( U' Y' K; k! R& n& ]
20201229152425807.png

) J3 C9 r& Z# d, c1 `
  v, D: K$ S. f5 r
# _. `& p' w3 P* o  ]" I资料来源于 IOR 公司数据手册0 _5 F& U( b7 p* E7 o( U

4 g" ?- K1 m5 g) u5 X+ E我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。7 t) n" t" w' o; w. f
, N0 y, r% L5 m# c6 z3 O
20201229152425648.png

* v8 @0 S( Y# l% Q0 s" ~3 k& v
1 ~4 Y( I0 @" v9 W& S$ b1.TIM模块
. G$ W- ]5 ^3 l: i5 XTIM 模块最重要的三个寄存器是:6 J8 h) K: Y! \5 y

4 i. }" |" f" `% U1 |: ]Counter Register (TIMx_CNT) 计数寄存器
$ |1 L" b) C. n9 V/ Z! n' T4 w: S" I; ]+ c
Auto-Reload Register (TIMx_ARR) 重置寄存器5 ?9 ]0 Z! u+ T8 f6 k1 X& @3 ]

8 [! c) s# F) M: \# E0 iCapture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器1 b6 P" q3 ~) s* F
! A1 d$ M4 Y' {; b# s3 R2 g+ Y; H
20201229152425708.png
/ c% P. ~4 e! a' H

( N% |8 }5 |/ q" \7 `7 i/ qCounter 在时钟的驱动下计数! z. r# J4 p; r( h& Z# y
! E- K" n" N+ L- {/ M+ a4 C5 e
Auto-Reload 设定计数的最大限制值
# M6 i9 v8 L8 u* P* ^% A) Q8 O9 G+ Z9 c1 |! J
Capture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件
% \1 t) M3 m  R' l3 s  J# g9 K+ [- Y  Q: ^" |: y5 [
在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。
  _% C& a( l% j# E7 [% S. L! q" ~/ T& Q; L+ p
有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。
) `1 t" Q9 r+ i& X. m9 a# a7 i( z/ T. H6 `  V# B7 B" y
所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。. r- d7 J3 z6 e8 \

, B: q! A9 U& ?: C% [2.代码6 q0 g. G1 T8 c& l0 w. {+ d

3 h2 I; c1 T" `* _. G$ j3 |' k; j3 r我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。% a) w% ~# @+ w

3 X6 M6 ~# h& r: s! YSTM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx; S' ]& W4 {, \, W" ^

9 g# I6 x, _: e# g5 E这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。
  W! w8 y1 \  f8 J7 o
7 @/ M+ }1 V* X) y然后把ADC采样的代码添加进来:
  u; x; L" ]1 D/ e; F3 F
& j0 D; [! v8 S  OStep 1:
0 Q5 U, q. a, S0 o9 \& G" b- T! T$ Q- q* O. c: g
stm32f0xx_hal_conf.h
$ J- u% \  z: O2 Z$ z% j. ^3 ]/ @
# N% x, \& h' b1 X; r#define HAL_ADC_MODULE_ENABLED
7 f* @  P4 w, e
" @. G; T( E9 D$ g/ W7 TStep 2:# ]8 Q2 R- c$ b: A

+ T9 I( D" x' `8 Vmain.h
, F/ A7 W7 P  Q+ h* M; r. |9 `( J! ^5 R8 U) g5 k+ z" q$ h
添加ADC相关宏定义
& S6 m- P4 i7 U7 r! v( X0 y
& k% \! c1 T# e( ~
20201229152425927.png

2 x" B& c6 `0 o3 x* S, ?& |" _/ r$ E* e7 C
Step 3:
. e- P' `5 n# i0 j, a5 ], V# }8 L" L5 z4 `$ ^" o
stm32f0xx_hal_msp.c
) }* x$ r; \3 k! R" y5 f+ \- f, u( s: s, v# s
添加ADC使用的引脚的初始化代码
8 x' M; C9 R. L& c6 N; s9 V# z  T* a
20201229152425911.png
) I1 {* W. [: t! M/ v
' ]; G4 |+ k/ x7 [3 |
Step 4:
) K8 O7 C9 |, M4 w: K
) l; R! D& Q2 P2 W* j0 V把ADC的驱动文件添加进工程,在主程序初始化ADC。! T7 p9 i. S& K8 i
3 R! c" I8 L+ g$ Q# g4 [5 B1 B
20201229152426192.png

8 @/ n8 @$ I& t& t" J  K+ z; P: c( b- ]% V: G" x
Step 5:
% ~3 y1 G6 B! Y9 A0 s3 K) D/ O  W9 u7 v/ i
读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。6 \% @; \7 U9 h# z5 ?( L- J

: }- t7 g+ i8 G
20201229152426108.png

  m/ t3 Y+ `5 u! R7 G* `# b& e  [7 r# d  @& I

7 r" L. R# ]6 w+ g  D
$ ~2 e6 b; p( v" x& R) Q如果需要参考代码,可以在 Github 搜索 TopSemic 找到。; R- x- ^. i" |3 a
, K7 T. x% D" H6 J# r
& D' r' C; H: s- L) q) g
赞 收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答

所属标签

相似技术帖

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