目录
1模块准备
2实现功能
1模块准备
三轮小车底盘
l298n电机驱动模块
51最小系统开发板
ds1302时钟模块
蓝牙串口模块hc-06
18650电池盒和电池组三节,12v左右
ds18b20温度传感器
红外接收头与遥控
lcd1602显示屏
ttl电机2只
2实现功能
小车由蓝牙模块和红外遥控控制运行轨迹,通过pwm功能调整小车的速度,同时lcd1602实时显示当前日期和时间和当前环境温度。
3模块功能详解
蓝牙模块:使用串口中断,中断号4,单片机接收到相应的指令后使小车执行相应功能。
红外遥控:使用外部中断,下降沿触发,首先得看懂红外接NEC收协议如下。
红外遥控器采用了NEC编码规则:
NEC 载波频率为 38Khz
引导码:9ms 高电平 + 4.5ms 低电平
0码 :0.56 ms 高电平 + 0.56 ms 低电平
1 码 : 0.56ms 高电平 + 1.68 ms 低电平
结束码 :0.56ms 高电平
数据帧格式:引导码 +识别码 + 识别码反码 + 键值 + 键值反码 + 结束码
重复帧格式:9ms 高电平 + 2.25ms低电平 + 结束位 + 结束码,总共110ms左右
整个完整数据格式:引导码 + 识别码 + 识别码反码 + 键值 + 键值反码 + 结束码+一段空闲时间+9ms 高电平 + 2.25ms低电平 + 结束位 + 结束码+重复码循环~~~
高位在前,即首先收到的是高位的数据
将接收到的数据码传给单片机执行相应的功能。
ds18b20温度传感器:首先先搞定传感器初始化后再进行写命令和读数据这些。
初始化步骤:先拉低io口480~960us,再把io拉高,判断io口在15~60us间是否变为低电平,如是则初始化成功,注意当超过一定时间后记得退出判断,否则会进入死循环。最后可以通过返回的i值知道是否初始化成功。(其他地方说读取到低电平后还要做延时处理,自己实测可以不加延时)
pwm控制车速(l298n):利用51的定时器在l298n输出pwm信号来控制小车的速度,pwm控制车速的原理是通过改变输出电机端口的电压,从而改变车轮的转速,那怎么改变电压值呢?毋庸置疑只能通过定时器,设置定时器在一个周期(100ms)中30ms让电机的端口输出高电平,剩下的70ms输出低电平,这样一来pwm的占空比就是0.3,假设你的电池组是6v的,这时电机的有效电压就是1.8v,这样就可以通过改变占空比来控制车速啦。
这个是对定时器的初始化,一开始我设的是650us后发生中断,pwm和pwm1分别是两个电机的pwm口。
当650us到达后就会进入中断,在中断里面判断当前pwm端口为1还是0,一开始设为0后进中断后就会执行else里的程序,重新给定时器设置计数时间350us,并把pwm端口置1,当350us到达后又会进入中断执行if里的语句,就这样一直重复。这样pwm的周期就为1000us,其中有效时间为350us,即占空比为350/1000=0.35。