高级会员
- 积分
- 589
- 威望
- 185
- 贡献
- 348
- 兑换币
- 117
- 注册时间
- 2013-11-20
- 在线时间
- 28 小时
|
DIY个瓦力机器人,硬件已完工,可是软件调试失败!
从航模遥控器获取信号到STC12C5A60S2,再由单片机输出PWM信号到L298N驱动板,驱动2个履带前进后退,实现加减速、直行、拐弯、原地转等功能。
现电路部分连接完成,但在调试时拨动遥控器的摇杆,俩轮子没有任何反应,大家帮助看看问题出在哪?
万事具备,只欠程序的瓦力机器人。
从航模遥控器接收机到单片机的连接(捕获PWM信号的线),我只是把接收机的1、2通道的连接舵机的线(本来是红、黑、白三根)中的白色线对应的接头,用杜邦线连到单片机,不知对不对?
程序是直接借用极客迷论坛上azurexfak兄的程序,只不过他用的是STC12C2052AD,我使用的是STC12C5A60S2,把引脚更改了一下(在此向azurexfak兄致敬)。
#include"STC12C5A60S2.H"
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit input1=P3^0; //P3.0 纵向信号输入
sbit input2=P3^1; //P3.1 横向信号输入
sbit output11=P2^0;
sbit output12=P2^1;
sbit output21=P2^2;
sbit output22=P2^3;
bit no1=1,no2=1,leftup=0,leftdown=0;
bit rightup=0,rightdown=0;
uint no5=0,no6=0;
uchar i;
char no7=0,no8=0,no9=0,no10=0;
char no11=0,no12=0;
void timer();
void zx();
void hx();
void hh();
void sc();
void main()
{
P1M0=0x00; //由于要在P1.3和P1.4输出PWM,故把P3.7和P3.5设为推挽输出。
P1M1=0x18; //同上。
AUXR=0x80; //计数器工作在1T模式(计数速度与晶振频率相同)
TMOD=0x02; //计数器0工作在方式2(自动装入计数值模式)
TH0=254; //PWM模块输出频率约为23KHz
TL0=254;
EA=1;
ET0=1;
CMOD=0x05;
CCON=0x40;
CCAPM0=0x42;
CCAPM1=0x42;
CCAP0H=0xff;
CCAP0L=0xff;
CCAP1H=0xff;
CCAP1L=0xff;
TR0=1;
while(1)
{
if((input1&no1)==1) //纵向通道扫描
{
while(input1==1)
{
no5++;
timer();
}
no1=0;
}
if((input2&no2)==1) //横向通道扫描
{
while(input2==1)
{
no6++;
timer();
}
no2=0;
}
if((no1|no2)==0) //单次扫描完成判断
{
no1=1;
no2=1;
zx();
hx();
hh();
sc();
output11=leftup; //每次对扫描得到的数据处理完成之后对电机方向控制端口进行置位
output12=leftdown; //同上
output21=rightup; //同上
output22=rightdown; //同上
no5=0;
no6=0;
}
}
}
void timer()
{
for(i=18;i>0;i--);
_nop_();
_nop_();
_nop_();
}
void zx() //纵向摇杆信号处理子程序
{
if(no5<115)
{
no7=-7;
no8=-7;
}
else if(no5>=115&&no5<120)
{
no7=-6;
no8=-6;
}
else if(no5>=120&&no5<125)
{
no7=-5;
no8=-5;
}
else if(no5>=125&&no5<130)
{
no7=-4;
no8=-4;
}
else if(no5>=130&&no5<135)
{
no7=-3;
no8=-3;
}
else if(no5>=135&&no5<140)
{
no7=-2;
no8=-2;
}
else if(no5>=140&&no5<145)
{
no7=-1;
no8=-1;
}
else if(no5>=145&&no5<=155)
{
no7=0;
no8=0;
}
else if(no5>155&&no5<=160)
{
no7=1;
no8=1;
}
else if(no5>160&&no5<=165)
{
no7=2;
no8=2;
}
else if(no5>165&&no5<=170)
{
no7=3;
no8=3;
}else if(no5>=170&&no5<175)
{
no7=4;
no8=4;
}
else if(no5>=175&&no5<180)
{
no7=5;
no8=5;
}
else if(no5>=180&&no5<185)
{
no7=6;
no8=6;
}
else
{
no7=7;
no8=7;
}
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|