用STM32F103C8T6蓝丸控制伺服电机

在这个项目中,我将向您展示如何将一个伺服电机与STM32F103C8T6蓝色药丸板接口,并使用电位器和单片机内置的PWM功能来控制它。通过理解如何使用STM32控制伺服电机,您可以在几个基于STM32的高级项目中使用这些知识。

介绍

伺服电机是工业自动化的主力。它们常用于工业机器人、自动化设备、数控机床等。伺服电机优于其他电机如步进电机,例如,其精度控制的直线或角度位置(取决于应用)。

谈到嵌入式系统,小型塑料齿轮型伺服电机在爱好者和初学者中非常受欢迎。它们被用于小型机器人,机械臂,太阳能电池板定位和其他相关项目。

该taerpro SG90是一种最流行的类型的伺服电机用于小型嵌入式应用。就连我也在几个基于Arduino的应用程序中使用了相同的功能。

在这个项目中,我将演示一个伺服电机与STM32F103C8T6蓝色药丸板的接口。在实施这个项目的时候,我没有访问到常用的TowerPro SG90伺服电机。

但我有一个略大的TowerPro MG 996R金属齿轮伺服电机,我一直在使用在另一个机器人应用程序。我将解释这个伺服电机的规格,你可以跟随这个项目,因为它是甚至与较小的SG 90伺服电机。

mg996r伺服电机简介

由TowerPro的MG 996R数字伺服电机是一个高扭矩伺服电机与金属齿轮。它的平均失速扭矩为10kg,而SG90为1.8kg。

mg996r伺服电机

Mg996R的旋转角度在任一方向的60度大约120度。与SG90伺服的180度旋转相比,这少于这一点。

以下是MG996R伺服电机的规格清单。

  • 重量- 55 g
  • 扭转扭矩 - 9.4 kgf-cm,在4.8V和11kgf-cm处,6V
  • 电压- 4.8V - 7.2V
  • 运行电流- 500mA - 900mA 6V
  • 摊位电流 - 2.5A在6V

和SG90一样,MG996R也有三个引脚,橙色PWM引脚,红色VCC引脚和棕色接地引脚。PWM信号周期为20ms,在脉冲1.5ms、2ms和1ms时可以设置0、60和-60位置。

具有STM32F103C8T6的接口伺服电机

尽管MG 996R伺服电机更大且强大,但相对于MCU的连接也类似于SG90伺服电机的连接。橙色电线必须连接到MCU的任何PWM引脚。

为了控制位置,可以使用电位计,并且根据ADC的读数(其输入是锅),可以调节旋转角度。

线路图

下图为STM32F103C8T6蓝丸板与伺服电机接口的电路图。

使用STM32F103C8T6电路图控制伺服电机

组件的要求

  • STM32F103C8T6蓝丸板
  • 伺服电机
  • 10 kΩ电位计
  • 连接电线
  • USB来uart.适配器(如果通过UART编程)

连接解释

在这个项目中,我们需要使用STM32F103C8T6单片机的ADC和PWM引脚。下图是STM32F103C8T6单片机的引脚布局。

STM32F103C8T6蓝色丸针布局

正如你所看到的,有10个ADC引脚(PA0 - PA7和PB0 - PB1)和15个PWM引脚(PA0 - PA3, PA6 - PA10, PB0 - PB1, PB6 - PB9)。

因此,使用PA3作为ADC引脚连接POT,使用PA0作为PWM引脚连接伺服电机的PWM引脚。

STM32编程用于伺服电机控制

用STM32F103C8T6 Blue Pill控制伺服电机的代码非常简单,事实上,如果你有任何将伺服电机与Arduino接口的经验,那么编写的代码是非常相似的。但关于ADC你需要记住一件事。

如果你参考STM32F103C8T6 MCU的数据表,你会注意到ADC有12位的分辨率。这意味着STM32F103C8T6的ADC输出的值将在0到2^12之间,即0 - 4096。

来到MG 996R伺服电机的规格,最大旋转角度为120度。因此,在程序中,为了将0-4096映射到角度0 - 120,我们必须将ADC的输出值除以4096/120 i.。

如果您有SG90伺服电机,其最大角度为180度,则必须将ADC的输出划分为22。

代码

下面是伺服电机与STM32F103C8T6单片机接口的简单代码实现。

# include < Servo.h >

int servopin = pa0;
int potpin = pa3;
int potValue = 0;
int servoangle = 0;

伺服myservo;

void setup()


myServo.attach (servoPin);

无效循环()

potValue = analogRead (potPin);
servoAngle = (potValue / 34);
myservo.write(servoangle);
延迟(100);

工作

这个项目的工作很简单。首先,通过STM32蓝丸单片机的ADC读取电位器的值。ADC的输出然后缩放到伺服电机的旋转角度。

使用此值,伺服电机被驱动到该特定角度。或者,您可以在角度0度和120度之间实现完全扫描功能(在MG 996R伺服的情况下)。

结论

用STM32F103C8T6蓝丸板实现了一个简单的伺服电机控制方案。本项目使用了一款由TowerPro公司研发的高级伺服电机MG 996R进行演示。

发表评论

您的电子邮件地址将不会被公布。必需字段被标记

Electronicshub图标
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu