打印

求一TMSF28335串口通信,控制步进电机转速和方向程序

[复制链接]
4750|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Spurs_1|  楼主 | 2015-5-18 13:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,小弟在做毕设,关于F28335与PC机进行串口通信,通过串口发送指令给DSP来控制步进电机的转速和方向。可是,无奈接触DSP不久,怎么不能和PC机进行通信,更别说控制步进电机,特此来求助各位大神,有没有这方面的程序,急急急。。。

相关帖子

沙发
niu1985abc| | 2015-5-18 14:35 | 只看该作者
这么专业的问题,感觉问度娘比较靠谱啊

使用特权

评论回复
板凳
Spurs_1|  楼主 | 2015-5-18 16:43 | 只看该作者
niu1985abc 发表于 2015-5-18 14:35
这么专业的问题,感觉问度娘比较靠谱啊

要是能在百度找到,就不来专业论坛了。。:dizzy: 愁死我了

使用特权

评论回复
地板
Spurs_1|  楼主 | 2015-5-18 16:45 | 只看该作者
自己顶下。。没有做 DSP串口通信 和 驱动步进电机这块的吗?

使用特权

评论回复
5
zhangmangui| | 2015-5-18 21:56 | 只看该作者
问题比较多啊

看看我的相关分享

【快乐分享】基于DSP2812的运动控制平台

使用特权

评论回复
6
zhangmangui| | 2015-5-18 21:57 | 只看该作者
你分开一步一步来完成  不要把问题集中到一块   这样影响你的进度
TI提供的controlSUITE里面应该有SCI的工程   基于它你先实现自发自收

使用特权

评论回复
7
zhangmangui| | 2015-5-18 21:59 | 只看该作者
接下来单独控制电机    也就是步进电机    多看看 步进电机的原理    和驱动原理  
建议你用IO口模拟去控制   用事件管理器更麻烦   一时半会弄不出来

使用特权

评论回复
8
zhangmangui| | 2015-5-18 22:00 | 只看该作者
你的硬件基础应该有吧    比如SCI到PC机的连接   
怎么让步进电机转起来    怎么细分等问题

使用特权

评论回复
9
comeon201208| | 2015-5-18 22:37 | 只看该作者
转速主要是靠PWM信号的占空比来实现的。

使用特权

评论回复
10
zhangjin_comeon| | 2015-5-18 23:18 | 只看该作者
串口我觉得还是比较容易实现的吧    TI的例程就可以帮你实现   

使用特权

评论回复
11
zhangjin_comeon| | 2015-5-18 23:19 | 只看该作者
步进电机只需要转起来  应该比较容易   GPIO模拟很简单

使用特权

评论回复
12
zhangjin_comeon| | 2015-5-18 23:19 | 只看该作者
电机驱动用的啥   

使用特权

评论回复
13
小群儿| | 2015-5-19 01:46 | 只看该作者
提醒,注意查看串口线的的定义,我第一次的时候买的串口线收与发反了

使用特权

评论回复
14
Spurs_1|  楼主 | 2015-5-19 09:57 | 只看该作者
zhangmangui 发表于 2015-5-18 21:56
问题比较多啊

看看我的相关分享

#include "DSP28x_Project.h"     // Device Headerfile and Examples Include File
#include"SCI.h"

extern void sci_init(Uint16 channel);
Uint16 RV_1;  // RV_1定义为接收字符
extern void Step_dianji_1(void);  //电机正转
extern void Step_dianji_2(void);  //电机反转
//==========函数声明======
interrupt void scicTx_isr(void);  //发送中断
interrupt void scicRX_isr(void);   //接收中断
interrupt void scicTx_isr()
    {
     PieCtrlRegs.PIEACK.all|=M_INT8;  //
     }
interrupt void scicRx_isr()
    {
     RV_1=sci_recvonechar(SCIC);

     PieCtrlRegs.PIEACK.all|=M_INT8;  //
    }




void main(void)
{


   /*********begin*******************/
  // Uint16 ReceivedChar;
   /*********end********************/
  // char *msg;


   InitSysCtrl();  // 系统初始化
   DINT;  //禁止CPU中断
   InitPieCtrl();
   IER = 0x0000;
   IFR = 0x0000;
   InitPieVectTable();
   DELAY_US(1000L);
   InitScicGpio() ;
   //init SCIC
   sci_init(SCIC);
   EALLOW;
   //PieVectTable.SCITXINTA=&sciaTx_isr;
     //PieVectTable.SCITXINTA=&sciaRx_isr;
     //PieVectTable.SCITXINTB=&scibTx_isr;
    //PieVectTable.SCITXINTA=&scibTx_isr;
      PieVectTable.SCITXINTC=&scicTx_isr;
      PieVectTable.SCIRXINTC=&scicRx_isr;
      EDIS;
      PieCtrlRegs.PIECTRL.bit.ENPIE=1;    //Enable
     //IER|=M_INT9;
      IER|=M_INT8;                        //Enable PIEINT8(SCIC)
     // PieCtrlRegs.pieier9.bit.INTx1=1
     // PieCtrlRegs.pieier9.bit.INTx2=1
     // PieCtrlRegs.pieier9.bit.INTx3=1
      // PieCtrlRegs.pieier9.bit.INTx4=1
      PieCtrlRegs.PIEIER8.bit.INTx5=1;    // SCI_RX_INT
   PieCtrlRegs.PIEIER8.bit.INTx6=1;    //     _TX_
   EINT;
   ERTM;
   sci_sendonechar(SCIC,'A');
   //sci_sendlistchar(SCIC,"Hello\r\n");
   for(;;)
   {
     if(RV_1=='A')
          {Step_dianji_1();
          sci_sendonechar(SCIC,'B');}
     if(RV_1=='C')
           {Step_dianji_2();
          sci_sendonechar(SCIC,'D');}
   }
}   // end of main

void sci_init(Uint16 channel)
{
  //-----初始化SCIC-----
if(channel== SCIC)
     {
                    //初始化用到的GPIO引脚为外设模式
       ScicRegs.SCICCR.all=0x07;        //  1位停止位,禁止内部回路功能,无奇偶校检位

       ScicRegs.SCICTL1.all=0x03;        //使能TX,RX,使能SCICLK
      ScicRegs.SCIHBAUD=0x1;          //9600波特率 LSPCLK=37.5MHhz
      ScicRegs.SCILBAUD=0xE7;

      ScicRegs.SCICTL2.bit.RXBKINTENA=1;  //
      ScicRegs.SCICTL2.bit.TXINTENA=1;    //

     }
}
  //* 通过指定的SCI端口发送一个字符串
  //***********
  void sci_sendonechar(Uint16 channel,Uint16 data)
      {
       ScicRegs.SCITXBUF=data;
       while(ScicRegs.SCICTL2.bit.TXRDY==0); //等待,直到SCITXBUF可以接收下一个数据
       }


// 存储指定SCI端口所接收到的数据
// *********************************
Uint16 sci_recvonechar(Uint16 channel)
{Uint16 data;
if(channel==SCIC)
   {data=ScicRegs.SCIRXBUF.all;}
     return data;
}
这是我改的 串口程序,电脑串口助手驱动都整好了,就是不能正常收发,步进电机程序还没加入

使用特权

评论回复
15
Spurs_1|  楼主 | 2015-5-19 10:05 | 只看该作者
zhangmangui 发表于 2015-5-18 21:59
接下来单独控制电机    也就是步进电机    多看看 步进电机的原理    和驱动原理  
建议你用IO口模拟去控制 ...

步进电机我会控制,但是这个串口通信无法连接,我这功能就无法实现,我在28335上看到了几个例子,如 Example_2833x_Sci_FFDLB_int  使用它可以跟串口助手建立通信,串口这边显示的许多字符阵,但是我不会改啊。。请问大神有没有 调试好的  串口收发程序,我这一直整不好,,:dizzy:

使用特权

评论回复
16
Spurs_1|  楼主 | 2015-5-19 10:13 | 只看该作者
zhangjin_comeon 发表于 2015-5-18 23:18
串口我觉得还是比较容易实现的吧    TI的例程就可以帮你实现

可是我调试了几天都没建立好串口通信,该连的都连好了,我用的是28335的学习板子,硬件上应该没问题。软件编程我看了很多,接收发送可以使用查询方式或者中断方式,TI的例程我改的总是出错,毕设就我一个人做DSP,手上只有一本28335的书,有问题都不好整,,所以特来求个串口收发程序,步进电机程序我自己可以添加进去,,

使用特权

评论回复
17
Spurs_1|  楼主 | 2015-5-19 10:17 | 只看该作者
小群儿 发表于 2015-5-19 01:46
提醒,注意查看串口线的的定义,我第一次的时候买的串口线收与发反了

串口线的定义?  9针的 口接DSP板子上,USB口接电脑,这应该不会出错吧,我这板子上有 3个串口  J2 J3 J4,我接的 J2,这也影响吧

使用特权

评论回复
18
小群儿| | 2015-5-19 10:28 | 只看该作者
不是,你看一下2、3引脚是否有问题!!!!

使用特权

评论回复
19
lvyunhua| | 2015-5-19 11:33 | 只看该作者
没有问题

使用特权

评论回复
20
小群儿| | 2015-5-19 13:18 | 只看该作者

额,我的意思是让他看一下他的数据接口有没有问题,USB转串口和两端都是串口的线的2脚和3脚有些好像是反的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

9

帖子

0

粉丝