STC15W408AS单片机五向按键模块控制TB6600驱动步进电机源程序
Posted perseverance52
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STC15W408AS单片机五向按键模块控制TB6600驱动步进电机源程序相关的知识,希望对你有一定的参考价值。
STC15W408AS单片机6按键控制2步进电机采用TB6600驱动源程序
程序源码来源于:51黑电子论坛
- 编程环境keil,自行新建项目,添加main.c,将代码拷贝进去即可
- *主控芯片:
STC15W408AS
- 程序源码:
#include<reg52.h>
//电机1控制引脚 ******芯片:STC15W408AS*****
sbit CLK = P1^0;
sbit ENA = P1^1;
sbit DIR = P1^2;
//电机2控制引脚
sbit CLK1 = P1^3;
sbit ENA1 = P1^4;
sbit DIR1 = P1^5;
//按键控制端
sbit UP = P3^2; //电机1正转
sbit DWN = P3^3; //电机1反转
sbit LFT = P3^4; //电机2正转
sbit RHT = P3^5; //电机2反正
sbit SET = P3^6; //加速
sbit RST = P3^7; //减速
unsigned int Tspeed[10]={30,40,60,80,100,200,400,600,800,1000}; //调速等级表
bit CY_status=0;
unsigned int CYCLE=20;
unsigned int cy_count=0;
unsigned PWM_count=0;
void Init_time();
void Key_scan();
void main()
{
ENA=0;
CLK=0;
DIR=0;
ENA1=0;
CLK1=0;
DIR1=0; //初始化电机
Init_time(); //初始化定时器
while(1)
{
Key_scan();
}
}
void Init_time() //初始化定时器
{
TMOD |= 0x01;
TH0=(65536-CYCLE)/256; //给time0装初值
TL0=(65536-CYCLE)%256;
IE = 0x82; //使得time1的优先级高于time0
TR0=1; //打开中断
}
void Enter_Timer0() interrupt 1 //进入定时器中断
{
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
CLK=~CLK;
CLK1=~CLK1;
PWM_count++;
if(PWM_count==(2*cy_count)&&CY_status)
{
PWM_count=0;
TR0=0;
ENA=0;
ENA1=0;
}
}
/************************按键扫描程序************************
功能:读取各按键值,判断是否按下,再处理相应事件
注:按键控制程序,由于按键中断优先级高,且每个按键都设计
为弹起有效, 所以长时间按住不放会导致电机减速甚至停
止直至放开按键
*************************************************************/
void Key_scan()
{
static char i=0;
if(UP==0) //电机1正反转切换
{
if(UP==0)
{
DIR=1;
ENA=1; //启动电机
TR0=1; //开启中断产生脉冲信号
while(!UP); //按键按下直到放开
ENA=0; //关闭电机
TR0=0; //关闭中断停止脉冲信号
CY_status=0; //刷新步进标志位
}
}
if(DWN==0)
{
if(DWN==0)
{
DIR=0;
ENA=1; //启动电机
TR0=1; //开启中断产生脉冲信号
while(!DWN); //按键按下直到放开
ENA=0; //关闭电机
TR0=0; //关闭中断停止脉冲信号
CY_status=0; //刷新步进标志位
}
}
if(LFT==0) //电机2正反转切换
{
if(LFT==0)
{
DIR1=1;
ENA1=1; //启动电机
TR0=1; //开启中断产生脉冲信号
while(!LFT);
ENA1=0; //关闭电机
TR0=0; //关闭中断停止脉冲信号
CY_status=0; //刷新步进标志位
}
}
if(RHT==0)
{
if(RHT==0)
{
DIR1=0;
ENA1=1; //启动电机
TR0=1; //开启中断产生脉冲信号
while(!RHT);
ENA1=0; //关闭电机
TR0=0; //关闭中断停止脉冲信号
CY_status=0; //刷新步进标志位
}
}
if(SET==0) //加速
{
if(SET==0)
{
while(!SET);
i--;
if(i<1)
i=0;
CYCLE=Tspeed[i];
}
}
if(RST==0) //减速
{
if(RST==0)
{
while(!RST);
i++;
if(i>10)
i=10;
CYCLE=Tspeed[i];
}
}
}
以上是关于STC15W408AS单片机五向按键模块控制TB6600驱动步进电机源程序的主要内容,如果未能解决你的问题,请参考以下文章
STC单片机基于VSCode PlatformIO开发STC15W408AS软串口示例程序