当前位置: 首页 > news >正文

4.DSP学习记录之直流电机和步进电机驱动

基于TI 28335

  • 一、电机类型及驱动方法
    • 1.直流电机及驱动电路
    • 2.步进电机及驱动电路
      • (1)简介
      • (2)励磁驱动方式
      • (3)驱动电路
  • 二、软件实现
    • 1.直流电机
    • 2.步进电机

一、电机类型及驱动方法

1.直流电机及驱动电路

(1)简介
直流电机的驱动较为简单,需要注意的是通常不建议用IO口直接驱动电机,因为电流较小,难以驱动,而且有可能会烧毁IO,故通常使用一个驱动芯片进行驱动
关于电机调速部分后面介绍

(2)驱动芯片:TC1508S(双通道直流马达驱动器)
驱动逻辑:在这里插入图片描述
芯片管脚定义
在这里插入图片描述
该芯片可驱动两路电机:通过INA、INB(GPIO2、GPIO3)驱动电机1;INC、IND(GPIO4、GPIO5)驱动电机2
与控制芯片电路连接:在这里插入图片描述

在这里插入图片描述

2.步进电机及驱动电路

(1)简介

步进电机不能直接接上电压就驱动,步进电机是靠脉冲电流信号来驱动的
举例:某步进电机旋转一圈需要200个脉冲信号,则每个脉冲信号能够使得步进电机旋转1.8°
步进电机的正反转由脉冲信号灯的方向控制

步进电机有三线式四线式等,根据每次励磁脉冲的个数区分控制方式:一相励磁、二相励磁等

(2)励磁驱动方式

a.一相励磁(每次只有一相有脉冲)的实现:在这里插入图片描述
b.二相励磁(最常用):在每一瞬间,步进电动机有两个线圈同时导通:加粗样式
每送一个信号,电机旋转1.8°
c.一二相励磁(分辨率高, 运转平滑):为一相励磁与二相励磁交替导通
每送一次励磁信号, 步进电机旋转 0.9°
在这里插入图片描述
注意:以上三种励磁驱动方式,若要反向旋转,则反向送脉冲即可

(3)驱动电路

驱动芯片:ULN2003(上一篇中介绍的反相器)
电路连接和直流电机一样,控制端口为:GPIO2、GPIO3、GPIO4、GPIO5在这里插入图片描述
而硬件电路的连接如下图:
在这里插入图片描述

二、软件实现

1.直流电机

功能:通过三个按键控制电机正转反转停车
dc_moter.c文件:

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File#include "beep.h"
#include "beep.h"void DC_Moter_Init(void)
{EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;//2.3GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;GpioCtrlRegs.GPADIR.bit.GPIO2=1;GpioCtrlRegs.GPAPUD.bit.GPIO2=0;GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;GpioCtrlRegs.GPADIR.bit.GPIO3=1;GpioCtrlRegs.GPAPUD.bit.GPIO3=0;GpioDataRegs.GPACLEAR.bit.GPIO2=1;GpioDataRegs.GPACLEAR.bit.GPIO3=1;EDIS;
}void Moter_Forward(void)
{GpioDataRegs.GPASET.bit.GPIO2=1;GpioDataRegs.GPACLEAR.bit.GPIO3=1;
}void Moter_Backward(void)
{GpioDataRegs.GPACLEAR.bit.GPIO2=1;GpioDataRegs.GPASET.bit.GPIO3=1;
}void Moter_Stop(void)
{GpioDataRegs.GPASET.bit.GPIO2=1;GpioDataRegs.GPASET.bit.GPIO3=1;
}

main.c文件:

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
#include "beep.h"
#include "Key.h"
#include "LED.h"
#include "dc_moter.h"void main()
{InitSysCtrl();Key_Init();DC_Moter_Init();char key_num = 0;while(1){key_num = Key_Scan(0);switch(key_num){case 1:Moter_Forward();break;case 2:Moter_Backward();break;case 3:Moter_Stop();break;}}
}

2.步进电机

编程思路:
本实验采用二相励磁来驱动步进电机
步进电机的驱动需要持续的输出电平,因为考虑到对四个IO口进行操控,可以使用对整个GPIOA的32位寄存器进行all位写入来控制
首先,定义步进电机前进和后退的励磁逻辑数组
然后在按键控制下在循环中进行连续写入实现连续脉冲,间隔时间用完成
状态编码如下图关系:
在这里插入图片描述
step_Moter.c文件:(在直流基础上改的,原来代码没删)

//该代码为步进电机代码;未命名为step_Moter
#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File#include "beep.h"
#include "dc_moter.h"//定义所需变量
char cnt;
int i =0;
char j = 0;//定义GPIOA的状态
unsigned char Forward_Array[] = {0xfff7,0xffdf,0xfffb,0xffef};
unsigned char Backword_Array[] = {0xffef,0xfffb,0xffdf,0xfff7};//该步进电机为四线双极性电机
void Step_Moter_Init(void)
{EALLOW;SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1;//2.3.4.5GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;GpioCtrlRegs.GPADIR.bit.GPIO2=1;GpioCtrlRegs.GPAPUD.bit.GPIO2=0;GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;GpioCtrlRegs.GPADIR.bit.GPIO3=1;GpioCtrlRegs.GPAPUD.bit.GPIO3=0;GpioCtrlRegs.GPAMUX1.bit.GPIO4=0;GpioCtrlRegs.GPADIR.bit.GPIO4=1;GpioCtrlRegs.GPAPUD.bit.GPIO4=0;GpioCtrlRegs.GPAMUX1.bit.GPIO5=0;GpioCtrlRegs.GPADIR.bit.GPIO5=1;GpioCtrlRegs.GPAPUD.bit.GPIO5=0;GpioDataRegs.GPACLEAR.bit.GPIO2=1;GpioDataRegs.GPACLEAR.bit.GPIO3=1;GpioDataRegs.GPACLEAR.bit.GPIO4=1;GpioDataRegs.GPACLEAR.bit.GPIO5=1;EDIS;
}//步进电机
void Step_Moter_Forward(void)
{cnt = 256;while(cnt--){for(j=0;j<4;j++){GpioDataRegs.GPADAT.all = Forward_Array[j];DELAY_US(5000);}}
}void Step_Moter_Backward(void)
{cnt = 256;while(cnt--){for(j=0;j<4;j++){GpioDataRegs.GPADAT.all = Backword_Array[j];DELAY_US(5000);}}
}void Step_Moter_Stop(void)
{GpioDataRegs.GPADAT.all = 0xffff;
}//直流电机
void Moter_Forward(void)
{GpioDataRegs.GPASET.bit.GPIO2=1;GpioDataRegs.GPACLEAR.bit.GPIO3=1;
}void Moter_Backward(void)
{GpioDataRegs.GPACLEAR.bit.GPIO2=1;GpioDataRegs.GPASET.bit.GPIO3=1;
}void Moter_Stop(void)
{GpioDataRegs.GPASET.bit.GPIO2=1;GpioDataRegs.GPASET.bit.GPIO3=1;
}

main.c文件:

#include "DSP2833x_Device.h"     // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h"   // DSP2833x Examples Include File
#include "beep.h"
#include "Key.h"
#include "LED.h"
#include "dc_moter.h"extern char key_num = 0;void main()
{InitSysCtrl();Key_Init();Step_Moter_Init();while(1){key_num = Key_Scan(0);switch(key_num){case 1:Step_Moter_Forward();break;case 2:Step_Moter_Stop();break;case 3:Step_Moter_Backward();break;}}
}

这儿留一点问题,原来用keil5的时候,在其他文件定义变量之后,在对应头文件声明为全局变量,然后就可以在主函数中调用,但是在CCS6中,我想要实现按下按键2就跳出电机运行,结果编译出错,求有看到这儿的大神解答

http://www.dtcms.com/a/400264.html

相关文章:

  • 苏州做网站的公司怎么把网站放到空间吗
  • 网站建设发展现状免费ppt课件下载网站
  • 站长之家seo查询凡科互动app
  • 推广免费网站创建全国文明城市我们应该怎么做
  • 做网站用花瓣上的图片会侵权吗thinkphp做的教育网站
  • 移动端性能监控探索:鸿蒙 NEXT 探针架构与技术实现
  • 我想在泉州做网站wordpress分类不同模板
  • 凡科删除建设的网站装修材料厂家哪家好
  • 二七区网站建设代码编辑器
  • ESP-32 WIFI ST模式
  • 硬件原理图知识体系
  • 初识seatunnel
  • 自己做网站除了域名还要买什么潍坊网站建设建站
  • 做的网站如何发布申请域名备案
  • 企业网站建设论文wordpress主页加关键词
  • 创意灵感的网站9377游戏盒子
  • 杭州网站设计建设公司培训机构网站设计
  • 52Hz——FreeRTOS学习笔记——任务的挂起和恢复
  • 阐述什么是网站带会员中心的淘宝客wordpress
  • 建设工程规范下载网站网站建设投标评分标准
  • 湛蓝 网站开发辽宁网站建设价格
  • 【论文速递】2025年第27周(Jun-29-Jul-05)(Robotics/Embodied AI/LLM)
  • 抄袭网站案例网站维护是什么职业
  • 企业网站建设北京南充市房地产网官方网站
  • 全面掌握 Py2neo 与 Neo4j:从容器化部署到高级应用实战
  • 网站的简介怎么在后台炒做网站数据库空间大小
  • 合肥网站建设公司代理备案公司网站建设方案书
  • 网站流量 钱免费软件下载公众号
  • 为什么单片机的外接晶振要并连两个电容?
  • html5手机商城网站模板代做毕业设计的网站好