3149|3

71

帖子

0

TA的资源

一粒金砂(高级)

楼主
 

RISC-V MCU开发实战(四) :步进电机 [复制链接]

软件平台: MounRiver Studio(MRS),硬件平台: CH32V103开发板、ULN2003步进电机驱动板、28BYJ-48步进电机,使用GPIO进行步进电机控制。

  1. ULN200328BYJ-48简介

ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN 复合晶体管组成,每一对达林顿都串联一个2.7K 的基极电阻,在5V 的工作电压下它能与TTL CMOS 电路直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。

输入5VTTL电平,输出可达500mA/50V

ULN2003是高耐压、大电流达林顿系列,由七个硅NPN达林顿管组成。 该电路的特点如下: ULN2003的每一对达林顿都串联一个2.7K的基极电阻,5V的工作电压下它能与TTLCMOS电路 直接相连,可以直接处理原先需要标准逻辑缓冲器来处理的数据。

关于步进电机,此处所用电机型号为28BYJ-48(步进电机),减速比为1:64,步进脚为5.625/64度,如果需要转动转动一圈,那么需要 360/5.625*64=4096 个脉冲信号。

步进电机是一种将电脉冲转化为角位移的执行设备。步进电机驱动信号为脉冲信号,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(即步进角)。

我们可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时我们可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的

  1. 硬件连接

CH32V103开发板与ULN2003步进电机驱动板的连接方式如下:

PB6连接驱动板的IN1引脚

PB7连接驱动板的IN2引脚

PB8连接驱动板的IN3引脚

PB9连接驱动板的IN4引脚

  1. MRS中开发流程
  1. 首先新建一个CH32V103C8T6 的工程,这个要与对应芯片对应

 

上图最下方红框中是对选中芯片的资源的简单介绍,方便查询

 

  1. 新建完工程之后,我们打开main.c文件,可以看到主函数只是一些初始化和串口打印,我们自己的主函数逻辑可以添加在打印下面就可以了;
  2. 新建一个hardware的文件夹,右键工程new->folder,填写文件名,点击finish即可,我们可以以同样的方式在hardware目录下再新建SD目录,SPI目录,条理清晰。
  3. SPI目录下,New>Source File,填写文件名gpio.c,内容是电机初始化函数以及调速转向停止函数,在新建个gpio.h文件用来声明函数,这个新的头文件需要添加到头文件寻址路径中,点击菜单栏工程属性配置按钮,在弹出的页面中,如下图,点击绿色加号添加路径即可

 

 

驱动代码如下:

#include "gpio.h"

#include "debug.h"


//#define N 4

#define N 8


//步进电机正反转数组  数组的值,即对应GPIO引脚的值

//单四拍

//uint16_t phasecw[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A.(9-8-7-6)

//uint16_t phaseccw[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D.(6-7-8-9)


////双四拍

//uint16_t phasecw[4] ={0x0300,0x0180,0x00C0,0x0240};// DC-CB-BA-AD.

//uint16_t phaseccw[4]={0x00C0,0x0180,0x0300,0x0240};// AB-BC-CD-DA.


//四相八拍

uint16_t phasecw[8] ={0x0200,0x0300,0x0100,0x0180,0x0080,0x00C0,0x0040,0x0240};// D-DC-C-CB-B-BA-A-AB.

uint16_t phaseccw[8]={0x0040,0x00C0,0X0080,0x0180,0x0100,0x0300,0x0200,0x0240};// A-AB-B-BC-C-CD-D-DA.


//电机初始化函数

void Moto_Init(void)

{

    //步进电机初始化

    // IN1: PB6   a

    // IN2: PB7   b

    // IN3: PB8   c

    // IN4: PB9   d

    GPIO_InitTypeDef GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);


    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 ;

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOB,&GPIO_InitStructure);


    GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );

}


//电机正转函数

//其中,speed的值越大,速度越慢,值越小,速度越快,speed相当于调节脉冲速度

//转动速度和脉冲频率成正比,在此处,延时越小,频率越高

void Motorcw(u8 speed)

{

    uint8_t i=0;


    for(i=0;i<N;i++)

    {

        GPIO_Write(GPIOB,phasecw[i]);

        Delay_Ms(speed);

    }

}


//电机反转函数

void Motorccw(u8 speed)

{

    uint8_t i;

    for(i=0;i<N;i++)

    {

        GPIO_Write(GPIOB,phaseccw[i]);

        Delay_Ms(speed);

    }

}


//电机停止函数

void MotorStop(void)

{

    //GPIO_ResetBits(GPIOB,GPIO_Pin_6 | GPIO_Pin_7 |GPIO_Pin_8 |GPIO_Pin_9 );

    GPIO_Write(GPIOB,0x0000);

}


//电机正转角度

void Motorcw_angle(int angle,int speed)

{

    int i,j;

    j=(int)(angle/0.70312);

    for(i=0;i<j;i++)

    {

        Motorcw(speed);

    }

}


//电机反转角度

void Motorccw_angle(int angle,int speed)

{

    int i,j;

    j=(int)(angle/0.70312);

    for(i=0;i<j;i++)

    {

        Motorccw(speed);

    }

}

 

主函数可以调用我们驱动中的正反转函数来说实现想要的功能

int main(void)

{


    USART_Printf_Init(115200);

    Moto_Init();

    Delay_Init();


    printf("This is Stepper motor driver\r\n");


    Motorcw_angle(360,5);   //步进电机正转角度函数

    MotorStop();

    Delay_Ms(1000);


    Motorccw_angle(360,5);  //步进电机反转角度函数

    MotorStop();

    Delay_Ms(1000);


}

 

代码编辑完成,点击菜单栏编译按钮,在console窗口查看编译结果,无错误,就可以进入到调试去验证逻辑,点击菜单栏调试按钮,如果运行现象和理论不一致,可以通过左下角反汇编窗口,断点,外设寄存器,内核寄存器这几个窗口来配合查找逻辑BUG

 

 

 

小提示,当程序运行到 HardFault_Handler 函数,可以观察Rregister窗口的mepcmtval,mcause三个寄存器,分别代表,进入硬件错误中断前的pc,cpu取到的值,以及进入异常的原因。

 

  1. 验证

将编译好的程序下载到开发版并复位,通过逻辑分析仪对这几个GPIO引脚进行波形采集,具体如下图。将开发板、步进电机驱动板、步进电机连接起来,可看到电机进行正反转。

 

此帖出自单片机论坛

最新回复

感谢分享,图文并茂,收藏下面慢慢研究,加油!!!!   详情 回复 发表于 2024-6-23 16:05
点赞 关注
 

回复
举报

1411

帖子

3

TA的资源

版主

沙发
 

感谢分享!

此帖出自单片机论坛
 
个人签名

没有什么不可以,我就是我,不一样的烟火! 

 

回复

7649

帖子

18

TA的资源

五彩晶圆(高级)

板凳
 

28BYJ-48 太经典了,又便宜,3块钱包邮。

此帖出自单片机论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

419

帖子

0

TA的资源

纯净的硅(中级)

4
 

感谢分享,图文并茂,收藏下面慢慢研究,加油!!!!

此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表