STMCU小助手
发布时间:2021-11-25 15:00
|
有刷电机驱动电路$ {1 ^+ f7 F* m9 B+ O' x 有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。( Y) p7 J3 {9 _ 在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。# k( i/ v9 d5 x7 A. I 7 ]1 J9 {3 ]5 }: |
下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。
8 ?! Y/ g& _& J' Q& l 资料来源于 IOR 公司数据手册# i+ G0 d5 z$ B2 t* _; R: I7 | $ r- f$ R& d* e9 H2 ~4 m1 e 我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。 # Y0 Y0 |% d: A
" y6 ]& n! T) V ?2 Y! _ ^5 a 1.TIM模块 TIM 模块最重要的三个寄存器是:( N* E# n* |6 a7 w% a- C $ T. X' @9 X0 s3 O0 Z Counter Register (TIMx_CNT) 计数寄存器 Auto-Reload Register (TIMx_ARR) 重置寄存器 Capture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器
6 H# s0 U9 j! u: v0 E9 e' l$ f Counter 在时钟的驱动下计数 S5 D$ |& L8 @& W1 l a B5 e3 { Auto-Reload 设定计数的最大限制值6 S% u' W- b2 D. A# h- t' p, p ( ^* x% m6 g; M1 U' Z+ ]+ U Capture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件( T: }3 c- c" z7 m2 W! J7 H " n& s4 Z( r# s0 `3 A) g) Z% w8 `8 U 在 PWM 模式下,Auto-Reload 寄存器设定PWM的周期,Compare 设定占空比。 4 \6 ]+ H" w. U, [% X 有一点需要注意的是一个 TIM 模块只有一个计数器和一个重置寄存器,而有多个输入捕获/输出比较寄存器。所以一个 TIM 模块的多个通道可以设置不同的占空比,但周期都是相同的。: p+ k- _9 U7 g' u2 J: Z + Q' L2 Y: a( S. C( b: r0 h 所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。 2.代码 x! F( q7 x+ p8 _% x% c+ r 我们在下面这个工程的基础上修改来实现用一个可调电阻控制PWM占空比,来控制电机的转速。 & Y B% S5 ~$ m. A8 \- Q* f, f' \ STM32Cube_FW_F0_V1.11.0\Projects\STM32F030R8-Nucleo\Examples\TIM\TIM_PWMOutput\MDK-ARM\Project.uvprojx 这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。 : s; S+ _! [3 x: F 然后把ADC采样的代码添加进来: Step 1: stm32f0xx_hal_conf.h 3 R, c. d, e+ S) h* J. u7 b #define HAL_ADC_MODULE_ENABLED! l5 T$ {8 G" C9 j2 g3 R E: Y( @ # ]/ `8 m, X1 N6 [- N8 O1 c' X Step 2: 5 j' W0 }5 m3 n+ l6 L7 I' A main.h 添加ADC相关宏定义: S1 z# K) p2 n# E# D
Step 3: 6 b+ p1 A) a, g/ M- p stm32f0xx_hal_msp.c. E& w/ A4 Q# B& E6 n1 k" V- X 8 Q/ ^6 h. S- H" x$ H, U 添加ADC使用的引脚的初始化代码' h- X: a$ `+ u% i% p. f/ T3 }, j3 x
& T3 G6 L. ^) K% r Step 4:6 X; a& F+ y* j$ N6 h# ^* S# Z 9 r8 Q# H# f/ f% P2 ? 把ADC的驱动文件添加进工程,在主程序初始化ADC。 ( {7 O+ M! Y# N2 C1 E+ f; p C
Step 5: 1 M" | P4 y# `, s, ? 读取 ADC 的值,写入 TIM 的 CCR 寄存器,观察 PWM 占空比的变化。根据电机的特性,还可能需要改变 PWM 的周期。* Y& O7 F2 h5 A
% ^$ |) a I7 B& E1 E 如果需要参考代码,可以在 Github 搜索 TopSemic 找到。4 A9 ^: Q! W; W% p6 t w1 n , w$ w$ s* ?# z4 N( [$ U |
【评分有奖】STM32 AI Sidekick聊天工具上线,快来体验一下吧!
ST TouchGFX 实操系列视频+如何选择正确的帧缓冲区策略
ST TouchGFX 实操系列视频++如何添加图像
ST TouchGFX 实操系列视频+如何进行屏幕转换
ST TouchGFX 实操系列视频+控件的淡入淡出
ST TouchGFX 实操系列视频+移动控件的三种方法
ST TouchGFX 实操系列视频+如何创建用户界面(UI)
ST TouchGFX 实操系列视频+如何安装TouchGFX Designer和STM32Cube软件环境
【经验分享】STM32F1 GPIO工作原理
【经验分享】STM32F0xx_DMA收发USART数据配置详细过程
微信公众号
手机版