找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8134|回复: 18
打印 上一主题 下一主题
收起左侧

雷赛55步进电机驱动器stm32单片机控制源程序

  [复制链接]
跳转到指定楼层
楼主
12864显示坐标,按键输入坐标电机移动xmm,精度误差在1mm以内,原创程序

stm32单片机源程序如下:
  1. #include "sys.h"       
  2. #include "delay.h"       
  3. #include "led.h"
  4. #include "smotor.h"
  5. #include "keyb.h"
  6. #include "beep.h"
  7. #include "12864.h"
  8. #include "keym.h"
  9. #include "stmflash.h"

  10. //int datatemp[3]={0};

  11. int main(void)
  12. {
  13. //         u8 exit=0;
  14. //         int obuf[3]={1,0};
  15.     delay_init();   //延时初始化
  16.         LED_Init();    //初始化灯
  17.         BEEP_Init();   //蜂鸣器初始化
  18.         Init_key();   //初始化矩阵键盘
  19.     Init_Motor(); //初始化步进驱动器口
  20.         LCD_Init_12864(); //液晶初始化
  21.         while(1)
  22.         {
  23. //                 STMFLASH_Write(FLASHADDR,(u16*)obuf,3);
  24. //         STMFLASH_Read(FLASHADDR,(u16*)datatemp,3);
  25.                 keyscan(); //获取键值输入步数       
  26.             dis_step(); //显示设置的向下转步数
  27.                 read_flash();
  28.                 SET_XYZ(xm,ym,zm,XMSPEED);
  29.                
  30.         }
  31.          
  32. }

复制代码

  1. #include "smotor.h"
  2. #include "delay.h"
  3. #include "12864.h"
  4. #include "keym.h"

  5. #define jiasu_time 10                //加速次数 即加速区段距离
  6. #define sudu_beilv 3                //加速倍率


  7. int m_x=0,m_y=0,m_z=0;    //初始坐标

  8. /****初始化PE0-8口作为驱动器DIR/PUL/EN口****/
  9. void Init_Motor(void)  
  10. {
  11.     GPIO_InitTypeDef  GPIO_InitStructure;
  12.        
  13.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);         //使能PD端口时钟
  14.                
  15.          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|  \
  16.                                        GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
  17.        
  18.          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽输出
  19.          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度为50MHz
  20.          GPIO_Init(GPIOD, &GPIO_InitStructure);                                         //根据设定参数初始化GPIO
  21. }
  22. void SET_XYZ(int x,int y,int z,u16 Speed)
  23. {
  24.     int tmp,j;
  25.         unsigned char M_speed,jiasu_step;
  26.         u8 runfast;
  27.         jiasu_step=Speed/(jiasu_time*sudu_beilv);//10mm,速度加一倍
  28.         if(jiasu_step<1)jiasu_step=1;

  29.         if(x!=m_x)
  30.         {
  31.                 if(x>m_x)         {        DIRX1; tmp=x-m_x;}
  32.                 else                {        DIRX0; tmp=m_x-x;}
  33.                 //--加速标志-------------------------------------------------
  34.                 if(tmp>11)        runfast=1;else runfast=0;        //大于20mm 启动加速功能
  35.                 M_speed=Speed;
  36.                 for(;tmp>0;tmp--)
  37.                 {       
  38.                         for(j=0;j<200/3;j++)                           //1毫米
  39.                         {
  40. //                                        if(x<m_x)                                       
  41. //                                                {m_x=0;break;}
  42.                                 PULX1;delay_us(M_speed*100);
  43.                                 PULX0;delay_us(M_speed*100);
  44.                         }
  45.                         if(runfast)
  46.                         {
  47.                                 if(tmp<10)                        //减速区长度
  48.                                         M_speed+=jiasu_step;                //减速
  49.                                 else
  50.                                 {
  51.                                         if(M_speed>Speed/sudu_beilv)                //速度最高限 us=900
  52.                                                 M_speed-=jiasu_step;                //加速                               
  53.                                 }
  54.                         }
  55.                 }
  56.                 m_x=x;
  57.         }
  58.         if(y!=m_y)
  59.         {
  60.                 if(y>m_y)         {        DIRY1; tmp=y-m_y;}
  61.                 else                {        DIRY0; tmp=m_y-y;}
  62.                 //--加速标志-------------------------------------------------
  63.                 if(tmp>11)        runfast=1;else runfast=0;        //大于20mm 启动加速功能
  64.                 M_speed=Speed;
  65.                 for(;tmp>0;tmp--)
  66.                 {
  67.                         for(j=0;j<200/3;j++)
  68.                         {
  69. //                                        if(y<m_y)                                       
  70. //                                                {m_y=0;break;}           //         Y_EN = 0;
  71.                                 PULY1;delay_us(M_speed*100);
  72.                                 PULY0;delay_us(M_speed*100);       
  73.                         }
  74.                         if(runfast)
  75.                         {
  76.                                 if(tmp<10)                        //减速区长度
  77.                                         M_speed+=jiasu_step;                //减速
  78.                                 else
  79.                                 {
  80.                                         if(M_speed>Speed/sudu_beilv)                //速度最高限
  81.                                         M_speed-=jiasu_step;                //加速                               
  82.                                 }
  83.                         }
  84.                 }
  85.                 m_y=y;
  86.         }
  87.         if(z!=m_z)
  88.         {
  89.                 if(z>m_z)         {        DIRZ1; tmp=z-m_z;}
  90.                 else                {        DIRZ0; tmp=m_z-z;}
  91.                 //--加速标志-------------------------------------------------
  92.                 if(tmp>11)        runfast=1;else runfast=0;        //大于20mm 启动加速功能
  93.                 M_speed=Speed;       
  94.                 for(;tmp>0;tmp--)
  95.                 {
  96.                         for(j=0;j<200/3;j++)
  97.                         {
  98. //                                        if(z<m_z)                                       
  99. //                                                {m_z=0;break;}
  100.                                 PULZ1;delay_us(M_speed*100);
  101.                                 PULZ0;delay_us(M_speed*100);
  102.                         }
  103.                         if(runfast)
  104.                         {
  105.                                 if(tmp<10)                        //减速区长度
  106.                                         M_speed+=jiasu_step;                //减速
  107.                                 else
  108.                                 {
  109.                                         if(M_speed>Speed/sudu_beilv)                //速度最高限
  110.                                         M_speed-=jiasu_step;                //加速                               
  111.                                 }
  112.                         }
  113.                 }
  114.                 m_z=z;
  115.         }
  116.        
  117. //        if(k!=m_k)
  118. //        {
  119. //                K_EN = 0;
  120. //                if(k>m_k)         {        K_CW = 1; tmp=k-m_k;}
  121. //                else                {        K_CW = 0; tmp=m_k-k;}
  122. //                //--加速标志-------------------------------------------------
  123. //                if(tmp>20)        runfast=1;else runfast=0;        //大于20mm 启动加速功能
  124. //                M_speed=Speed;       
  125. //                for(;tmp>0;tmp--)
  126. //                {
  127. //                        for(j=0;j<200*16/6;j++)
  128. //                        {
  129. //                                if(Kxianwei==0)
  130. //                                        if(k<m_k)                                       
  131. //                                                {m_k=0;K_EN = 1;break;}
  132. //                                K_CLK =1;delay_us(30);
  133. //                                K_CLK =0;delay_us(30);
  134. //                        }
  135. //                        if(runfast)
  136. //                        {
  137. //                                if(tmp<30)                        //减速区长度
  138. //                                        M_speed+=jiasu_step;                //减速
  139. //                                else
  140. //                                {
  141. //                                        if(M_speed>Speed/sudu_beilv)                //速度最高限
  142. //                                        M_speed-=jiasu_step;                //加速                               
  143. //                                }
  144. //                        }
  145. //                }
  146. //                K_EN = 1;
  147. //                m_k=k;
  148. //        }
  149.         
  150. }

  151. ……………………

  152. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
SMOTOR.rar (284.74 KB, 下载次数: 212)


评分

参与人数 2黑币 +59 收起 理由
lxj199610 + 9 赞一个!
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:343367 发表于 2018-9-20 09:07 | 只看该作者
东西挺好
回复

使用道具 举报

板凳
ID:399702 发表于 2018-10-2 09:48 | 只看该作者
问下,是32什么型号的单片机
回复

使用道具 举报

地板
ID:337189 发表于 2018-10-6 10:10 | 只看该作者
谢谢,正在写这方面。可以作为参考。
回复

使用道具 举报

5#
ID:151749 发表于 2018-10-31 10:48 | 只看该作者
谢谢提供!
回复

使用道具 举报

6#
ID:421201 发表于 2018-11-5 17:35 | 只看该作者
谢谢,正在找这方面的资料,值得参考
回复

使用道具 举报

7#
ID:428580 发表于 2018-11-18 11:15 | 只看该作者
不错哈!
回复

使用道具 举报

8#
ID:138247 发表于 2019-6-23 09:18 | 只看该作者

正在搞这个,资料非常有用啊。。。
回复

使用道具 举报

9#
ID:282095 发表于 2019-6-23 10:23 | 只看该作者
请问楼上所说的是AUTONICS KR-55MC步进电机驱动器吗
回复

使用道具 举报

10#
ID:33544 发表于 2019-6-24 10:48 | 只看该作者
正在找这方面的资料,值得参考
回复

使用道具 举报

11#
ID:235329 发表于 2019-6-26 14:55 | 只看该作者
挺好的程序,很全用的stm32F1
回复

使用道具 举报

12#
ID:421536 发表于 2019-8-1 15:50 | 只看该作者
正要查找这方面的资料
回复

使用道具 举报

13#
ID:421536 发表于 2019-8-1 15:54 | 只看该作者
好东西,正要找这方面的资料
回复

使用道具 举报

14#
ID:606788 发表于 2019-9-5 08:47 | 只看该作者
谢谢分享,可以学习一下这方面的
回复

使用道具 举报

15#
ID:96552 发表于 2019-10-11 17:14 | 只看该作者
好资料,加上电机及丝杆参数,就好玩了
回复

使用道具 举报

16#
ID:59423 发表于 2019-10-18 10:58 | 只看该作者
资料非常有用,非常棒的程序。
回复

使用道具 举报

17#
ID:59423 发表于 2019-10-18 13:09 | 只看该作者
我用的驱动器是DM542,非常适用。
回复

使用道具 举报

18#
ID:582339 发表于 2020-4-18 21:33 | 只看该作者
谢谢!正好需要
回复

使用道具 举报

19#
ID:164385 发表于 2021-3-25 20:29 | 只看该作者
很好的代码,学习了
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表