第一次写CSDN,就写个51的小车算了。51单片机也是大部分嵌入式初学者所选择的单片机型号了,虽然51的运行速度要慢一些,但是芯片什么的都挺便宜,比较适合初学者入门,并且制作一些比较有趣的小作品来进一步的提高学习的兴趣,加快学习速度和效率。
说了一大堆废话,现在就步入正题吧!
一、材料准备
1.小车底座(淘宝有很多亚克力板的,但是我没有,我就拿以前比赛用过的铁板来组装了)
2.51单片机最小系统
3.51单片机芯片
4.l298n电机驱动芯片x2(因为是做四轮的,所以我就用了两个驱动了,驱动效率也高一些)
5.HC-05蓝牙模块 (新手可以用hc-06,比较简单一些,因为我只有hc-05就只能用这个了)
6. 直流电机x4
7.轮子x4
8.12V 16850锂电池组
9.DC转接头
10.公对母,公对公,母对母杜邦线若干(建议长短都买些,全是长的接线就太乱了,全是短 的也就不太好接线了)
11.USB转TTL (用于给HC-05蓝牙模块配置)
二、蓝牙设置
1.引脚说明
1. RXD: 接收端
2. TXD: 发送端
3. AT: 设置工作模式
1) 工作模式: 自动连接(automatic connection),又称为透传模式() 又稱為透通模式 (transparent communication)
2) AT指令设置模式: 命令回应(order-response),又称为AT模式(AT mode)
4. VCC: 模块供电正极(5V)
5. GND: 模块供电负极
6. EN:使能端,需要进入AT模式时接3.3V。其实不接也没有关系
7. STATE:我也不知道有什么用,没有用到
2.连接方式
1.USB转TTL与HC-05的连接
2.HC-05与51单片机的连接
3.进入AT模式
HC-05与HC-06不同,HC-06没有连接上时,就是AT模式,而HC-05需要有个开关,注意到模块上的小黑点没有,按下它再上电就使HC-05进入AT模式了,严格的讲,它只是一个开的作用,无法退出AT模式。此时指示灯慢闪(1秒亮一次),模块进入AT状态。
4.基本配置
我这里用来配置的串口调试助手是XCOM V2.5
模块默认波特率为9600、默认配对密码为1234、默认名称为HC-05,
AT模式波特率固定38400,8位数据位、1位停止位、无奇偶校验的通信格式。
AT+NAME="XXX" 修改蓝牙模块名称为XXX
AT+ROLE=0 蓝牙模式为从模式
AT+CMODE=1 蓝牙连接模式为任意地址连接模式,也就是说该模块可以被任意蓝牙设备连接
AT+PSWD=1234 蓝牙配对密码为1234
AT+UART=9600,0,0 蓝牙通信串口波特率为9600,停止位1位,无校验位
5.模块指示灯说明
1.将模块上电同时(或者之前),将KEY接高电平,此时指示灯慢闪(1秒亮一次),模块进入AT状态,此时波特率固定38400。
2.将模块上电后,将KEY悬空或者接地,此时指示灯快闪(1秒2次),表示模块进入可配对状态。此时如果将KEY接高电平,模块也会进入AT状态。但是指示灯依然是快闪(1秒2次)。
3.模块配对成功,此时STA双闪(一次闪2下,2秒闪一次)。
6、设置过程中遇到的两个问题
正常情况下,按照上面的配置,基本上都能成功。但如果没有成功,要怎么自检。本人就遇到过来成功配对后无法通信的问题,结果是由于蓝牙模块设置的波特率与单机片烧写的波特率不一样所致。开始一直怀疑是蓝牙模块本身有问题。弄了一下午,测输出波形,更换连接串口,浪费了很多时间。自检方法也很简单,单片机给蓝牙模块供电,单片机端的蓝牙模块TX与RX直接相连,自发自收,电脑端能收到串口信号,则说明主从模块没有问题。遇到的另一个问题是用串口助手发送AT命令没有反应。我也不知道怎么原因,开始一直以为是自己操作或者数据格式的问题,后来去网上查,网上说不能用串口助手配置,换了个串口调试工具就可以了。
三、小车组装与接线
1.l298n接口说明
2.线路连接
蓝牙模块和单片机直接的连接在上面说了,就不说了
我接线是先用12v的16850电池组给其中一个l298n驱动供电,然后将两个l298n的12v和GND接口用杜邦线相连接起来,然后在用其中一个l298n的5v和GND接口给单片机最小系统供电(千万别连错了,电压小了,单片机无法正常工作;电压大了,单片机芯片就会被烧坏)。
l298n上面还有4个IN接口(负责控制两边电机的开关)和两对EN接口(可以做PWM给电机调速),这次就只做个基础的蓝牙小车,就不做调速了(想要调速的同学可以去学习一下PWM占空比调速)。四个IN接口分别连接最小系统上对应的接口(按照我的代码就是其中一个in1234分别连接单片机的P0^3,P0^4,P0^5,P0^6;另外一个in1234分别连接P1^0,P1^2,P1^3,P1^4)。
然后l298n的左右两边分别有两个口,分别为output1,output2,output3,output4.。output1,output2分别连接直流电机的正负;output3,output4分别连接直流电机的正负,两个l298n就同理了。
接线图(由于我用的是铁板,怕影响就垫了层纸巾)
3.小车调试
接完线之后肯定就是调试了,连接电源后,用手机连接蓝牙进行调试(调试也没啥细节,就拿到手就知道该怎么调试了,我也不知道该怎么打字打出来了……)我用的软件是SPP蓝牙串口。
#include
sbit int1=P0^3;
sbit int2=P0^4;
sbit int3=P0^5;
sbit int4=P0^6;
sbit int01=P1^0;
sbit int02=P1^1;
sbit int03=P1^2;
sbit int04=P1^3;
char i;
void stop()
{
int1=0;
int2=0;
int3=0;
int4=0;
int01=0;
int02=0;
int03=0;
int04=0;
}
void back()
{
int1=1;
int2=0;
int3=1;
int4=0;
int01=1;
int02=0;
int03=1;
int04=0;
}
void forward()
{
int1=0;
int2=1;
int3=0;
int4=1;
int01=0;
int02=1;
int03=0;
int04=1;
}
void right()
{
int1=0;
int2=1;
int3=1;
int4=0;
int01=0;
int02=1;
int03=1;
int04=0;
}
void left()
{
int1=1;
int2=0;
int3=0;
int4=1;
int01=1;
int02=0;
int03=0;
int04=1;
}
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
while(1)
{
i=SBUF;
RI=0;
switch(i)
{
case '1':
forward(); break;
case '2':
back(); break;
case '3':
left(); break;
case '4':
right(); break;
case '5':
stop(); break;
}
}
}
五、提醒
线路别接错,接线的时候看仔细了,千万别给最小系统供到12v的电,要不然芯片直接烧了,调试的时候发现有问题,检查一下线路有没有接错,可以拿示波器或者万用表来测一下各个位置正不正常,有没有什么元件损坏了。
六、闲话
第一次发博客,可能有些漏了的地方,或者用的不恰当的,欢迎各位大佬在评论区指出错误,也欢迎各位大佬来给我提出更好的意见,共同学习共同进步。
51其实上学期刚入学就自学了,今天看到以前的同学在写csdn就想着过来分享与记录一下自己的学习,就凑了些零件过来做了一个基于51的蓝牙小车。当初从实验室随便拿了两个电机驱动回去做,发现是7A/160W的双路直流电机驱动模块XY-160D(下图),没有跳线帽,接不了杜邦线,就只好去淘宝买了l298n来做了。
L298N 电机驱动板 具体介绍:https://blog.csdn.net/dingxiang1987824/article/details/113420892
HC-06蓝牙模块设置出自 :https://blog.csdn.net/zx3517288/article/details/52291027