stm32f103vet6 brushless motor driven by a 12V DC L298N process comprising code

First, the traditional beginning of the introduction L298N motor drive module

Here Insert Picture Description
L298N ST is produced by a high voltage, high current motor driver chip.
The chip 15 pin package. The main features are: high voltage, the maximum operating voltage of up to 46V; output current, instantaneous peak current up to 3A, continuous operating current. 2A; rated power of 25W. Contains two H-bridge full-bridge high voltage and high current drive, can be used to drive DC motors and stepper motors, and other inductive load relay coil; using standard logic level of the control signal; enable control having two ends, in without being allowed to affect the input signal or to disable the device has a power supply input logic, the internal logic circuit operates at a low voltage portion; can be an external sense resistor, the change amount is fed back to the control circuit. L298N chip using a drive motor, which can drive a two-phase stepper motor or a four-phase stepper motors, DC motors can be driven two.

Schematic

Here Insert Picture Description

Second, quiet and winded, directly on the terminal of FIG.

Here Insert Picture Description

This is his single-chip bonding, the chip using a STM32F103VET6, anyway, what chips are similar matter
to explain my wiring diagram:
Red Box 1. DC geared motor connected to a positive and negative do not care, forward reverse of his own decision
red box 2. here the external power supply to the 12V L298N, red frame GND 3 and welded together on an interface
red frame 3 is a GND, Dupont line GND and the other end inserted to the board connected, and the microcontroller common ground
red box 4. it is a matter output 5V, 5V board connected to the pins on when power to the board, so they do not separate the power supply microcontroller
red frame 5. there are three primer foot (INA, IN1, IN2) talk about the details below

Here Insert Picture Description
PA8 : 这里直接用stm32f103vet6默认的TIM1时钟引脚,也可以将TIM1映射到其他引脚(当然不是什么引脚都行),为了写工程简单一点这里也没有改
PE11、PE10:这两个引脚倒是可以在工程中随便改成什么引脚都行,只是分别输出高低电平给IN1和IN2的,为了让电机转起来
5V : 这里就靠L298N供电给单片机啦,单片机上面的接口就不用接电源了
GND :单片机GND和L298N共地,为了方便这里强行用了杜邦线接过去

三、接线细节图

Here Insert Picture Description
来讲一讲这三个引脚的情况
1、INA使能买来时本身是有一个短接帽的,把短接帽去掉,靠近板子里面的引脚就是一个5V供电,靠近板子外面的就是INA使能啦,这个接到单片机的PA8上,用TIM1产生PWM输出来让电机从慢到快,在从快到慢转
2、IN1就给一个高电平(3.3V),IN2就给一个低电平(GND),反过来IN2高,IN1低也行,但是不能同高同低,这样是制动状态,电机是不会转的

四、接下来是代码部分了


这里我学的是野火哥的工程模板,用的原子哥的PWM例程移植过来,野火哥的教程里面没有PWM的讲解,我就用原子哥的教程抄作业抄了一个PWM输出啦,哈哈哈…(留下了没有技术的眼泪)


Here Insert Picture Description
先讲一下工程里面的东西,工程模板设计格式是按照野火stm32教程入门篇的工程模板(我觉得这种布局挺好的,适合新手),我们自己写的代码主要在User中,其他的都是固件库或者编译生成的文件

接下来打开User里面看看放了什么

Here Insert Picture Description
1.led:这里本来想用led灯来显示一下电机现在正转还是反转的后来嫌自己怪多事的,就没有使用上
2.power:本来写的是PE10、PE11接到IN1、IN2,INA直接用短接帽使能的测试电机转不转的代码,后来就整合到pwm里面去了,也没有用上(我还懒得删除)
3.pwm:这个就是主要的,使用晶振生成定时器TIM1的pwm输出啦
4.SysTick:从野火例程里面偷来的系统时钟代码,拿来延时用(小声BB)
5.main.c:主函数啦等下具体代码看一下
6.stm32f10x_conf.h:全部外设的头文件集合地
7.stm32f10x_it.c:全部中断的集合地(也可以不放在这里,放在这里方便管理而已)
7.stm32f10x_it.h:stm32f10x_it.c的头文件(这个…就这样解释吧)

代码详细情况

前面说到我们只用了User中的pwm和SysTick,SysTick就没啥好说的啦,可以去找野火哥的教程有教学,看看我们自己写的pwm咋样

(1)-----“pwm.h”
Here Insert Picture Description

这个pwm的头文件仔细一看也没啥好说的,大家看看就明白了用了pwm.c中用了–PE10、PE11、PA8

(2)-----“pwm.c”
Here Insert Picture Description

上面是TIM1时钟的配置情况:
1、先定义三个结构体
2、打开TIM1和GPIOA的晶振
3、再配置一下INA嘛,上面的注释有些问题,又是PE13又是PE11的,其实是我PA8哒,大家知道就好了
4、下面的开始的自动重装载值和定时器分频什么的,以及定时器模式的选择在正点原子的stm32教程里面都有讲解,这里就不重复讲了
Here Insert Picture Description

这个是40行以后的代码,其实也就是User中power.c放在pwm.c的代码部分作用是:
使能和初始化PE10和PE11

(3)-----“mian.c”

Here Insert Picture Description

1、三个头文件要记得调用的嘛
2、mian开始的时候时钟已经被8M的晶振倍频为72M了
3、顺便初始化一下函数
4、IN1的PE11拉高,IN2的PE10拉低,给电机驱动模块L298N高低电平可以驱动电转动
5、TIM1_PWM_Init()这个比较重要带图一起讲

五、图文解释

Here Insert Picture Description
接下来是我个人的理解


一、TIM1_PWM_Init()这里有两个参数arr和psc,arr是自动重装载值,psc是分频数
为什么是(899,0)呢
899=900-1,0=1-1,这里自动重装载值其实是900,分频数其实是1,也就是不分频,至于要把值减一的原因,估计是计数是从0开始,所以要减一。


二、为什么PWM频率:是72M除以arr重装载值呢(感觉回到了小学算术题)
1.主函数开始系统时钟已经被8M的HSE晶振倍频为72M了
—72MHz=72000KHz=72000000Hz相当于1秒中可以记72000000次数,72000000次/每秒

2.定时器TIM1的900重装载值arr我理解为记900次数为一个周期

3.那么72MHz记1次数需要的时间是 1/72000000秒,
—记900次数需要 900/72000000秒=0.0000125s=12.5us

4.f=1/T,频率等于1除以一周期需要的时间 ,
—那么 TIM1的频率为 f = 1 / 0.0000125s = 80000Hz = 80KHz

5.总的来说,就是晶振记数太快了,把一次记数比喻成向领导上报一次,你记一次就上报一次领导都烦了,我不让你那么快,我让晶振记了900次才来向我上报一次,把频率降下来就是我的PWM频率


三、说了那么多我上面的图是干嘛的啊
Here Insert Picture Description(真的灵魂画手)

我们知道了TIM1频率是怎么来的,接下来看看CCRx(捕获寄存器)是什么东西了
1、CCRx在主函数代码里面是pwmval初始值为0,在代码里面也是一直递增然后递减然后又递增又再次递减一直循环,从0开始1,2,3,4,5……800,然后又799,798,796,……,3,2,1,0

2、TIM_SetComparex(TIM_TypeDef* TIMx, uint16_t Compare1)这个函数就是修改占空比的,
接下来告诉你们它是如何修改占空比
x在代码里面是1也就是TIM1嘛,后面的Compare1就是你要修改的CCRx捕获寄存器

那么就不得不说一下定时器的模式选择了
Here Insert Picture Description
这里简单来说:(默认选择了向上计数,有效电平为高电平,这两个都可以在代码里面设置)
TIM_OCMode_PWM1—也就是模式1,意思上面图定时器CNT从0开始计数一直的增大时,只要比CNT<CCRx,那么这段时间内IO逻辑电路就输出有效电平(高电平),当CNT的数越计越大,超过CCRx时,也就是CNT>CCRx,那么这段时间就输出无效电平(低电平), CNT到达ARR的值时就溢出啦从0开始计数,又来一遍这个操作

TIM_OCMode_PWM2—也就是模式1相反啦,CNT<CCRx的时间段输出无效电平(低电平),CNT>CCRx的时间段输出有效电平(高电平),上面我添了两笔的图就是这种模式2啦

六、完结


这里记录一下小伙伴问的问题:
为什么PWM不用中断优先级啊?
STM32定时器里每个通道都有个捕获/比较寄存器CCRx,当设置为PWM输出模式后,计数寄存器CNT与CCRx一直在比较,假如当CNT比CCRx小的时候输出一个0,那么当CNT比CCRx大的时候输入1,当CNT溢出后周而复始。所以CCRx与ARR的比值即为占空比。这些比较以及反转全部由定时器硬件来完成,所以不需要中断来干涉。

CCRx不变的情况下为什么PWM输出的电平IO是一下高一下低,电机是一直保持一个速度呢,不应该一下停一下动吗?
PWM信号频率很高,我们不能用肉眼去观察,就好像是LED也可以用PWM控制亮度,但是它亮灭的过程太快,人眼无法看到它暗的过程,就只能感觉到它的亮的程度变高或者变低了,电机也是一样的情况,它高低电平切换的过程太短,低电平停下一瞬间就切回高电平了,高电平也是一瞬间就切换低电平,能够观察到的只有电机转动的速度。


写这个为了记录一下电机实验,免得以后忘记了没地方复习,代码写的也不是很好,例程中主函数电机只能朝单个方向逐渐加速,加速到最高后再逐渐减速,往复循环。另外我用电压表测了一下我这个电机停下的电压,大概是1.5V以下INA就不会驱动,有一段时间是停止的。

我还试了一下把INA和(IN1、IN2)其中的高电平的接线替换,比如就是INA是高电平,IN2是低电平,IN1用芯片PWM输出,电机也是可以按照代码中的朝单个方向逐渐加速,加速到最高后再逐渐减速,往复循环。
原理都差不多,只是一个是PWM控制INA使能,一个是PWM控制电机的正脚使能。

Initially the program book of the pit Taobao get at motor drive module does not light, the module that a word document or 51, works are not, forced to write a code to throw Baidu network disk, and even annotate wrong the places and as I said above, too lazy to change, and there is still much room for amendment, I just wanted to test L298N is how to play, we have written a better share with each other ah
Baidu network disk: HTTPS: / /pan.baidu.com/s/1RBPGxA4BD8-ajzq0MK0FnQ
extraction code: pnse

Here Insert Picture Description

Released five original articles · won praise 14 · views 1611

Guess you like

Origin blog.csdn.net/qq_41840148/article/details/88628315