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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
有刷电机驱动电路
0 L/ c; c& \0 o: r# v% y有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。6 w! b, S  x& f! _4 M" S

  d+ u$ W" n+ d1 Q在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。# B/ q1 O# T4 o9 Y

( @$ Q2 \2 P. P7 w+ O
20201229152425486.png
$ W+ Q' [( q/ a& _1 l
% l* V( L6 r* ^# q# M' |
下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。( V  M4 X! v, h; U0 x3 B, R

% e- [  W3 `! M: }
20201229152425562.png
* g+ E; |# @1 W# h$ G- c! C! D6 o( U

" ^+ f8 e! `3 @( P  w- y0 B: O. i  U6 H& r
20201229152425807.png

0 q) C+ `1 E0 k1 A6 N$ h, ~
! K7 W9 N1 O: t  b. m0 H5 {+ H+ J2 L( u" q1 Z8 x0 F) Q- d6 p
资料来源于 IOR 公司数据手册" r4 Y, \, h5 ~: @5 m6 r9 o
; N  [8 v% Z' K2 @/ F$ x
我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。
2 H- c: \# h% C( `' A1 G; N% P3 n4 n# H8 Z+ P
20201229152425648.png

* w1 i- C. v" X1 ]( F  J$ z  o% C8 J) L1 V0 o) T3 _8 T# P
1.TIM模块& `3 p* M: C$ D2 g
TIM 模块最重要的三个寄存器是:
* {8 n2 [: i, O0 z7 g
5 k! y) c3 v  }! h1 V+ ZCounter Register (TIMx_CNT) 计数寄存器' v/ F  s, a0 A( M9 V. d

! a, w1 t5 \0 FAuto-Reload Register (TIMx_ARR) 重置寄存器
2 i* F7 b: s3 B) M* S+ }; ]) P+ K8 A( ]6 ~9 I8 f' {, {! ?8 V8 L
Capture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器4 O" A; L" s7 E( p, ~$ Q" U: E

4 }# X( s" ^3 Z) e( _+ {) ~
20201229152425708.png
( L6 }- J& \% b; `& f- o+ y

' U& [0 @. N* Z9 |Counter 在时钟的驱动下计数
& A& E3 K: ~, W3 a+ b, d
+ M4 ~/ \2 n1 m3 Q1 \" m: DAuto-Reload 设定计数的最大限制值& U/ O! ]9 K6 s  y- z+ q9 O
8 R( y1 t) q! _$ D) ]9 M
Capture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件: N8 l4 ^* h8 W+ K
. t5 F6 O  t% c: L
在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。
* Z: u9 h& Y% y1 J" N5 F
; |) q+ B1 l& ?有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。
3 b4 j6 j; P/ R; j. A# n4 a# s! _7 @( o) g% M0 p% R! ^& ~
所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。3 n+ Z/ U5 ^5 x, |/ Y
0 x4 ~& Z5 ]3 \/ F1 d, V* {
2.代码
% m" N1 r3 @$ b6 \) Y' w, b$ a' l- }6 t
4 I0 v1 @( b) N我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。
- b, e9 K1 r! z  N
' J( s# z* o4 e( f  k9 b  cSTM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx
/ |- u6 o: c) D; d% ?4 a; c0 I" Q/ O  F) i/ b4 |% b. Q; {
这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。
4 w+ T& N* x, ~/ Q
4 Y4 w- {  \( i3 q, Q* z& o( A然后把ADC采样的代码添加进来:1 K- Z8 @- B3 ~7 V& z
; X! `  F' a" e! Q& [7 m7 Z6 h
Step 1:
8 W  r$ F0 _% B9 A6 }+ H; V$ M  k# P
stm32f0xx_hal_conf.h
! v3 S+ `4 `: N- V" t
( `6 G( o! T2 A+ M) f#define HAL_ADC_MODULE_ENABLED
# ?, @9 m3 R3 Y4 D  ~( @0 G! w3 z4 p4 `/ X7 F: P1 h- v) K9 x
Step 2:& K4 S$ r7 I' ^, X0 @

% F4 b, m2 ]! i4 pmain.h, F. |- q4 `5 ~+ s( n$ H
( D3 z( j# @6 }+ W! \3 R6 s
添加ADC相关宏定义  ^6 d$ b" G; r, K# ?! d/ t

' V+ {; V. }, @) ^! Q$ V) R
20201229152425927.png

( h, Z( S( y( s6 G5 U/ D' k0 }' T  I$ A/ e" h& s; I
Step 3:' K. y$ O9 o6 k) R9 N9 q

5 x8 ^4 W; H8 mstm32f0xx_hal_msp.c9 g5 g+ e0 C" z

2 T3 O% T! T* j! N. B4 K4 l添加ADC使用的引脚的初始化代码
$ B$ W7 m: ]3 Q% K" X) s' l- k( E4 G1 [& H' d( g$ i: G
20201229152425911.png

) I4 h( v' X% F- `6 ?" O6 D  x' \$ G% X, m. e
Step 4:( s) y( j; r) H+ [$ X' ~4 h/ j7 C5 C

& G# Y' `2 S4 B9 T4 w, Z  X把ADC的驱动文件添加进工程,在主程序初始化ADC。0 _9 K4 ^, Y' Z& \

+ ]- I& ~: v4 d. }$ b+ P
20201229152426192.png

* M! v0 B! P3 J; ~, c- @/ h% _
) v' g! `4 [* b3 K" w! _8 K! H6 ~Step 5:
. @( N$ s' _3 y7 x5 i+ q( p8 n
( E1 x- s) `4 \) I, n9 |6 ?3 ?% j# C: s读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。
+ j0 S7 v8 ]: T) y+ B
* F$ l. @& {" k) T
20201229152426108.png

' [+ P7 b8 ~( m+ D# X* H( a1 J6 ^$ m- \! D- Z" E8 _  \

0 Q* \+ |! w( [$ i  S/ O2 F1 f
/ J* @9 Z! y/ T0 f2 a+ Y6 s如果需要参考代码,可以在 Github 搜索 TopSemic 找到。, I. y: \! t  F- }; b

% ]6 I. Y& b' s( F( ]/ T3 C
/ ~! [8 h: @8 K( J, J/ z' \
收藏 评论0 发布时间:2021-11-25 15:00

举报

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