小车循迹壁障等流程图

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include #include #define uchar unsigned char #define uint unsigned int sbit en1=P1^0; /* L298的Enable A */ sbit en2=P1^1; /* L298的Enable B */ sbit s1=P1^2; /* L298的Input 1 */ sbit s2=P1^3; /* L298的Input 2 */ sbit s3=P1^4; /* L298的Input 3 */ sbit s4=P1^5; /* L298的Input 4 */ uchar t=0; /* 中断计数器*/ uchar m1=0; /* 电机1速度值*/ uchar m2=0; /* 电机2速度值*/ uchar tmp1,tmp2; /* 电机当前速度值*/ /* 电机控制函数index-电机号(1,2); speed-电机速度(-100—100) */ void motor(uchar index, char speed) { if(speed>=-100 && speed<=100) { if(index==1) /* 电机1的处理*/ { m1=abs(speed); /* 取速度的绝对值*/ if(speed<0) /* 速度值为负则反转*/ { s1=0; s2=1; } else /* 不为负数则正转*/ { s1=1; s2=0; } } if(index==2) /* 电机2的处理*/ { m2=abs(speed); /* 电机2的速度控制*/ if(speed<0) /* 电机2的方向控制*/ { s3=0; s4=1; } else { s3=1; s4=0; } } } } void delay(uint j) /* 简易延时函数*/ { for(j;j>0;j--); } void main() { uchar i; TMOD=0x02; /* 设定T0的工作模式为2 */ TH0=0x9B; /* 装入定时器的初值*/ TL0=0x9B; EA=1; /* 开中断*/ ET0=1; /* 定时器0允许中断*/ TR0=1; /* 启动定时器0 */ while(1) /* 电机实际控制演示*/ { for(i=0;i<=100;i++) /* 正转加速*/ { motor(1,i); motor(2,i); delay(5000); } for(i=100;i>0;i--) /* 正转减速*/ { motor(1,i); motor(2,i); delay(5000); } for(i=0;i<=100;i++) /* 反转加速*/ { motor(1,-i); motor(2,-i); delay(5000); } for(i=100;i>0;i--) /* 反转减速*/ { motor(1,-i); motor(2,-i); delay(5000); } } } void timer0() interrupt 1 /* T0中断服务程序*/ { if(t==0) /* 1个PWM周期完成后才会接受新数值*/ { tmp1=m1; tmp2=m2; } if(t=100) t=0; /* 1个PWM信号由100次中断产生*/ 有两路PWM,希望对你有帮助!

#include "reg52.H"#include "MyType.h"//=============L298端口定义===============sbit ENA = P3^6; //左轮驱动使能sbit IN1 = P0^3; //左轮黑线(-)sbit IN2 = P0^4; //左轮红线(+)sbit IN3 = P0^5; //右轮红线(-)sbit IN4 = P0^6; //右轮黑线(+)sbit ENB = P3^7; //右轮驱动使能//=============PWM================#define PWM_COUST 100 //PWM细分等份100uchar MOTO_speed1; //左边电机转速uchar MOTO_speed2; //右边电机转速uchar PWM_abs1; //左边电机取绝对值后占空比uchar PWM_abs2; //左边电机取绝对值后占空比uchar PWM_var1=20; //左边电机直走速度(不同的电机,此参数不同)uchar PWM_var2=20; //右边电机直走速度uchar PWMAnd = 0; //PWM自增变量/******************************************************************名称:motor(char speed1,char speed2);功能:同时调节电机的转速参数:speed1:电机1的PWM 值;speed2:电机2的PWM值speed>0.正转;speed<0.反转(-100~100)调用:extern int abs(int val); 取绝对值返回:/******************************************************************/ void motor(char speed1,char speed2){ //==============左边电机============= if (speed1>0) { IN1 =0;IN2 =1;//正转} else if (speed1<0) { IN1 =1;IN2 =0;//反转} //==============右边电机============= if (speed2>0) { IN3 =1;IN4 =0;//正转} else if (speed2<0) { IN3 =0;IN4 =1;//反转}} /******************************************************************名称:motor_PWM();功能:PWM占空比输出参数:无调用:无返回:无/******************************************************************/void

motor_PWM (){ uchar PWM_abs1; uchar PWM_abs2; PWM_abs1=MOTO_speed1; PWM_abs2=MOTO_speed2; if (PWM_abs1>PWMAnd) ENA=1; //左边电机占空比输出

相关文档
最新文档