标题:
51单片机 直流电控制机程序(智能小车用)
[打印本页]
作者:
das
时间:
2015-4-18 04:16
标题:
51单片机 直流电控制机程序(智能小车用)
sbit RIGHT_IN1 = P1^3; //右边电机
sbit RIGHT_EN = P1^4;
sbit RIGHT_IN2 = P1^5;
sbit LEFT_IN1 = P1^2; //左边电机
sbit LEFT_EN = P1^1;
sbit LEFT_IN2 = P1^0;
/*********************************************
宏定义
**********************************************/
#define PWM_PERIOD 100 //PWM周期PWM_PERIOD*100us
#define uchar unsigned char
#define uint unsigned int
/*********************************************
变量定义
**********************************************/
//---------- PWM ------------//
uchar PWM_COUNTER = 0; //pwm产生周期 100*100us
uchar LEFT_PWM_DUTY = 50; //左边电机占空比
uchar RIGHT_PWM_DUTY = 50; //右边电机占空比
//---------- 时钟 ------------//
uchar SecondL = 0; //时间秒低位
uchar SecondH = 0; //时间秒高位
uchar MinuteL = 0; //时间分低位
uchar MinuteH = 0; //时间分高位
/*********************************************
函数名称: Delay_10Us
函数功能: us延时函数
函数输入: us-延时时间控制变量
函数输出: 无
**********************************************/
void Delay_10Us(uint us)
{
while( us-- );
}
/*********************************************
函数名称: DelayMs
函数功能: ms级延时函数,延时时间:ms*ms
函数输入: ms-延时时间控制变量
函数输出: 无
**********************************************/
void DelayMs(uint ms)
{
unsigned int i,j;
for( i = 0; i < ms; i ++ )
for( j = 115; j > 0; j --);
}
/*********************************************
函数名称: Init
函数功能: 初始化单片机的定时0(用于产生PWM)、定时器1(用于产生时钟)
函数输入: 无
函数输出: 无
**********************************************/
void Init_Timer(void)
{
TMOD = 0x12; //设定T0的工作模式为2,设定T0的工作模式为1
//----装入定时器初值 -----//
TH0 = 0x95; //100us定时
TL0 = 0x95;
TH1 = (65536-50000)/256; //50ms定时
TL1 = (65536-50000)%256;
IT0 = 1;
IP = 0x03;
EA = 1; // 开总中断
ET0 = 1; // 定时器0允许中断
ET1 = 1; // 定时器1允许中断
TR1 = 1; // 启动定时器1
TR0 = 1; // 启动定时器0
}
/*********************************************
函数名称: Timer0_ISR
函数功能: 定时器0中断服务函数,用于输出PWM波
函数输入: 无
函数输出: 无
**********************************************/
void Timer0_ISR(void) interrupt 1 using 1
{
PWM_COUNTER ++;
if(PWM_COUNTER < PWM_PERIOD)
{
if(PWM_COUNTER > LEFT_PWM_DUTY) LEFT_EN = 0;
if(PWM_COUNTER > RIGHT_PWM_DUTY) RIGHT_EN = 0;
}
else
{
PWM_COUNTER = 0;
LEFT_EN = 1;
RIGHT_EN = 1;
}
}
/*********************************************
函数名称: Timer1_ISR
函数功能: 定时器1中断服务函数,用于产生时钟
函数输入: 无
函数输出: 无
**********************************************/
void Timer1_ISR() interrupt 3
{
uchar cnt;
TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
cnt++;
if(cnt >= 20)
{
cnt = 0;
++SecondL;
if(SecondL == 10)
{
SecondL = 0;
++SecondH;
if(SecondH == 6)
{
SecondH = 0;
++MinuteL;
if(MinuteL == 10)
{
MinuteL = 0;
++MinuteH;
}
}
}
}
}
/*********************************************
函数名称: Stop
函数功能: 停车函数
函数输入: speed_left -左轮占空比
speed_right-右轮占空比
函数输出: 无
**********************************************/
void Stop(uchar speed_left,uchar speed_right)
{
LEFT_IN1 = 0;
LEFT_IN2 = 0;
RIGHT_IN1 = 0;
RIGHT_IN2 = 0;
LEFT_PWM_DUTY = speed_left;
RIGHT_PWM_DUTY = speed_right;
}
/*********************************************
函数名称: GoHead
函数功能: 前进函数:控制小车以一定速度直线前进,也可以
控制小车转弯
函数输入: speed_left -左轮占空比
speed_right-右轮占空比
函数输出: 无
**********************************************/
void GoHead(uchar speed_left,uchar speed_right)
{
LEFT_IN1 = 1;
LEFT_IN2 = 0;
RIGHT_IN1 = 1;
RIGHT_IN2 = 0;
LEFT_PWM_DUTY = speed_left;
RIGHT_PWM_DUTY = speed_right*5/4; //走直线占空比校正
}
/*********************************************
函数名称: GoBack
函数功能: 后退函数:控制小车以一定速度直线后退,也可以
小车后退转弯
函数输入: speed_left -左轮占空比
speed_right-右轮占空比
函数输出: 无
**********************************************/
void GoBack(uchar speed_left,uchar speed_right)
{
LEFT_IN1 = 0;
LEFT_IN2 = 1;
RIGHT_IN1 = 0;
RIGHT_IN2 = 1;
LEFT_PWM_DUTY = speed_left;
RIGHT_PWM_DUTY = speed_right+2; //走直线占空比校正
}
/*********************************************
函数名称: Goright
函数功能: 右转90度函数:控制小车以一定速度旋转90度
函数输入: speed_left -左轮占空比
speed_right-右轮占空比
函数输出: 无
**********************************************/
void Goright_90(void)
{
LEFT_IN1 = 1;
LEFT_IN2 = 0;
RIGHT_IN1 = 0;
RIGHT_IN2 = 1;
LEFT_PWM_DUTY = 20;
RIGHT_PWM_DUTY = 20;
DelayMs(1135);
}
复制代码
作者:
horseydk
时间:
2015-5-6 17:45
直发程序,没有电路图无用啊
作者:
寻常kiss
时间:
2015-5-7 21:40
这个90度,转的精确吗?
作者:
lxa0
时间:
2015-5-8 19:12
有pwm调速吗???
作者:
3151507812
时间:
2016-10-13 23:00
有上位机软件吗
作者:
3151507812
时间:
2016-10-13 23:00
楼主帮忙
作者:
3151507812
时间:
2016-10-13 23:00
大神
作者:
卡卡兮
时间:
2017-6-22 15:24
有程序所属文件么
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1