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

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

[复制链接]
STMCU小助手 发布时间:2021-11-25 15:00
有刷电机驱动电路( t6 i# a! i+ k3 H
有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。
0 j- O" z1 b1 s, _/ f/ T4 H: D$ J. z! E& m3 }
在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。" e  y1 h4 ~# i0 ~2 ?
" M  W! L" B  }
20201229152425486.png

6 x6 ]& Y; @7 _/ Y( K. r; {& d. \; L9 n
下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。
* F! J. f( V2 J! d% a% ?
8 S  ], Q! G# @; S$ N
20201229152425562.png

" o: W3 p( K% g9 y- `# N2 S% y( R0 r2 w% i5 N

9 G6 m% U/ H  \3 @1 c# z
20201229152425807.png

2 ^( W% N) u4 b: r4 U% X7 n5 y! o/ v; I0 {+ Y

1 y$ H/ s+ k3 j; ^! H资料来源于 IOR 公司数据手册
' p1 O* u. h$ r$ _+ v7 k0 A! V
  ^' z$ D- z/ M) `5 K( h) a我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。9 P8 ^/ j* P3 F) n- u1 o. C7 a1 I
7 _3 N' {1 U. q# z8 l. }* |
20201229152425648.png

6 M( e; F) r6 z" Y' [
0 U/ K8 H; g; v% L  W1.TIM模块
. b: v1 c2 L1 k. q7 u) kTIM 模块最重要的三个寄存器是:% X- C) e# {, R' l. \0 E# x/ v
1 L; H8 c. s# T& r, G
Counter Register (TIMx_CNT) 计数寄存器
. s: i1 s1 g7 Y  s( W
+ y; O: C  @* dAuto-Reload Register (TIMx_ARR) 重置寄存器) ~" M6 y6 e7 ~6 ~
0 s% }% t9 t! w5 J6 u
Capture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器4 O# v1 o+ D% p

7 A& x$ B/ H& H# E! _
20201229152425708.png

8 k  E2 f3 \* O: a6 U
4 r5 P' [+ b0 q1 ZCounter 在时钟的驱动下计数$ L& `8 y+ W5 z

3 A" s4 J2 p* F. s5 rAuto-Reload 设定计数的最大限制值
; e: z) K' t& t8 W: a. v8 K& e5 a$ g
1 L) v+ d5 H# a3 k0 t1 LCapture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件& A6 V3 z- I6 B7 g7 D/ V) [

; W3 Z( L9 C, R! }在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。3 \# {! g0 B9 S% j6 N0 G

% D9 J! l) j4 N$ X) \有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。0 x$ x* O, I' c( I1 c2 o  y

% b( ]9 Y$ x) M/ R& n, u6 u所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。6 j" T9 Y- @7 K$ Y

# g1 F" B3 }) [' Z+ g1 Z: [2.代码
# n1 x+ k; h# k4 ]+ d% g; I
+ G& g/ o6 ^# Z. k2 g& Q, @8 r! I我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。' n+ v, Y" ]- P

3 u9 d' G4 \* N. y" c. n  ESTM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx9 a' X9 A9 m4 y3 U/ U/ V& m1 J

" Z& f# a# _1 i4 E( x+ M! p这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。
" P, T1 \$ s. j7 P7 Z. y, I% o8 o1 v- `5 V
然后把ADC采样的代码添加进来:
! \$ P" c  B; @8 X- `+ e! @
/ z: F% r9 `) |+ ~/ ?; nStep 1:; O1 J( n8 V7 v, p9 a, v

( _9 G* {! I' i) Q7 Y5 T8 Rstm32f0xx_hal_conf.h
6 e0 A  [: p3 x7 m# H& Z  f4 t# b* F- ~9 A8 p3 e4 t8 D2 f: M; j
#define HAL_ADC_MODULE_ENABLED. }+ C7 \+ Y" Q" Q# }8 T7 ^, ]$ Q
) W2 |* o: p0 G" g# O( P1 r
Step 2:
2 z1 _9 a2 g; f. J. D4 \. }; R/ I% f% K) i. P  y  @6 e% T2 i. Z
main.h
# Y) X: N' n  O( R5 V+ h) \
1 ?, E% m" S$ D0 V5 J# k添加ADC相关宏定义  L# E2 Z# b, W$ u7 N

7 k, P" M9 \7 M
20201229152425927.png

' y  W7 ]' A1 c) v* g
3 L# @$ B; I3 ]" A) D3 fStep 3:
+ i9 ]7 }8 [4 ^; ]7 K0 w9 w! E( c/ q( d! y3 Q9 a
stm32f0xx_hal_msp.c' l7 t- c) s, K# n+ _) A

. D( l2 `. M8 ?添加ADC使用的引脚的初始化代码: i/ j- g: n, t6 k

4 ]( c/ T8 y$ E% B
20201229152425911.png

! I% n% [$ F* s* m$ ~$ `
, K' M+ t2 u5 OStep 4:4 n$ R0 K1 w( b1 m: l) ]
  K2 |0 B' S) x4 v( t5 ?1 I
把ADC的驱动文件添加进工程,在主程序初始化ADC。
5 F- j! ?/ U( U- L: f& _
* @" q) Y" ]/ a# t! N: i& b
20201229152426192.png
7 Z) Z- L9 e9 j0 N' ]; a
4 t6 S' k- G; W5 c
Step 5:, s) j! [* w9 O; |" s  L. L* e/ a

. O% M/ Q2 w. y; Q8 s) d读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。
2 y4 U3 a2 d2 h7 e7 l: r' U8 z+ X- i) e3 S5 l
20201229152426108.png

' T; A! I/ O) B5 A8 I- K, N" O+ ^' X6 F: y2 {: P

6 m) H" G4 v4 d  `  f7 q  A2 p
5 l& q" Z, p& u7 p* ~' K& i如果需要参考代码,可以在 Github 搜索 TopSemic 找到。9 G) B  h* a! x
' G7 ]4 t' [6 G9 S" q8 d9 _

$ ~! Q7 D& a3 X4 P4 D6 k
收藏 评论0 发布时间:2021-11-25 15:00

举报

0个回答

所属标签

相似技术帖

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