在本教程中,我将通过STM32微控制器和L293D半H桥控制IC来教导您如何控制DC电机的速度。DC电机是您在房屋中看到的常用电机(直流水泵,DC风扇),玩具等。直流电机以恒定速度旋转,但通过利用少量技术可以改变和控制它们的速度。一种这样的技术和最受欢迎的是为其提供可变电压。通过可变电压,我的意思是提供比特定DC电动机的最大额定值更少的电压(功率)。如我们的屋顶风扇(AC电压的工作)通过改变连接在按钮插座中的电位器(可变电阻)来控制旋转速度。当我们在任一方面旋转其旋钮时,电阻器会随功率而变化。
可变电阻是控制电机转速的一个很好的选择。但是如果我们想插入一些控制逻辑(e。G改变电机旋转方向)或精确控制电机转速(每分钟分辨率),那么可变电阻技术不能满足我们的要求。要实现上逻辑脉宽调制(pwm)技术是最适合的。在脉宽调制中,将电机的输入恒电压分成几个子周期,以减少输入电压的量。
在该项目中,我们的目的是使用STM32微控制器控制电机的速度。在项目中使用PWM技术来控制电机速度和方向。ST32F103C8T6 MicorController预组装板用于该项目。STM32Cubemx用于STM32F103C8T6微控制器GPIO,定时器配置。Keil Arm MDK 5用于写作和编译项目代码。代码是通过使用STM32 HAL库来编写的。如果您是新的并且不知道STM32Cubemx,Keil Arm MDK 5和HAL库,我建议您首先使用STM32Cubemx和Keil Arm和HAL库进行入门教程。只需单击下面的按钮即可接受教程。
可变电阻是控制电机转速的一个很好的选择。但是如果我们想插入一些控制逻辑(e。G改变电机旋转方向)或精确控制电机转速(每分钟分辨率),那么可变电阻技术不能满足我们的要求。要实现上逻辑脉宽调制(pwm)技术是最适合的。在脉宽调制中,将电机的输入恒电压分成几个子周期,以减少输入电压的量。
在该项目中,我们的目的是使用STM32微控制器控制电机的速度。在项目中使用PWM技术来控制电机速度和方向。ST32F103C8T6 MicorController预组装板用于该项目。STM32Cubemx用于STM32F103C8T6微控制器GPIO,定时器配置。Keil Arm MDK 5用于写作和编译项目代码。代码是通过使用STM32 HAL库来编写的。如果您是新的并且不知道STM32Cubemx,Keil Arm MDK 5和HAL库,我建议您首先使用STM32Cubemx和Keil Arm和HAL库进行入门教程。只需单击下面的按钮即可接受教程。
我将控制连接到L293D半H桥IC的两个直流电机的速度。什么是l293d?微控制器适用于3.3至5伏TTL逻辑。直流电机在哪里工作5至+24伏。它不可能直接运行电机从微不可智的输出引脚。微控制器输出引脚可以仅源5伏,电流25 mA,不适合直流电机开始旋转。STM32微控制器适用于3.3伏特TTL逻辑。对于该项目,我正在使用12伏直流电机,该电机需要200 mA的电流进行恒定旋转。因此,我们需要使用STM32微控制器驱动电动机的外部电路。
晶体管或Mosfet作为外部电路来驱动、控制直流电机的速度和方向
一个外部晶体管或mosfet是最好的选择,以驱动12伏电机使用stm32微控制器。晶体管的底座mosfet连接stm32输出引脚,在晶体管的集电极之间插入电机。stm32输出引脚向晶体管基极输出可变的pwm信号,可以方便地控制直流电机的转速。但我们还需要改变电机的方向,这在这种配置中是不可能的。
用于直流电机方向控制的半H桥电路
在半H桥接电路中,两个晶体管用于控制直流电动机旋转的方向。制作半H桥电路,要求DC电机电源的要求不是一项简单的任务。L293D是一个预装的IC,其中包含两个半H桥配置。我们可以使用L293D电机驱动器IC轻松驱动,控制两个直流电机的方向和速度。
为了了解引脚和l293d中每个引脚的目的,你必须参加另一个教程。我在教程中非常深入地解释了l293d电路及其工作原理。教程将帮助您理解下面项目的电路图。点击下面的按钮学习教程。
项目工作
我将在这个项目中控制直流电机的旋转方向和速度。为此,我决定连接四个按钮作为输入。按钮将控制电机的方向和速度。稍后我将讨论每个按钮的用途。对于4个按钮作为输入,我需要4个gpio的stm32微控制器声明为输入。我声明了Port-B引脚6、7、8和9作为输入。我也激活了与这些引脚相关的上拉电阻。
为了控制两个直流电机的方向通过半h桥电路,我需要四个控制。基本上需要单片机的四个pgio引脚来控制两个直流电机的旋转方向。我声明了四个stm32微控制器端口- a引脚0,1,2和3作为输出。
最后控制电机速度,我需要两个PWM信号。我将使用Port-B引脚0和1作为PWM源。使用STM32生成PWM不是一项简单的任务。一个人必须照顾许多限制。我有一个关于如何使用STM32微控制器生成PWM的另一教程。我讨论了该教程中的所有约束频率,占空比和计数器等。在进一步移动之前,请采取该教程。如果您没有完成教程,您将无法理解下面的代码。
如果你已经通过上面的教程,你现在可能已经知道如何用stm32微控制器产生所需的pwm。为了控制直流电机的速度,我必须改变pwm信号。改变pwm信号不是一个困难的任务,如果你已经通过以上教程。改变pwm信号,你需要计算更多的变量。在这个项目中,我正在产生一个可变的占空比pwm信号在50赫兹的频率。实际上,我计算这些值为另一个项目(伺服电机与stm32微控制器r),并使用这些值在这个项目。如果需要,可以查看项目设置。它将帮助你在stm32cubemx pwm设置。
Stm32cubemx gpio设置和定时器pwm设置如下。您必须学习上面的教程来理解每个约束,以及它们是如何计算和插入到stm32cubemx中的。
我使用stm32f103单片机的内部8 Mhz振荡器时钟源到gpio引脚和pwm产生。这些设置必须产生50hz频率pwm信号如上所述。
对于PWM,我正在使用Port-B引脚0和STM32的1。使用微控制器定时器-3的两个引脚相关联。利用销0计时器3通道3连接,并且销1定时器3通道4连接。我们必须在开始与它们合作之前激活这些渠道。如何激活频道?下面给出的设置。
项目电路
a口引脚A0和A1用于控制电机-1的方向。微控制器引脚A0连接l293d的输入端1,引脚A1连接l293d的输入端2。Pwm信号提供使能电机1的引脚或通道1的l293d。Stm32 Port-B引脚1连接到l293d的enable 1。同样,stm32单片机的a口引脚A2和A3用于控制2号电机或l293d的2号通道的速度。stm32的A2引脚连接stm32单片机输入4,stm32的A3引脚连接l293d channel 2的输入3引脚。l293d通道2的使能引脚连接到stm32单片机的引脚B0。
我们的12伏电机连接到输出引脚的l293d。电机1连接在通道1的输出引脚上,电机2连接在l293d电机驱动器通道2的输出引脚上。接地脚已接地。
注意: 为了电路完成和正常工作,stm32单片机电源和l293d电机电源的接地必须共同接地。
我们的12伏电机连接到输出引脚的l293d。电机1连接在通道1的输出引脚上,电机2连接在l293d电机驱动器通道2的输出引脚上。接地脚已接地。
注意: 为了电路完成和正常工作,stm32单片机电源和l293d电机电源的接地必须共同接地。
输入按钮功能
- B9 -按下B9按钮将切换直流电机的旋转方向。如果向前移动,按下B9按钮将改变方向为向后移动。
- B8 -按下按钮B8将pwm占空比设置为75%,并随着电机转速降低。
- B7 -按下按钮B7将设置pwm占空比为50%。直流电机知道在半速度比最大转速。
- B6 -按下按钮B6将pwm占空比设置为25%将进一步降低转速。
来代码。代码的主要逻辑是在1个循环之前且循环之间。如果您已经通过上述PWM和STM32Cubemx的教程开始,您可以轻松理解下面的代码语句。语句与上一个教程中的相同,只有在项目中仅更改语句序列。
在上述代码的第一个语句之前,当1环启动直流电机和pwm信号输出100%占空比。在1个循环中,每个按钮按下是连续检查。如果按下任何一个按钮,就会执行相应的功能(反转方向,改变速度)。我希望上面的代码对你来说是简单的,如果你已经完成了所有的教程列入在这篇文章中。
未来的工作:
使用上述相同的代码和逻辑,您不仅可以驱动直流电机,也可以驱动伺服电机。在电路中,你必须改变一些设置,如伺服电机驱动(5到12 v)的输入电压为l293d。伺服电机工作在50hz频率和占空比在1毫秒到3毫秒之间。我们在50hz频率上产生pwm。所以你可以连接一个伺服输出,并检查代码是否工作(它肯定会)。你也可以用上面相同的代码将led连接到l293d输出。您可能需要固定的方向,而不是改变它的led。因为led的极性不能改变。
未来的工作:
使用上述相同的代码和逻辑,您不仅可以驱动直流电机,也可以驱动伺服电机。在电路中,你必须改变一些设置,如伺服电机驱动(5到12 v)的输入电压为l293d。伺服电机工作在50hz频率和占空比在1毫秒到3毫秒之间。我们在50hz频率上产生pwm。所以你可以连接一个伺服输出,并检查代码是否工作(它肯定会)。你也可以用上面相同的代码将led连接到l293d输出。您可能需要固定的方向,而不是改变它的led。因为led的极性不能改变。
下载项目代码。文件夹中包含stm32cubemx和keil arm ide项目文件。所有项目库和依赖项都包含在文件夹中。请向我们提供你对这个项目的反馈意见。
提起:特色捐款,188appcob