找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC15W408AS单片机五向按键模块控制TB6600驱动步进电机源程序

  [复制链接]
跳转到指定楼层
楼主
ID:422885 发表于 2021-5-2 00:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
10档速度可调,通过五向按键模块控制云台实现上下左右转动。
以下代码一部分是通过网上搜索修改的,有不足的地方请多多指教.
制作出来的实物图如下:


单片机源程序如下:
  1. #include<reg52.h>
  2. //电机1控制引脚     ******芯片:STC15W408AS*****
  3. sbit CLK  = P1^0;
  4. sbit ENA  = P1^1;
  5. sbit DIR  = P1^2;
  6. //电机2控制引脚
  7. sbit CLK1  = P1^3;
  8. sbit ENA1  = P1^4;
  9. sbit DIR1  = P1^5;        
  10. //按键控制端
  11. sbit UP  = P3^2;               //电机1正转
  12. sbit DWN  = P3^3;                   //电机1反转
  13. sbit LFT = P3^4;         //电机2正转
  14. sbit RHT = P3^5;         //电机2反正
  15. sbit SET  = P3^6;           //加速
  16. sbit RST = P3^7;     //减速

  17. unsigned int Tspeed[10]={30,40,60,80,100,200,400,600,800,1000};               //调速等级表
  18. bit CY_status=0;
  19. unsigned int CYCLE=20;
  20. unsigned int cy_count=0;
  21. unsigned PWM_count=0;
  22. void Init_time();
  23. void Key_scan();
  24. void main()
  25. {
  26.         ENA=0;
  27.         CLK=0;
  28.         DIR=0;        
  29.         ENA1=0;
  30.         CLK1=0;
  31.         DIR1=0;                //初始化电机
  32.         Init_time();   //初始化定时器           
  33.         while(1)
  34.         {
  35.                 Key_scan();
  36.         }        
  37. }
  38. void Init_time()                                 //初始化定时器
  39. {
  40.         TMOD |= 0x01;
  41.         TH0=(65536-CYCLE)/256;                  //给time0装初值
  42.         TL0=(65536-CYCLE)%256;
  43.     IE = 0x82;                     //使得time1的优先级高于time0
  44.         TR0=1;                                         //打开中断
  45. }
  46. void Enter_Timer0() interrupt 1                                //进入定时器中断
  47. {
  48.         TH0=(65536-CYCLE)/256;
  49.         TL0=(65536-CYCLE)%256;
  50.         CLK=~CLK;
  51.         CLK1=~CLK1;
  52.         PWM_count++;
  53.         if(PWM_count==(2*cy_count)&&CY_status)
  54.         {
  55.                 PWM_count=0;
  56.                 TR0=0;
  57.                 ENA=0;
  58.                 ENA1=0;
  59.         }        
  60. }

  61. /************************按键扫描程序************************
  62.    功能:读取各按键值,判断是否按下,再处理相应事件
  63.    
  64.    注:按键控制程序,由于按键中断优先级高,且每个按键都设计
  65.        为弹起有效, 所以长时间按住不放会导致电机减速甚至停
  66.            止直至放开按键                     
  67. *************************************************************/
  68. void Key_scan()                                             
  69. {
  70.         static char i=0;
  71.         if(UP==0)                                           //电机1正反转切换
  72.         {
  73.                 if(UP==0)
  74.                 {
  75.                     DIR=1;
  76.                           ENA=1;                  //启动电机
  77.                                 TR0=1;                  //开启中断产生脉冲信号
  78.                         while(!UP);                //按键按下直到放开
  79.                                 ENA=0;                  //关闭电机
  80.                                 TR0=0;                  //关闭中断停止脉冲信号
  81.                                 CY_status=0;  //刷新步进标志位
  82.                 }
  83.         }
  84.         if(DWN==0)                                          
  85.         {
  86.                 if(DWN==0)
  87.                 {
  88.                            DIR=0;
  89.                           ENA=1;                  //启动电机
  90.                                 TR0=1;                  //开启中断产生脉冲信号                        
  91.                         while(!DWN);        //按键按下直到放开
  92.                                 ENA=0;                  //关闭电机
  93.                                 TR0=0;                  //关闭中断停止脉冲信号
  94.                                 CY_status=0;  //刷新步进标志位                        
  95.                 }
  96.         }
  97.         if(LFT==0)                                   //电机2正反转切换
  98.         {        
  99.                 if(LFT==0)
  100.             {
  101.                                 DIR1=1;
  102.                           ENA1=1;                  //启动电机
  103.                                 TR0=1;                  //开启中断产生脉冲信号        
  104.                         while(!LFT);
  105.                                 ENA1=0;                  //关闭电机
  106.                                 TR0=0;                  //关闭中断停止脉冲信号
  107.                                 CY_status=0;  //刷新步进标志位               
  108.                 }
  109.         }
  110.         if(RHT==0)                                   
  111.         {
  112.                 if(RHT==0)
  113.                 {
  114.                                  DIR1=0;
  115.                           ENA1=1;                  //启动电机
  116.                                 TR0=1;                  //开启中断产生脉冲信号        
  117.                         while(!RHT);
  118.                                 ENA1=0;                  //关闭电机
  119.                                 TR0=0;                  //关闭中断停止脉冲信号
  120.                                 CY_status=0;  //刷新步进标志位        
  121.                 }
  122.         }
  123. if(SET==0)                                   //加速
  124.         {               
  125.                 if(SET==0)
  126.             {
  127.                         while(!SET);
  128.                         i--;
  129. ……………………

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

所有代码51hei提供下载:
6键控制TB6600 步进电机.zip (37.1 KB, 下载次数: 129)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:422885 发表于 2021-5-2 09:44 | 只看该作者
正在研究使用ps2摇杆模块替换五向按键模块操作云台,希望有研究过的老师给点意见.
回复

使用道具 举报

板凳
ID:402960 发表于 2021-7-11 00:11 | 只看该作者
可否提供一下原理图
回复

使用道具 举报

地板
ID:1005267 发表于 2022-2-15 15:35 | 只看该作者
键盘扫描也需要花较长时间,看过用定时器来做能节约不少时间,但现在早已忘了怎么做的了
回复

使用道具 举报

5#
ID:650308 发表于 2022-2-19 02:29 | 只看该作者
thank you for sharing
回复

使用道具 举报

6#
ID:399179 发表于 2022-4-13 20:45 来自手机 | 只看该作者
感谢楼主无私奉献!正在学习!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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