0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

将步进电机与STM32F103C8板连接的教程

科技观察员 来源:circuitdigest 作者:Pramoth Thangavel 2022-11-07 15:52 次阅读

步进电机是无刷直流电机,可以小角度旋转,这些角度称为步进。一般步进电机使用200步完成360度旋转,意味着其每步旋转1.8度。步进电机用于许多需要精确旋转运动的设备,如机器人天线、硬盘驱动器等。我们可以通过给出适当的说明将步进电机旋转到任何特定角度。主要有两种类型的步进电机可供选择,单极和双极。单极更容易操作、控制,也更容易获得。在本教程中,我们将步进电机与STM32F103C8(蓝色药丸)板连接。

所需材料

STM32F103C8 (蓝色药丸)

步进电机(28BYJ-48)

ULN2003 集成电路

电位器 10k

面包板

跳线

步进电机 (28BYJ-48)

28BYJ-48 是一款单极步进电机,需要 5V 电源。电机具有4线圈单极性布置,每个线圈的额定电压为+5V,因此使用Arduino,Raspberry Pi和STM32等任何微控制器都相对容易控制。但是我们需要像ULN2003这样的电机驱动IC来驱动它,因为步进电机消耗大电流,可能会损坏微控制器。

poYBAGNouTOAcaulAACKtPpkgRI756.jpg

另一个需要注意的重要数据是步幅角度:5.625°/64。这意味着电机按 8 步顺序运行时每一步移动 5.625 度,完成一整圈需要 64 步(5.625*64=360)。以下数据表中提供了其他规格

pYYBAGNouTaAbZUwAAB7b7VRrg0628.png

ULN2003 电机驱动器 IC

它用于根据从微控制器接收到的脉冲驱动电机。以下是ULN2003的图片图:

poYBAGNouTiATXtKAABQcZ6E12U320.png

引脚(IN1 到 IN7)是输入引脚,(OUT 1 到 OUT 7)是相应的输出引脚。COM 被赋予输出设备所需的正源电压。步进电机的进一步连接在下面的电路图部分给出。

电路图和连接

poYBAGNouUCAQbPrAACrOCxMxRI602.png

以下是上述电路图的连接说明。

STM32F103C8 (蓝色药丸)

如下图所示,PWM引脚以波形(~)表示,有15个这样的引脚可用于步进电机的脉冲输出。我们只需要四个引脚,我们使用(PA0到PA3)。

STM32-Pin-Details_0.png

STM32F103C8 带 ULN2003 电机驱动器 IC

引脚(PA0 至 PA3)被视为与 ULN2003 IC 的输入引脚 (IN1-IN4) 连接的输出引脚。

STM32F103C8的引脚 ULN2003 集成电路引脚
质保 合1
质量保证 IN2
质量保证 HNR
卡塔尔里亚尔 IN4
5V .COM
接地 接地

ULN2003 带步进电机的集成电路 (28BYJ-48)

ULN2003 IC 的输出引脚 (OUT1-OUT4) 连接到步进电机引脚(橙色、黄色、粉红色和蓝色)。

ULN2003 集成电路引脚 步进电机引脚
输出1
输出2 黄色
输出3 粉红色
输出4
.COM

STM32F103C8 带电位计

电位计用于设定步进电机的速度。

电位计 STM32F103C8
左(输入) 3.3
中心(输出) 质保
右(接地) 接地

采用STM32F103C8的旋转步进电机

以下是操作步进电机的几个步骤:

通过改变电位器设置步进电机的速度。

然后通过ARDUINO IDE(工具>串行监视器)或CTRL + SHIFT + M中的串行MONITER以顺时针(+值)或逆时针方向(-值)手动输入旋转步骤。

根据串行监视器中给出的输入值,步进电机中会发生某些旋转步骤。

例如

串行监控器中给出的值 旋转
2048 (360) 克莱克·怀斯
1024 (180)CLK WISE
512 (90)CLK WISE
-2048 (-360)反克利明智
-1024 (-180)反克利明智
-512 (-90)反克利明智

pYYBAGNouU2AMW14AACrF-gWbvY631.jpg

步进电机STM32编程

与前面的教程一样,我们通过USB端口使用Arduino IDE对STM32F103C8进行了编程,而无需使用FTDI编程器。

首先,我们必须包含步进库文件#include ,以便使用步进器函数。

#include

然后我们定义 no。旋转时要完成的步骤,这里我们使用 32,因为我们使用的是全步(4 步序列)所以 (360/32 = 11.25 度)。因此,对于一步,轴移动 11.25 度,即步幅角。在 4 步序列中,一个完整的旋转需要 4 个步骤。

#define STEPS 32

我们还可以使用半步模式,其中有 8 步序列 (360/64=5.625) 步幅。

Steps per revolution = 360 / STEP ANGLE

当我们设置速度时,我们必须从连接到电位计的PA4中获取模拟值。所以我们必须为此声明 pin

const int speedm = PA4

然后,我们将模拟值转换为数字值,将这些值存储在整数类型的变量中,之后我们必须映射ADC值以设置速度,因此我们使用以下语句。在此处了解有关将ADC与STM32配合使用的更多信息

int adc = analogRead(speedm);

int result = map(adc, 0, 4096, 1, 1023);

为了设置速度,我们使用stepper.setSpeed(result);我们的速度范围为 (1-1023)。

我们必须创建如下所示的实例来设置连接到电机的引脚。在这些步骤中要小心,因为大多数步骤在此模式中都会出错。它们给出了错误的模式,因此线圈无法通电。

Stepper stepper(STEPS, PA0, PA2, PA1, PA3);

以下语句用于从串行监视器获取步骤的值。例如,我们需要 2048 个值进行一次完整旋转 (32*64 = 2048),即 64 将是齿轮比,32 将是一次旋转的半步序列。

rotate = Serial.parseInt();

下面的代码用于调用实例并运行电机。如果旋转值为 1,则调用函数步进器一次,完成一次移动。

stepper.step(rotate);

/STM32 stepper motor control code

//CIRCUIT DIGEST


#include // Include the Stepper motor header file

#define STEPS 32 // change this to the number of steps on your motor

const int speedm = PA4; // Pin for input speed

Stepper stepper(STEPS, PA0, PA2, PA1, PA3); // create an instance of the stepper class using the steps and pins

int rotate = 0; //declare variable rotate with 0 for input rotation.

void setup() //Setup() runs only once

{

Serial.begin(9600); //begins serial communication at 9600baud rate

pinMode(speedm,INPUT); //set pin PA4 as input

}


void loop() //loop() runs infinitely

{

if (Serial.available()>0) //Checks if serial data is entered or not in serial monitor

{

rotate = Serial.parseInt(); //gets the value for rotation from serial monitor

int adc = analogRead(speedm); //read analog value from pin PA0

int result = map(adc, 0, 4096, 0, 1023); //maps the result of ADC from (0to4096)with (0to1023)

stepper.setSpeed(result); //sets the speed of motor

stepper.step(rotate); //makes the motor to rotate

Serial.println(rotate); //prints the value you specified to rotate

}

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 步进电机
    +关注

    关注

    149

    文章

    2931

    浏览量

    146084
  • STM32F103C8
    +关注

    关注

    1

    文章

    23

    浏览量

    8014
收藏 人收藏

    评论

    相关推荐

    将伺服电机STM32F103C8连接起来的教程

    在本教程中,我们将了解伺服电机以及如何将伺服与STM32F103C8连接。 还连接了一个电位计来改变伺服电机轴的位置,和一个LCD来显示角
    发表于 11-04 14:49 1949次阅读
    将伺服<b class='flag-5'>电机</b>与<b class='flag-5'>STM32F103C8</b>板<b class='flag-5'>连接</b>起来的教程

    STM32F103C8

    有人用过STM32F103C8吗?CAN总线与它连接时应该接那两个引脚,说明书里没有具体的说法,谢谢啦
    发表于 08-04 20:32

    STM32开发介绍STM32F103C8开发 有资料下载

    本帖最后由 真心朋友 于 2013-6-27 16:08 编辑 STM32F103C8开发(旺旺:fan2012918)宝贝详情一、板子资源一个JLINK\ULINK 20PIN仿真器接口
    发表于 06-18 13:56

    STM32F103C8开发介绍参考资料下载

    本帖最后由 真心朋友 于 2013-6-27 16:28 编辑 STM32F103C8开发(旺旺:fan2012918)宝贝详情一、板子资源一个JLINK\ULINK 20PIN仿真器接口
    发表于 06-18 14:14

    stm32f103c8

    近期买了一块stm32f103c8的系统,苦于没有对应资料学习,哪位神给介绍下。网上找过很多资料,可差不多都是和指定开发相关的,不好入门啊。{:23:}
    发表于 07-14 10:57

    基于stm32f103c8的温度超限报警

    求一个能在开发上运行的程序,要求实现温度超限报警,单片机stm32f103c8,温度传感器ds18b20,led数码管显示温度,那位大神能帮忙编个c语言程序,感激不尽,急求。。。。。图为开发
    发表于 03-27 20:05

    stm32f103C6和stm32f103C8 都是48脚封装的芯片 可以直接替代吗?

    stm32f103C6和stm32f103C8 都是48脚封装的芯片 可以直接替代吗?
    发表于 11-04 16:55

    移植Alios Things 到STM32F103C8

    python配置Image开发环境pip阿里云大使aliosthingsstm32f103c8移植Alios Things 到STM32F103C8一:开发环境搭建1.1、配置编译环境:您可以尝试
    发表于 10-17 11:38

    stm32f103C8如何移植FreeRTOS

    命名为FreeRTOS。选择芯片STM32F103C8。3、搭建工程框架,打开官方固件库包:1)STM32F10x_StdPeriph_Lib_V3.5.0\Libraries...
    发表于 08-24 07:57

    如何解决STM32F103C8 PB14 PB15PWM不输出的问题?

    如何解决STM32F103C8 PB14 PB15PWM不输出的问题?
    发表于 11-26 07:39

    请教大神STM32F103C8开发上的虚拟串口该怎样去移植呢

    请教大神STM32F103C8开发上的虚拟串口该怎样去移植呢?
    发表于 12-08 07:08

    STM32F103C8的OTA升级流程是怎样的

    OTA升级流程本文档以 STM32F103C8 为例。此 MCU 的 flash 共 64k,分为 64 页,每页 1k ,flash 的擦除需要以页为单位进行。OTA 实现的思路是,代码分为
    发表于 01-24 08:13

    如何利用STM32F103C8芯片实现流水灯的亮灭?

    什么是STM32F103C8T6?如何利用STM32F103C8芯片实现流水灯的亮灭?
    发表于 01-26 08:15

    怎样在STM32F103C8上去移植FreeRTOS操作系统呢

    怎样去新建一个STM32F103C8的工程呢?怎样在STM32F103C8上去移植FreeRTOS操作系统呢?有哪些移植步骤?
    发表于 02-23 07:53

    IAP在STM32F103C8上的实现

    IAP 在STM32F103C8上的实现已经在[STM32F103C8在应用编程(IAP)介绍及实现]具体讲解了。但由于STM32F030C8STM32F103C8在中断向量表上的设
    发表于 03-02 07:34