如何在STM32F103C8T6中使用PWM?STM32 PWM教程

在本教程中,我将向您展示如何在STM32F103C8T6基于STM32蓝色丸板中使用PWM。在STM32 MCU中使用脉冲宽度调制(PWM),我们将控制小5V直流风扇的速度。您还可以使用PWM技术控制LED的亮度。

介绍

我们在这里见过许多PWM相关项目。我们知道,所有微控制器都在数字域上工作,并不能直接处理或产生模拟信号。对于脉冲宽度调制短而言,PWM是一种使用数字装置产生模拟信号的技术。

这是通过使数字输出引脚高且低于特定频率以产生方波来完成的。但这种纯粹的方波是没有用的。为了利用数字控制,我们可以在固定时间段内改变方形浪潮的高时间和低时间。

通过改变方波的开关周期的宽度,我们可以模拟完全OFF(0V)之间的电压(0 V)和完整(5 V或3.3 V)。脉冲的接通时间的持续时间被称为脉冲的宽度或简单的脉冲宽度。由于我们正在改变或“调制”该宽度,因此该技术称为脉冲宽度调制。

称为单个脉冲的总时间段与按时的总时间段的比例称为PWM信号的占空比。

占空比=按时/(按时+关闭时间)

对于50%的占空比信号,均接通时间和关闭时间相等。因此,输出是一个完美的方波,具有一个平均电压2.5 V的水平(如果VDD为5V)。如果我们将占空比增加到100%,则持续时间最大(即,ON脉冲占脉冲的整个长度)。结果,全部5V由信号产生。

通过控制占空比,我们可以在PWM信号的输出端产生精确的电压电平,然后可以用于控制电动机的速度或调节LED的亮度,通过固定伺服电机的位置。许多其他事情。

PWM在STM32F103C8T6中

如果你还记得“STM32F103C8T6入门“教程,我已经指出,STM32蓝丸板有15个销钉能够产生PWM信号。STM32F103C8T6中PWM的分辨率为16位I.。最大计数器值为216.,这等于65535。

因此,如果计数器值设置为65535,我们可以实现100%的占空比。如果连接LED和DC风扇,则LED的亮度最大,风扇的速度也是如此。

对于50%的占空比,计数器值必须设置为32767.这将导致最大亮度和最大速度的一半。

以下图像显示了用于各种占空比的PWM信号,以及必须用Arduino的模拟函数写入的计数器的相应值。

如何在STM32F103C8T6占空比中使用PWM

所需的组件

在STM32F103C8T6 MCU中PWM的简单演示中,我将控制简单的直流风扇的速度以及LED的亮度。因此,下面提到该项目所需的组件的完整列表。

电路原理图

以下图像显示了项目的电路图。

如何在STM32F103C8T6电路图中使用PWM

连接解释了

由于我们需要控制DC电机的速度,这是一个高电流器件,我们不应通过电机驱动器直接将电机直接连接到STM32 MCU,而是通过电机驱动器将其连接到STM32 MCU。您可以使用L293D或L298N等专用电机驱动器IC,但我们可以使用ULN2003 IC,这是达林顿阵列IC。

使用ULN2003 IC驱动电动机的限制是您不能反转电机的旋转方向。引脚1到7是输入的(In1到In7),而输出引脚10到16(OUT7到OUT1)。

由于我们仅控制单个电动机,因此电机的负极端子连接到OUT1引脚,而IN1引脚连接到PWM引脚PA8。电动机的正端连接到外部5V电源。

来到LED,LED的阳极连接到另一个PWM引脚PA9,而阴极通过串联220Ω电阻连接到GND。

为了改变输入模拟电压,又转换为PWM信号,10kΩ罐连接到ADC引脚PA0。罐的其他两个端子连接到3.3V和GND。

您可以使用16×2 LCD显示屏来显示ADC和占空比值的值。我还没有实现这一点,但如果遵循我的接口16×2 LCD使用STM32F103C8T6教程,那么您可以轻松实现这一点。

PWM编程STM32蓝丸

首先,引脚PA0,PA8和PA9分别分配给POT,电机PWM和LED PWM。根据其功能初始化PIN作为输入和输出,即在电机引脚和LED引脚都是输出的同时输入POT引脚。

现在,使用ADC功能Analogread读取电位器的值。将此值存储在变量中。现在使用另一个变量,将ADC I.的范围映射到0到4095到PWM占空比范围即0到65535.这将确保我们在PWM信号上获得全系列电压。

使用“模拟程序”功能,使用映射值作为占空比值的PWM信号作为LED和电机。

代码

const int potpin = pa0;
const int ledpin = pa9;
Const Int Motorpin = PA8;

void setup()
{
Pinmode(Potpin,输入);
Pinmode(LEDPIN,输出);
Pinmode(电机,输出);
}

void循环()
{
int adcvalue = analogread(potpin);
int domeCycle = Map(Adcvalue,0,4095,0,65535);
Amplswrite(LEDPIN,DOUNTCYCLE);
Amplswrite(Motorpin,DomeCycle);
}

结论

基于STM32F103C8T6 MCU的STM32蓝丸板中如何使用脉冲宽度调制或PWM的简单演示。

发表评论

您的电子邮件地址不会被公开。

电子机器Favicon.
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map