标题:
51单片机怎么接TB6600驱动器和程序才能实现按键控制?
[打印本页]
作者:
方法啊
时间:
2018-1-29 22:03
标题:
51单片机怎么接TB6600驱动器和程序才能实现按键控制?
51单片机怎么接TB6600驱动器和程序才能实现按键控制? 怎么接线 c程序怎么写
作者:
小单片机菜鸡
时间:
2019-1-21 09:04
会接,程序怎么写啊?
作者:
angmall
时间:
2019-1-21 19:06
/*************************************************************
* 测试说明
*1、MCU:STC89C52RC
*2、测试频率:12Mhz
*2、编程语言:C51
*2、编译环境:Keil C
*2、功能:全速正转、全速反转、停止、调速运行
***************************************************************/
#include <reg52.h> //TB6560输入控制端定义
sbit CLK = P1^0; //PUL是脉冲
sbit ENA = P1^1; //ENA是使能
sbit DIR = P1^2; //DIR是方向
sbit CW = P3^0; //正转运行按键
sbit STOP = P3^1; //停止运行按键
sbit CCW = P3^2; //反转运行按键
sbit ADJ1 = P3^3; //调速运行按键
sbit ADJ2 = P3^4; //调速运行按键
bit Run_Status; //运行状态位标志,
//=0表示电机在停止状态,可以按键正转、反转均可
//=1表示电机在运行状态,不支持正反转按键,只有先停止。防止强行换向带来的电流过大。
unsigned char Run_Dir; //电机运行方向
#define F_DIR 0 //正转
#define B_DIR 1 //反转
unsigned int CYCLE; //周期变量
/************************************************************************************************
** 函数名称: void Delay(unsigned int cnt)
** 功能描述: 简单的延时函数
** 输 入: cnt:0-65535之间的任意整数
** 输 出: 无
*************************************************************************************************/
void Delay(unsigned int cnt)
{
while(--cnt);
}
/************************************************************************************************
** 函数名称: void main(void)
** 功能描述: 主函数
** 输 入: 无
** 输 出: 无
*************************************************************************************************/
void main(void)
{
Run_Status=0; //=0表示电机在停止状态,可以按键正转、反转均可
CLK = 0;
ENA = 0;
while(1)
{
if(!STOP) //任何时候按停止键,电机停止运行
{
Delay(1000); //延时去抖动
if(!STOP)
{
Run_Status=0; //电机正在停止的状态标志
CLK = 0;
ENA = 0;
TR0=0;
}
}
if(!CW && !Run_Status) //按正转键同时电机不是正在运行时,电机正转运行
{
Delay(1000); //按下延时去抖动
if(!CW && !Run_Status)
{
Run_Status=1; //电机正在运行的状态标志
DIR = 0; //正转
ENA = 1;
CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100Hz
TMOD |=0x01;
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
IE= 0x82; //打开中断
TR0=1;
Run_Dir=F_DIR; //电机运行方向正转
}
}
if(!CCW && !Run_Status) //按反转键同时电机不是正在运行时,电机反转运行
{
Delay(1000); //延时去抖动
if(!CCW && !Run_Status)
{
Run_Status=1; //电机正在运行的状态标志
DIR = 1; //反转
ENA = 1;
CYCLE=2500; //脉冲频率 定时器设置 10ms in 12M crystal 即100Hz
TMOD |=0x01;
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
IE= 0x82; //打开中断
TR0=1;
Run_Dir=B_DIR; //电机运行方向反转
}
}
if(!ADJ1)
{
Delay(5000); //延时去抖动
if(!ADJ1)
{
if(CYCLE<20000) CYCLE+=2000;
else CYCLE=1000;
Run_Status=1;
TR0=1;
}
}
if(!ADJ2)
{
Delay(5000); //延时去抖动
if(!ADJ2)
{
if(CYCLE>2000) CYCLE-=2000;
Run_Status=1;
TR0=1;
}
}
}
}
/***********************************************************************************************
** 函数名称: Timer0_ISR
** 功能描述: 定时器0中断处理函数
** 输 入: 无
** 输 出: 无
*************************************************************************************************/
void Timer0_ISR(void) interrupt 1 using 1
{
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
CLK = ~CLK;
}
复制代码
作者:
coffeepod
时间:
2020-4-17 11:30
这是共阴吧,应该还需要反拉电阻的,否则驱动不了光耦
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1