51单片机智能小车—PWM方式实现小车调速和转向

简介: 51单片机智能小车—PWM方式实现小车调速和转向

1. 让小车动起来

电机模块开发

L9110s概述

接通VCC,GND 模块电源指示灯亮, 以下资料来源官方,具体根据实际调试

IA1输入高电平,IA1输入低电平,【OA1 OB1】电机正转;

IA1输入低电平,IA1输入高电平,【OA1 OB1】电机反转;

IA2输入高电平,IA2输入低电平,【OA2 OB2】电机正转;

IA2输入低电平,IA2输入高电平,【OA2 OB2】电机反转;


核心代码:

#include "reg52.h"
#include "intrins.h"
 
sbit RightCon1A = P3^2;
sbit RightCon1B = P3^3;
 
sbit LeftCon1A = P3^4;
sbit LeftCon1B = P3^5;
 
void Delay1000ms()    //@11.0592MHz
{
  unsigned char i, j, k;
 
  _nop_();
  i = 8;
  j = 1;
  k = 243;
  do
  {
    do
    {
      while (--k);
    } while (--j);
  } while (--i);
}
 
 
void goForward()
{
  LeftCon1A = 0;
  LeftCon1B = 1;
  
  RightCon1A = 0;
  RightCon1B = 1;
}
 
void goLeft()
{
  LeftCon1A = 0;
  LeftCon1B = 0;
  
  RightCon1A = 0;
  RightCon1B = 1;
}
 
void goRight()
{
  LeftCon1A = 0;
  LeftCon1B = 1;
  
  RightCon1A = 0;
  RightCon1B = 0;
}
 
void goBack()
{
  LeftCon1A = 1;
  LeftCon1B = 0;
  
  RightCon1A = 1;
  RightCon1B = 0;
}
 
void main()
{
  while(1){
    goForward();
    Delay1000ms();
    Delay1000ms();
    goBack();
    Delay1000ms();
    Delay1000ms();
    goLeft();
    Delay1000ms();
    Delay1000ms();
    goRight();
    Delay1000ms();
    Delay1000ms();
  }
}
 
 

2. 串口控制小车方向

串口介绍:

串行接口简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方 式的扩展接口。串行接口(Serial Interface)是指数据一位一位地顺序传送。其特点是通信线路简 单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成 本,特别适用于远距离通信,但传送速度较慢

  • 串口分文件编程进行代码整合——通过现象来改代码
  • 接入蓝牙模块,通过蓝牙控制小车
  • 添加点动控制,如果APP支持按下一直发数据,松开就停止发数据(蓝牙调试助手的自定义按键不 能实现),就能实现前进按键按下后小车一直往前走的功能


3. 如何进行小车PWM调速

原理: 全速前进是LeftCon1A = 0; LeftCon1B = 1;完全停止是LeftCon1A = 0;LeftCon1B = 0;那么单位时 间内,比如20ms, 有15ms是全速前进,5ms是完全停止, 速度就会比5ms全速前进,15ms完全停止获得的功率多,相应的速度更快!

开发:借用PWM的舵机控制代码

核心代码:

#include "motor.h"
#include "delay.h"
#include "uart.h"
#include "time.h"
 
extern char speed;
 
void main()
{
  Time0Init();
  //UartInit();
  
  while(1){
    speed = 10;//10份单位时间全速运行,30份停止,所以慢,20ms是40份的500us
    Delay1000ms();
    Delay1000ms();
    speed = 20;
    Delay1000ms();
    Delay1000ms();
    speed = 40;
    Delay1000ms();
    Delay1000ms();
  }
}
 
 
//time.c
#include "motor.h"
#include "reg52.h"
 
char speed;
char cnt = 0;
 
void Time0Init()
{
  //1. 配置定时器0工作模式位16位计时
  TMOD = 0x01;
  //2. 给初值,定一个0.5出来
  TL0=0x33;
  TH0=0xFE;
  //3. 开始计时
  TR0 = 1;
  TF0 = 0;
  //4. 打开定时器0中断
  ET0 = 1;
  //5. 打开总中断EA
  EA = 1;
}
 
void Time0Handler() interrupt 1
{
  cnt++;  //统计爆表的次数. cnt=1的时候,报表了1
  //重新给初值
  TL0=0x33;
  TH0=0xFE;
  
  //控制PWM波
  if(cnt < speed){
    //前进
    goForward();
  }else{
    //停止
    stop();
  }
  
  if(cnt == 40){//爆表40次,经过了20ms
    cnt = 0;  //当100次表示1s,重新让cnt从0开始,计算下一次的1s
  }
    
}

4. PWM方式实现小车转向

原理: 左轮定时器0调速,右轮定时器1调速,那么左转就是右轮速度大于左轮!

核心代码:

#include "motor.h"
#include "reg52.h"
 
char speedLeft;
char cntLeft = 0;
 
char speedRight;
char cntRight = 0;
 
void Time1Init()
{
  //1. 配置定时器1工作模式位16位计时
  TMOD &= 0x0F;
  TMOD |= 0x1 << 4;
  //2. 给初值,定一个0.5出来
  TL1=0x33;
  TH1=0xFE;
  //3. 开始计时
  TR1 = 1;
  TF1 = 0;
  //4. 打开定时器1中断
  ET1 = 1;
  //5. 打开总中断EA
  EA = 1;
}
 
 
void Time0Init()
{
  //1. 配置定时器0工作模式位16位计时
  TMOD = 0x01;
  //2. 给初值,定一个0.5出来
  TL0=0x33;
  TH0=0xFE;
  //3. 开始计时
  TR0 = 1;
  TF0 = 0;
  //4. 打开定时器0中断
  ET0 = 1;
  //5. 打开总中断EA
  EA = 1;
}
 
void Time1Handler() interrupt 3
{
  cntRight++;  //统计爆表的次数. cnt=1的时候,报表了1
  //重新给初值
  TL1=0x33;
  TH1=0xFE;
  
  //控制PWM波
  if(cntRight < speedRight){
    //右前进
    goForwardRight();
  }else{
    //停止
    stopRight();
  }
  
  if(cntRight == 40){//爆表40次,经过了20ms
    cntRight = 0;  //当100次表示1s,重新让cnt从0开始,计算下一次的1s
  }
    
}
 
void Time0Handler() interrupt 1
{
  cntLeft++;  //统计爆表的次数. cnt=1的时候,报表了1
  //重新给初值
  TL0=0x33;
  TH0=0xFE;
  
  //控制PWM波
  if(cntLeft < speedLeft){
    //左前进
    goForwardLeft();
  }else{
    //停止
    stopLeft();
  }
  
  if(cntLeft == 40){//爆表40次,经过了20ms
    cntLeft = 0;  //当100次表示1s,重新让cnt从0开始,计算下一次的1s
  }
    
}
相关文章
|
1月前
|
传感器
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
51单片机循迹小车原理介绍和代码示例
|
1月前
|
语音技术 物联网 程序员
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-2
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-2
51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结-2
|
1月前
|
编译器 C语言 开发者
单片机原理与应用:探索微型计算机世界
单片机原理与应用:探索微型计算机世界
25 1
|
1月前
|
数据采集 数据处理 C语言
单片机:探索其原理、应用与编程实践
单片机:探索其原理、应用与编程实践
27 1
|
1月前
|
物联网
STC51单片机-实验开发装置仿真-物联网应用系统设计
STC51单片机-实验开发装置仿真-物联网应用系统设计
71 0
|
1月前
|
物联网
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
49 0
|
1月前
|
芯片
AT89S52单片机的最小应用系统
AT89S52单片机的最小应用系统
19 0
|
1月前
|
存储 芯片
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P10】(第十章:11题中断系统的工作原理及应用)经典例题盘点(带图解析)