STMCU小助手
发布时间:2021-11-25 15:00
|
有刷电机驱动电路8 z5 Z- H: E$ ]: r8 k 有刷电机是电机里面最简单,也是历史最悠久的一种,到现在仍然广泛应用于各个领域。他的控制很简单,在电机的两个电极加正向电压,则正向旋转,如果加反向电压,则旋转方向也反过来。电机的转速可以通过控制加在电极上的电压来调节。 在电机控制电路中最常用的器件就是 MOS 管了。可以分为两个大的类型:P 沟道 MOS 和 N 沟道 MOS。MOS 管可以简单的理解为一个自来水阀门,Gate 是控制端,调节 Drain 和 Source 端之间流过的电流大小。 0 q( i3 [) v$ l; H2 C
. i* r- p/ q9 M0 \* S8 W 下面是两种 MOS 的典型用法。P 沟道的 MOS 一般 S 接电源正极,然后 Vgs 需要一个负电压来打开电流通道,而 N 沟道的 S 极一般接电源的负极,Vgs 需要一个正电压来打开电流通道。
& }) j# f$ y- N9 H% q 8 s: s& h3 L# W
% J. t4 A0 U& @' w) ^ 7 C& N; J6 }3 `! H+ [ 资料来源于 IOR 公司数据手册 + T* H* c) J* x( ~$ Y( m2 S: w 我们先从一个最简单的驱动电路开始。单片机控制 MOS 管栅极为高时,电流从电源经过电机和 MOS 管到地。当栅极为低时,MOS 管断开,此时电机线圈内的电流继续通过续流二极管回流电机的正极。我们通过调节栅极控制端的PWM占空比,就可以控制电机的转速。
" ^" X( W6 m! U+ Z0 x" }5 j 1.TIM模块5 I% y" X% G D. u; U5 k$ O2 E# ] TIM 模块最重要的三个寄存器是: / 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 Capture/compare mode register 1 (TIMx_CCMRx) 输入捕获/输出比较寄存器
! g" @" ]3 Y- C$ T1 U Counter 在时钟的驱动下计数 Auto-Reload 设定计数的最大限制值 1 b2 N$ V- x; C+ R9 X& q9 D Capture/Compare 锁存一个事件发生时的计数值到Capture/计数达到 Compare 值后触发一个事件 在 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 所以我们在选用 MCU 的时候,如果需要产生多种周期的 PWM,不仅要看它的定时器模块一共有多少通道数,还要看是否有足够的独立 TIM 模块。$ Q7 N1 V# ` E: w# o/ ? $ K p$ T8 c4 L' G/ r6 D 2.代码 , @ [) 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 % c, h, h0 i- ?0 H 这个工程默认使用TIM3模块输出4路PWM,我们可以只保留其中一路。 然后把ADC采样的代码添加进来:- ?( {% A; b* G Step 1: stm32f0xx_hal_conf.h #define HAL_ADC_MODULE_ENABLED5 p) ]2 ?2 y! ]4 r* k Step 2: / ?; ~ ~* P- X) [* b main.h' x7 H% |. h) `5 j( m 1 q7 i4 y3 f. `1 o# v& h 添加ADC相关宏定义
Step 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
Step 4:1 r# g( ~' K" b2 B/ N: T 把ADC的驱动文件添加进工程,在主程序初始化ADC。
Step 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 的周期。
) 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 找到。 - k6 g1 q0 P( p3 v) W' Q+ N+ w* r& d |
【评分有奖】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数据配置详细过程
微信公众号
手机版