` 本帖最后由 tianyingkeji 于 2014-11-6 23:13 编辑
可用于智能车控制
【实物图片】
驱动板尺寸:50.2mmX48.2mm
安装尺寸:40mmX38mm 孔径:直径3mm
[主要功能特点]
`
2
|
|
|
|
大家都来啊,积极跟帖,容我两天,把程序分享。
|
|
|
|
|
非常好的资料
|
|
|
|
|
驱动程序更新
/*************************************************************************************************************
* 测试说明
*1、MCU:STC89C52RC
*2、测试频率:12Mhz
*2、编程语言:C51
*2、编译环境:Keil C
*2、功能:全速正转、全速反转、停止、调速运行
*************************************************************************************************************/
#include
***it BRAKE1 = P1^0;//TB6612FNG刹车制动控制端定义
***it PWM1 = P1^1; //TB6612FNG调速控制端定义
***it DIR1 = P1^2; //TB6612FNG方向控制端定义
***it BRAKE2 = P1^3; //TB6612FNG刹车制动控制端定义
***it PWM2 = P1^4; //TB6612FNG调速控制端定义
***it DIR2 = P1^5; //TB6612FNG方向控制端定义
***it CW = P3^0; //正转运行按键
***it STOP = P3^1; //停止运行按键
***it CCW = P3^2; //反转运行按键
***it ADJ = P3^3; //调速运行按键
bit Run_Status; //运行状态位标志,
//=0表示电机在停止状态,可以按键正转、反转均可
//=1表示电机在运行状态,不支持正反转按键,只有先停止。防止强行换向带来的电流过大。
unsigned char CYCLE; //周期变量
unsigned char DUTY; //占空比变量,对应于调速运行时按键次数,调速时每按一次调速键速度比上次变化10%
/********************************/
/* 延时函数 */
/********************************/
void Delay(unsigned int cnt)
{
while(--cnt);
}
/********************************/
/* 主函数 */
/********************************/
main()
{
TMOD |=0x01; //定时器设置 1ms in 12M crystal
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
IE= 0x82; //打开中断
Run_Status=0;
PWM1=0;
BRAKE1=1;
PWM2=0;
BRAKE2=0;
CYCLE=10; //周期10ms
DUTY=0; //占空比=0
while(1)
{
if(!STOP) //任何时候按停止键,电机停止运行
{
Delay(12000); //延时去抖动
if(!STOP)
{
Run_Status=0; //电机正在停止的状态标志
PWM1=0; //PWM=0时,电机自由运行到停止
BRAKE1=1; //BRAKE=1时,电机制动刹车
PWM2=0;
BRAKE2=1;
TR0=0;
}
}
if(!CW&&!Run_Status)//按正转键同时电机不是正在运行时,电机正转运行
{
Delay(12000); //延时去抖动
if(!CW&&!Run_Status)
{
Run_Status=1; //电机正在运行的状态标志
DIR1=0;
PWM1=1;
BRAKE1=0; //BRAKE=0时,电机控制使能
DIR2=0;
PWM2=1;
BRAKE2=0;
}
}
if(!CCW&&!Run_Status)//按反转键同时电机不是正在运行时,电机反转运行
{
Delay(12000); //延时去抖动
if(!CCW&&!Run_Status)
{
Run_Status=1; //电机正在运行的状态标志
DIR1=1;
PWM1=1;
BRAKE1=0; //BRAKE=0时,电机控制使能
DIR2=1;
PWM2=1;
BRAKE2=0;
}
}
if(!ADJ)
{
Delay(15000); //延时去抖动
if(!ADJ)
{
TR0=1;
if(DUTY
else DUTY=0;
Run_Status=1;
BRAKE1=0;
BRAKE2=0;
}
}
}
}
/********************************/
/* 定时器0中断服务函数 */
/********************************/
void Timer0(void) interrupt 1 using 1
{
static unsigned char Cnt;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;//定时1mS
if(DUTY==0) {Cnt=0; TR0=0;Run_Status=0;} //占空比=0时 停止中断 可以按正转或反转
else if(DUTY==CYCLE) Cnt=CYCLE;
else Cnt++;
if(Cnt==DUTY) //高电平时间到
{
PWM1 = 0;
PWM2 = 0;
}
if(Cnt == CYCLE) //低电平时间到
{
PWM1 = 1;
PWM2 = 1;
Cnt=0;
}
}
|
|
|
|
|