找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于labview的步进电机驱动正转,反转,加速带数码管显示,protues仿真

[复制链接]
跳转到指定楼层
楼主
本人学生一枚,第一次发贴,也不图啥。这是这个是我学习过程做过的一个小项目,程序和仿真都做出来了。

{`_(B%@_F4I}R(RW5H[KATW.png (291.2 KB, 下载次数: 31)

发送F0,F1,F2,F3..控制电机

发送F0,F1,F2,F3..控制电机

OG[[(`6YH197J8X713EHOW2.png (348.9 KB, 下载次数: 29)

COM口不一样,波特率,数据位,校验位要一样

COM口不一样,波特率,数据位,校验位要一样

}9$3@ORC475%1RXY{V9RLNV.png (176.66 KB, 下载次数: 26)

}9$3@ORC475%1RXY{V9RLNV.png

DAD$P~MQP(NS_NR5@_VWOON.png (124.44 KB, 下载次数: 33)

后面板

后面板

51hei.png (5.32 KB, 下载次数: 25)

51hei.png

labview实训123.rar

128.6 KB, 下载次数: 77, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:328014 发表于 2020-4-26 23:41 | 只看该作者
楼主的单片机源程序:
  1. //******************************************************************************************//
  2. //        程序名称:28BYJ-48步进电机测试程序
  3. //        功能描述:步进电机分别以单四拍、双四拍、八拍驱动方式驱动,正反转各360度
  4. //        单片机:  AT89S52,FOSC=12MHz
  5. //        硬件连接:P1.0----INA
  6. //            P1.1----INB
  7. //            P1.2----INC
  8. //            P1.3----IND
  9. //            驱动板的驱动电压和芯片逻辑供电电压均为5V;         
  10. //            步进电机红线接+5V驱动电压,橙黄粉蓝分别接OUT1、OUT2、OUT3、OUT4,
  11. //            注意外接电源要与单片机共地。
  12. //        维护记录:2012.11.2 双龙电子科技
  13. //*****************************************************************************************//
  14. #include<reg52.h>
  15. #include <string.h>
  16. #define uint unsigned int
  17. #define uchar unsigned char
  18. uint i,j,k;
  19. uint N=128;//主轴旋转度数设置,度数D=N*45/减速比,采用1:16减速比的步进电机,旋转度数即为D=128*45/16=360度
  20. unsigned int cycle=0,Ti=2048;

  21. uchar code single_pos[4]={0x07,0x0b,0x0d,0x0e};//单四拍驱动方式正转表 D-C-B-A
  22. uchar code single_rev[4]={0x0e,0x0d,0x0b,0x07};//单四拍驱动方式反转表 A-B-C-D
  23. uchar code double_pos[4]={0x06,0x03,0x09,0x0c};//双四拍驱动方式正转表 AD-DC-CB-BA
  24. uchar code double_rev[4]={0x0c,0x09,0x03,0x06};//双四拍驱动方式反转表 AB-BC-CD-DA
  25. uchar code eight_pos[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};//八拍驱动方式正转表 AD-D-DC-C-CB-B-BA-A
  26. uchar code eight_rev[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};//八拍驱动方式反转表 A-AB-B-BC-C-CD-D-DA

  27. void m_single_pos();
  28. void m_single_rev();
  29. void m_double_pos();
  30. void m_double_rev();
  31. void m_eight_pos();
  32. void m_eight_rev();

  33. void delay_us(unsigned int aa);
  34. unsigned char tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  35. unsigned char init=0,t=0;
  36. unsigned char m,tt;
  37. unsigned char rxch;//????
  38. unsigned char ReceiveFinish,ReceiveStart,ReceiveCnt;
  39. unsigned char RxdBuf;
  40. unsigned int TxdBuf[3];
  41. bit read_flag=0;


  42. /********************??z??**************************************/
  43. void delay(uint z)
  44. {
  45.         uint x,y;
  46.         for(x=z;x>0;x--)
  47.                 for(y=110;y>0;y--);
  48. }
  49. /*******************???????(N*45/16)?***********************/


  50. void init_serialcom(void)//????????
  51. {
  52.         SCON=0x50;        //UART???1,8???, ????
  53.         TMOD=0x20;        //???1???2,8?????
  54.         PCON=0x80;        //SMOD=1;
  55.         TH1 = 0xFA;        //Baud:9600fosc=11.0592MHz//TL1 = 0XFA;
  56.         IE |= 0x90;        //Enable Serial Interrupt
  57.         TR1 = 1;                 //timer 1 run

  58.         TH0=0X3C;
  59.         TL0=0XB0;
  60.         TR0=1;
  61.         ET0=1;
  62. }        


  63. void serial_isr(void) interrupt 4 //????????
  64. {
  65.         unsigned char Rxdtemp;
  66.         if(RI)
  67.         {
  68.                 RI=0;
  69.                 Rxdtemp = SBUF ;
  70.                 RxdBuf=Rxdtemp;
  71.         }
  72. }
  73. void send_msg(char * msg)
  74. {
  75.     int i;
  76.     i = 0;
  77.     while(msg[i] != '\0')
  78.     {
  79.         SBUF=msg[i];
  80.                                 while(!TI);  //?????????  
  81.                                         TI=0;
  82.         i++;
  83.     }
  84. }

  85. void time0_isr(void) interrupt 1
  86. {
  87.         TH0=0X3C;
  88.         TL0=0XB0;
  89. //        pwm=1;
  90.         t++;
  91.         if(t==20)
  92.         {
  93.                 t=0;
  94. //                pwm=0;
  95.                 TH0=0X3C;
  96.                 TL0=0XB0;
  97.         }
  98. }
  99. void send_char_com(char ch) //?????????
  100. {
  101.         SBUF=ch;
  102.         while(!TI);  //?????????  
  103.                 TI=0;
  104.         ES=1;
  105.         //led=0;
  106.         delay(200);
  107.         //led=1;
  108. }
  109. void main()
  110. {
  111.         char *msg;
  112.         init_serialcom();
  113.         memset(TxdBuf,0,sizeof(TxdBuf));
  114.         msg = "\r\nReceiver is ready! \0";
  115.         send_msg(msg);
  116.         P0=0x00;//数码管初始值
  117.         while(1)
  118.         {
  119.                 switch(RxdBuf)
  120.                         {
  121.                                 case 0xF0: m_single_pos(); break;  
  122.                                 case 0xF1: m_single_rev(); break;
  123.                                 case 0xF2: m_double_pos(); break;
  124.                                 case 0xF3: m_double_rev(); break;       
  125.                                 case 0xF4: m_eight_pos(); break;
  126.                                 case 0xF5: m_eight_rev(); break;
  127.                                 default: break;
  128.                         }
  129.                 }
  130. }

  131. /*******************单四拍驱动正转(N*45/16)度***********************/
  132. void m_single_pos()
  133. {
  134.         P0=tab[0];
  135.         for(k=0;k<N;k++)
  136.         {
  137.                 j=0;
  138.                 for(i=0;i<4;i++)//在单四拍工作方式下,一个脉冲转子转动角度为5.625*2=11.25度,四拍共45度
  139.                 {
  140.                         P1=single_pos[j];
  141.                         delay(5);//适当延时,保证转子转动时间,延时过短会丢拍
  142.                         j++;
  143.                 }
  144.         }
  145. }

  146. /*******************单四拍驱动反转(N*45/16度)***********************/
  147. void m_single_rev()
  148. {
  149.         P0=tab[1];//数码管显示的数
  150.         for(k=0;k<N;k++)
  151.         {
  152.                 j=0;
  153.                 for(i=0;i<4;i++)//在单四拍工作方式下,一个脉冲转子转动角度为5.625*2=11.25度,四拍共45度
  154.                 {
  155.                         P1=single_rev[j];
  156.                         delay(5);
  157.                         j++;
  158.                 }
  159.         }
  160. }

  161. /*******************双四拍驱动正转(N*45/16)度***********************/
  162. void m_double_pos()
  163. {
  164.         P0=tab[2];
  165.         for(k=0;k<N;k++)
  166.         {
  167.                 j=0;
  168.                 for(i=0;i<4;i++)//在双四拍工作方式下,一个脉冲转子转动角度为5.625*2=11.25度,四拍共45度
  169.                 {
  170.                         P1=double_pos[j];
  171.                         delay(8);
  172.                         j++;
  173.                 }
  174.         }
  175. }
  176. /*******************双四拍驱动反转(N*45/16)度***********************/
  177. void m_double_rev()
  178. {
  179.         P0=tab[3];
  180.         for(k=0;k<N;k++)
  181.         {
  182.                 j=0;
  183.                 for(i=0;i<4;i++)//在双四拍工作方式下,一个脉冲转子转动角度为5.625*2=11.25度,四拍共45度
  184.                 {
  185.                         P1=double_rev[j];
  186.                         delay(8);
  187.                         j++;
  188.                 }
  189.         }
  190. }
  191. /*******************八拍驱动正转(N*45/16)度***********************/
  192. void m_eight_pos()
  193. {
  194.         P0=tab[4];
  195.         for(k=0;k<N;k++)
  196.         {
  197.                 j=0;
  198.                 for(i=0;i<8;i++)//在八拍工作方式下,一个脉冲转子转动角度为5.625度,八拍共45度
  199.                 {
  200.                         P1=eight_pos[j];
  201.                         delay(2);
  202.                         j++;
  203.                 }
  204.         }
  205. }
  206. /*******************八拍驱动反转(N*45/16)度***********************/
  207. void m_eight_rev()
  208. {
  209.         P0=tab[5];
  210.         for(k=0;k<N;k++)
  211.         {
  212.                 j=0;
  213.                 for(i=0;i<8;i++)//在八拍工作方式下,一个脉冲转子转动角度为5.625度,八拍共45度
  214.                 {
  215.                         P1=eight_rev[j];
  216.                         delay(2);
  217.                         j++;
  218.                 }
  219.         }
  220. }

  221. /****************????******************************/
  222. void delay_us(unsigned int aa)
  223. {
  224.         while(aa--);       
  225. }
复制代码
回复

使用道具 举报

板凳
ID:725525 发表于 2020-5-6 10:29 | 只看该作者
666,还可以与labview联合仿真
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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