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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
有刷电机驱动电路8 z5 Z- H: E$ ]: r8 k
有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。
; C7 }8 u* p" R, {8 Z
/ f' H  t. W9 p# F8 g4 E在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。
1 L7 I: z9 s7 q. O+ r9 u0 q( i3 [) v$ l; H2 C
20201229152425486.png
/ U& I7 G, u7 z! d
. i* r- p/ q9 M0 \* S8 W
下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。
1 n7 ]7 F! @9 p) J& h
( L' |* j2 w/ b- }
20201229152425562.png
+ u4 ^1 c+ s) y* g# R; B
& }) j# f$ y- N9 H% q
8 s: s& h3 L# W
20201229152425807.png
; i  _8 r' E7 g  i& [6 q1 S
% J. t4 A0 U& @' w) ^
7 C& N; J6 }3 `! H+ [
资料来源于 IOR 公司数据手册
$ B( `9 U8 P& r/ y+ T* H* c) J* x( ~$ Y( m2 S: w
我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。
0 f, a* B) K7 Q9 F2 ]! M
' @) p6 B1 {6 a+ T5 r- G/ p# ~: k- i/ L
20201229152425648.png
/ K# v, p" U9 g! {0 F! x' M
" ^" X( W6 m! U+ Z0 x" }5 j
1.TIM模块5 I% y" X% G  D. u; U5 k$ O2 E# ]
TIM 模块最重要的三个寄存器是:
; F( O3 _# c" ]( d& d' y" G/ w+ m1 p0 V- H1 y: E6 u
Counter Register (TIMx_CNT) 计数寄存器! [! k0 [, i  s7 P- n7 G
, O: E, v  ?5 L/ ^9 S
Auto-Reload Register (TIMx_ARR) 重置寄存器( _6 W5 T# m' z. [9 V

& [5 N$ f/ T7 F& f6 N4 xCapture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器
: O$ K; s3 w/ b) _; q
7 l! S6 ^* C3 i& h; o  x: S0 Z
20201229152425708.png

. m6 n4 P! p. w& h1 S- c0 l- M! g" @" ]3 Y- C$ T1 U
Counter 在时钟的驱动下计数
' e+ g% C  G3 u1 G) C
5 i! X" S4 ~4 l7 }" D1 r+ f0 SAuto-Reload 设定计数的最大限制值
" ]$ G# D+ {: J0 {! o1 b2 N$ V- x; C+ R9 X& q9 D
Capture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件
. _& \! L/ q- S  L
5 [; [" o9 T/ T! y8 m( D在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。1 U6 N5 ]7 D4 ?7 f3 l
5 p  H; ~$ @0 g3 ?/ Z) x& ?$ V
有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。! h0 x1 Z; u3 D" E+ H8 X

& h/ `3 d, G- k9 O; E2 O9 R所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。$ Q7 N1 V# `  E: w# o/ ?
$ K  p$ T8 c4 L' G/ r6 D
2.代码
9 F/ Y) ~) s6 F0 Y, @  [) B) q4 W' _4 H4 l- V1 Z5 O/ B
我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。( Y- F7 e" [. n
! W7 I6 C, q  `& z1 y3 o4 l# C1 H2 `. U
STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx
# N( d( I8 A, x/ }2 Z/ Q6 \* P% c, h, h0 i- ?0 H
这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。
6 n( W2 B- _' z: a. E
: _8 d4 _, w: u% g" s- A- B4 Y$ M然后把ADC采样的代码添加进来:- ?( {% A; b* G

4 m' d6 W( d4 I- fStep 1:
0 H" L& s/ b% L9 Z  Z$ U
1 J& }/ d' j- nstm32f0xx_hal_conf.h
/ a5 l: x- X( Q) k& D0 J1 c1 U
- a5 R7 S! i% S0 U  _0 W* A#define HAL_ADC_MODULE_ENABLED5 p) ]2 ?2 y! ]4 r* k

8 X' T2 V8 c% P1 J$ S' j" r0 IStep 2:
: ?) M4 u4 m0 h3 n# _6 Q/ ?; ~  ~* P- X) [* b
main.h' x7 H% |. h) `5 j( m
1 q7 i4 y3 f. `1 o# v& h
添加ADC相关宏定义
. ^& a( W% Q' H7 `+ _# h4 Z( E
# X. [9 ~) ?) w9 r
20201229152425927.png
1 d8 @2 k: ~" r

3 T2 d0 {( M0 s3 D+ M/ GStep 3:0 D: r$ ~2 O+ q- j0 }8 E
+ n* A  g  R% t( S$ G" @1 \6 d
stm32f0xx_hal_msp.c' l9 _) A9 g0 N- {4 M
/ [% R% ^& Z+ e. G9 I+ _/ W/ T! w
添加ADC使用的引脚的初始化代码) h! U" A8 X( b

& D/ @0 I: U/ p3 d* x8 y, t
20201229152425911.png
% q. l' @7 c3 |9 q  V3 v" ?, G

3 @) b9 @( t; dStep 4:1 r# g( ~' K" b2 B/ N: T

8 ^6 g: ~( G& q2 a9 w# _- q把ADC的驱动文件添加进工程,在主程序初始化ADC。
" \9 m) g) E; k8 z0 l
4 G- G7 n( t" T& M+ l  `- w
20201229152426192.png

3 }  R- e) h* l- b
' a8 T; Y  x5 C. @+ NStep 5:1 ?/ K4 A/ T- e6 [, ^  J0 I) \% s) W
6 N8 R4 R- M( O0 q( y  N$ e  k; V  R* s
读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。
/ P, G( L# m  X, C
; S* Z2 W- C$ |
20201229152426108.png
4 u3 ?; n. c4 V1 w2 R
) A. r( u# `' h. N3 q- W+ N4 Y+ b+ g
1 w: W$ M6 T3 A, p8 f% r
3 f: E# i. ]: j9 w% I
如果需要参考代码,可以在 Github 搜索 TopSemic 找到。
) b# U$ {5 ]* Q/ i- k6 g1 q0 P( p3 v) W' Q+ N+ w* r& d

$ r  I# s; _- @
收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答

所属标签

相似技术帖

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