找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机怎么接TB6600驱动器和程序才能实现按键控制?

[复制链接]
跳转到指定楼层
楼主
ID:279485 发表于 2018-1-29 22:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
51单片机怎么接TB6600驱动器和程序才能实现按键控制? 怎么接线 c程序怎么写
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:470961 发表于 2019-1-21 09:04 | 只看该作者
会接,程序怎么写啊?
回复

使用道具 举报

板凳
ID:155507 发表于 2019-1-21 19:06 | 只看该作者
  1. /*************************************************************
  2. * 测试说明
  3. *1、MCU:STC89C52RC
  4. *2、测试频率:12Mhz
  5. *2、编程语言:C51
  6. *2、编译环境:Keil C
  7. *2、功能:全速正转、全速反转、停止、调速运行
  8. ***************************************************************/

  9. #include  <reg52.h> //TB6560输入控制端定义
  10. sbit CLK = P1^0;  //PUL是脉冲
  11. sbit ENA = P1^1;  //ENA是使能
  12. sbit DIR = P1^2;  //DIR是方向
  13. sbit CW = P3^0; //正转运行按键
  14. sbit STOP = P3^1; //停止运行按键
  15. sbit CCW = P3^2; //反转运行按键
  16. sbit ADJ1 = P3^3; //调速运行按键
  17. sbit ADJ2 = P3^4; //调速运行按键
  18. bit Run_Status; //运行状态位标志,
  19. //=0表示电机在停止状态,可以按键正转、反转均可
  20. //=1表示电机在运行状态,不支持正反转按键,只有先停止。防止强行换向带来的电流过大。
  21. unsigned char Run_Dir; //电机运行方向
  22. #define F_DIR 0 //正转
  23. #define B_DIR 1 //反转
  24. unsigned int CYCLE; //周期变量
  25. /************************************************************************************************
  26. ** 函数名称: void Delay(unsigned int cnt)
  27. ** 功能描述: 简单的延时函数
  28. ** 输  入: cnt:0-65535之间的任意整数
  29. ** 输  出: 无
  30. *************************************************************************************************/
  31. void Delay(unsigned int cnt)
  32. {
  33.         while(--cnt);
  34. }

  35. /************************************************************************************************
  36. ** 函数名称: void main(void)
  37. ** 功能描述: 主函数
  38. ** 输  入: 无
  39. ** 输  出: 无
  40. *************************************************************************************************/
  41. void main(void)
  42. {
  43.         Run_Status=0; //=0表示电机在停止状态,可以按键正转、反转均可
  44.         CLK = 0;
  45.         ENA = 0;
  46.         while(1)
  47.         {
  48.                 if(!STOP) //任何时候按停止键,电机停止运行
  49.                 {
  50.                         Delay(1000); //延时去抖动
  51.                         if(!STOP)
  52.                         {
  53.                                 Run_Status=0; //电机正在停止的状态标志
  54.                                 CLK = 0;
  55.                                 ENA = 0;
  56.                                 TR0=0;
  57.                         }
  58.                 }
  59.                 if(!CW && !Run_Status) //按正转键同时电机不是正在运行时,电机正转运行
  60.                 {
  61.                         Delay(1000); //按下延时去抖动
  62.                         if(!CW && !Run_Status)
  63.                         {
  64.                                 Run_Status=1; //电机正在运行的状态标志
  65.                                 DIR = 0; //正转
  66.                                 ENA = 1;
  67.                                 CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100Hz
  68.                                 TMOD |=0x01;
  69.                                 TH0=(65536-CYCLE)/256;
  70.                                 TL0=(65536-CYCLE)%256;
  71.                                 IE= 0x82; //打开中断
  72.                                 TR0=1;
  73.                                 Run_Dir=F_DIR; //电机运行方向正转  
  74.                         }
  75.                 }
  76.                 if(!CCW && !Run_Status) //按反转键同时电机不是正在运行时,电机反转运行
  77.                 {
  78.                         Delay(1000); //延时去抖动
  79.                         if(!CCW && !Run_Status)
  80.                         {
  81.                                 Run_Status=1; //电机正在运行的状态标志
  82.                                 DIR = 1; //反转
  83.                                 ENA = 1;
  84.                                 CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100Hz
  85.                                 TMOD |=0x01;
  86.                                 TH0=(65536-CYCLE)/256;
  87.                                 TL0=(65536-CYCLE)%256;
  88.                                 IE= 0x82; //打开中断
  89.                                 TR0=1;
  90.                                 Run_Dir=B_DIR; //电机运行方向反转
  91.                         }
  92.                 }
  93.                 if(!ADJ1)
  94.                 {
  95.                         Delay(5000); //延时去抖动
  96.                         if(!ADJ1)
  97.                         {
  98.                                 if(CYCLE<20000) CYCLE+=2000;
  99.                                 else CYCLE=1000;
  100.                                 Run_Status=1;
  101.                                 TR0=1;
  102.                         }
  103.                 }
  104.                 if(!ADJ2)
  105.                 {
  106.                         Delay(5000); //延时去抖动
  107.                         if(!ADJ2)
  108.                         {
  109.                                 if(CYCLE>2000) CYCLE-=2000;
  110.                                 Run_Status=1;
  111.                                 TR0=1;
  112.                                
  113.                         }
  114.                 }
  115.         }
  116. }

  117. /***********************************************************************************************
  118. ** 函数名称: Timer0_ISR
  119. ** 功能描述: 定时器0中断处理函数
  120. ** 输  入: 无
  121. ** 输  出: 无
  122. *************************************************************************************************/

  123. void Timer0_ISR(void) interrupt 1 using 1

  124. {
  125.         TH0=(65536-CYCLE)/256;
  126.         TL0=(65536-CYCLE)%256;
  127.         CLK = ~CLK;
  128. }

复制代码

评分

参与人数 1黑币 +6 收起 理由
wht19980626 + 6

查看全部评分

回复

使用道具 举报

地板
ID:721764 发表于 2020-4-17 11:30 | 只看该作者
这是共阴吧,应该还需要反拉电阻的,否则驱动不了光耦
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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