用STM32F103C8T6蓝色药丸控制伺服电机

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

介绍

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

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

SG90是在小型嵌入式应用中最流行的伺服电机类型之一。甚至我在一些基于Arduino的应用程序中也使用了相同的方法。

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

但我有一个稍大的塔pro MG 996R金属齿轮伺服电机,我一直在使用在另一个机器人应用。我会解释这个伺服电机的规格,你可以按照这个项目,因为它是甚至与较小的SG 90伺服电机。

MG 996R伺服电机简介

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

MG 996R伺服电机

Mg996R的旋转角度在任一方向上大约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,位置0、60和-60可以在脉冲1.5ms、2ms和1ms时设置。

带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蓝色药丸是非常简单的,事实上,如果你有任何经验的接口与Arduino伺服电机,那么编写的代码是非常相似的。但是关于ADC有一件事你需要记住。

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

通过MG 996R伺服电机的规格,最大旋转角度为120度。因此,在程序中,为了将0-4096映射到角度0 - 120,我们必须将ADC的输出值划分为4096/120即34。

如果您有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蓝色丸板在这里实现。一个先进的伺服电机称为MG 996R由TowerPro在这个项目中使用的演示。

发表评论

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