注册会员
- 积分
- 44
- 威望
- 23
- 贡献
- 11
- 兑换币
- 11
- 注册时间
- 2014-7-23
- 在线时间
- 5 小时
- 毕业学校
- 北京理工大学珠海学院
|
1贡献
这个暑假想学做一下智能循迹小车,现在遇到一个车速无法控制的问题,卡了好多天了都解决不了问题,求各位大大帮助
单片机型号:STC12C5A60S2
驱动模块:L298N驱动模块
电源:18650电池两节
现在附上程序和驱动模块接线示意图:(程序现在不考虑循迹的情况,这款单片机PWM输出口是P13和P14,接到使能端ENA和ENB之后,电机不转。要是ENA和ENB接高电平小车可以全速转,单片机最小系统没有接复位电路)
#include<12C5A60S2.h>
#include<intrins.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
sbit L1=P0^0;
sbit L2=P0^1;
sbit R1=P0^2;
sbit R2=P0^3;
/*PWM初始化函数*/
void PWM_init(void)
{
CMOD=0x02;
CCAPM0=0x42;
CCAPM1=0x42;
CCAP1L=0x00;
CCAP1H=0x00;
CCAP0L=0x00;
CCAP0H=0x00;
L1=0;
L2=0;
R1=0;
R2=0;
CR=1;
}
/***************************************************************************
函数名称:行走函数
函数功能:驱动电机
函数备注:x为左边电机的速度,y为右边电机的速度
-255<x<255,-255<y<255
0~255向前,-255~-1向后,绝对值越大,速度越大
***************************************************************************/
void RUN(int x,int y)
{
if(y>0)
{
CCAP0L=y;
CCAP0H=y;
R1=0;
R2=1;
}
else
{
CCAP0L=-y;
CCAP0H=-y;
R1=1;
R2=0;
}
if(x>0)
{
CCAP1L=x;
CCAP1H=x;
L1=0;
L2=1;
}
else
{
CCAP1L=-x;
CCAP1H=-x;
L1=1;
L2=0;
}
}
void delay2s(void) //误差 -0.000000000111us
{
unsigned char a,b,c,n;
for(c=142;c>0;c--)
for(b=168;b>0;b--)
for(a=250;a>0;a--);
for(n=2;n>0;n--);
_nop_(); //if Keil,require use intrins.h
}
void main()
{
delay2s();
PWM_init();
while(1)
{
RUN(-100,100);
}
}
|
附件: 您需要 登录 才可以下载或查看,没有帐号?注册
|