目录
前几天完成了寻迹小车的电机和寻迹模块的学习,这里板子用的是51最小系统板。
一 硬件
电机驱动模块L298N 和 寻迹模块
其实也没什么,pwm控制速度再加上寻迹模块,主要是遇见了一些玄学问题,这里来总结一下:
1.用下载器烧不进程序,总显示什么芯片加载超时==,解决方法:用51板子烧进去芯片再按上去就好了,(注意芯片的方向不要按反)就是比较麻烦。。
2.按进去芯片之后,上边那个数码管的数字一闪一闪的,车有想动的趋势但是不动,差点想把车拆了换个芯片重新装了,结果发现是芯片按的位置原因,应该把芯片按在正中间,试过了,最左最右都不行。
3.实现不了pwm调速,总是以最大引脚速度走,是那个跳线帽的原因,把跳线帽拔掉连上pwm的线就好了。
4.注意l298n的连线,12V GND(板子的GND和电池负极) 5V 。还有最好先检查一下锂电池有没有问题。。。还有,用下载器连上电脑之后,别开单片机的开关,然后电脑就会直接黑屏(可能是之前接线有问题)。。
二 软件
管脚定义:
电机:前左右停 左大转 右大转
速度自己调
//前进 停止
#define l_forward {IN1=1,IN2=0;}//左1
#define l_stop {IN1=0,IN2=0;}
#define l_back {IN1=0,IN2=1;}
#define ll_forward {IN3=1,IN4=0;}//左2
#define ll_stop {IN3=0,IN4=0;}
#define ll_back {IN3=0,IN4=1;}
#define r_forward {IN11=1,IN22=0;}//右1
#define r_stop {IN11=0,IN22=0;}
#define r_back {IN11=0,IN22=1;}
#define rr_forward {IN33=1,IN44=0;}//右2
#define rr_stop {IN33=0,IN44=0;}
#define rr_back {IN33=0,IN44=1;}
void forward()
{
left=12;lleft=12;
right=12;rright=12;
l_forward;
ll_forward;
r_forward;
rr_forward;
}
void turn_right()//右
{
left=18;lleft=18;
right=40;rright=40;
l_forward;
ll_forward;
r_back;
rr_back;
}
void turn_left()
{
left=40;lleft=40;
right=18;rright=18;
l_back;
ll_back;
r_forward;
rr_forward;
}
void stop()
{
l_stop;
ll_stop
r_stop;
rr_stop;
}
void turn_big_right()//右
{
left=18;lleft=18;
right=50;rright=50;
l_forward;
ll_forward;
r_back;
rr_back;
}
void turn_big_left()
{
left=50;lleft=50;
right=18;rright=18;
l_back;
ll_back;
r_forward;
rr_forward;
}
unsigned char count=0,count1=0,count2=0,count3=0;//计数值
unsigned char left=0,lleft=0; //左边的比较值
unsigned char right=0,rright=0;//右边的比较值
中断里面:计数值++
四个电机调速(小于比较值为0 大于比较值为1 大于100为0) 都一样。
寻迹模块:可能还需要加,这个效果还行。
void xunji()
{
if(D1==0&&D2==0&&D3==0&&D4==0) {forward();}
if(D1==1&&D2==1&&D3==1&&D4==1) {stop();}
if(D2==0&&D3==1) {turn_right();}
if(D2==1&&D3==0) {turn_left();}
if(D2==1&&D3==1) {forward();}
if(D1==1&&D2==0&&D3==0&&D4==0) {turn_big_left();}
if(D1==0&&D2==0&&D3==0&&D4==1) {turn_big_right();}
}
电机和寻迹模块差不多就这些了,有别的再补充,==。