【C51】10

您所在的位置:网站首页 循迹小车基本知识点 【C51】10

【C51】10

2024-07-09 11:57| 来源: 网络整理| 查看: 265

10.1小车的安装

10.2电机模块的开发(L9110S)

接通 VCC , GND 模块电源指示灯亮, 以下资料来源官方,但是不对,根据下节课实际调试 IA1 输入高电平, IA1 输入低电平,【 OA1 OB1 】电机正转; IA1 输入低电平, IA1 输入高电平,【 OA1 OB1 】电机反转; IA2 输入高电平, IA2 输入低电平,【 OA2 OB2 】电机正转; IA2 输入低电平, IA2 输入高电平,【 OA2 OB2 】电机反转;

 10.3驱动电机模块让小车动起来(前后左右)

#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 goRight() { LeftCon1A = 0; LeftCon1B = 1; RightCon1A = 0; RightCon1B = 0; } void goLeft() { LeftCon1A = 0; LeftCon1B = 0; RightCon1A = 0; RightCon1B = 1; } 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(); } }

10.4通过串口控制小车方向

        1.通过串口调试工具  利用串口中断

#include "reg52.h" #include "motor.h" #include #define SIZE 12 sfr AUXR = 0x8E; char buffer[SIZE]; void UartInit(void) //[email protected] { AUXR = 0x01; SCON = 0x50; //配置串口工作方式1,REN使能接收 TMOD &= 0x0F; TMOD |= 0x20;//定时器1工作方式位8位自动重装 TH1 = 0xFD; TL1 = 0xFD;//9600波特率的初值 TR1 = 1;//启动定时器 EA = 1;//开启总中断 ES = 1;//开启串口中断 } //通过串口中断的方式进行 M1 前 M2 后 M3左 M4右 void Uart_Handler() interrupt 4 { static int i = 0;//静态变量,被初始化一次 char tmp; if(RI)//中断处理函数中,对于接收中断的响应 { RI = 0;//清除接收中断标志位 tmp = SBUF; if(tmp == 'M'){ i = 0; } buffer[i++] = tmp; //灯控指令 if(buffer[0] == 'M'){ switch(buffer[1]){ case '1': goForward(); break; case '2': goBack(); break; case '3': goLeft(); break; case '4': goRight(); break; default: stop(); break; } } if(i == 12){ i = 0; memset(buffer, '\0', SIZE); } } }

         2.通过蓝牙

添加点动控制,如果 APP 支持按下一直发数据,松开就停止发数据(蓝牙调试助手的自定义按键不 能实现),就能实现前进按键按下后小车一直往前走的功能

10.5利用PWM对小车进行调速

原理 : 全速前进是 LeftCon1A = 0; LeftCon1B = 1; 完全停止是 LeftCon1A = 0;LeftCon1B = 0; 那么单位时 间内,比如20ms, 有 15ms 是全速前进, 5ms 是完全停止, 速度就会比 5ms 全速前进, 15ms 完全停止获得的功率多,相应的速度更快! 开发 :借用 PWM 的舵机控制代码 //main.c 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 } }

10.6循迹小车

        1.循迹模块使用

 TCRT5000传感器的红外发射二极管不断发射红外线

当发射出的红外线 没有 被反射回来或被反射回来但强度不够大时, 红外接收管一直处于关断状态, 此时模块的输出端为高电平 ,指示二极管一直处于 熄灭状态 被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,红外接收管饱和, 此时模块的输出端为 低电平 ,指示 二极管被点亮

//main.c #include "motor.h" #include "delay.h" #include "reg52.h" sbit Leftxunji = P2^7; //左循迹模块 sbit Rightxunji = P2^6; //右循迹模块 void main() { while(1){ /*下方小车两个模块都能反射回来红外,输出低电平,灯亮,直走 上方小车左模块遇到黑线,红外被吸收,左模块输出高电平,右模块输出低电平,左转,反之右转*/ if(Leftxunji == 0 && Rightxunji == 0){ goForward();//前进 } if(Leftxunji == 1 && Rightxunji == 1){ stop(); //停止 } if(Leftxunji == 0 && Rightxunji == 1){ goRight(); //向右 } if(Leftxunji == 1 && Rightxunji == 0){ goLeft(); //向左 } } } //motor.c #include "reg52.h" sbit RightCon1A = P3^2; sbit RightCon1B = P3^3; sbit LeftCon1A = P3^4; sbit LeftCon1B = P3^5; void goForward() { LeftCon1A = 0; LeftCon1B = 1; RightCon1A = 0; RightCon1B = 1; } void goRight() { LeftCon1A = 0; LeftCon1B = 1; RightCon1A = 0; RightCon1B = 0; } void goLeft() { LeftCon1A = 0; LeftCon1B = 0; RightCon1A = 0; RightCon1B = 1; } void goBack() { LeftCon1A = 1; LeftCon1B = 0; RightCon1A = 1; RightCon1B = 0; } void stop() { LeftCon1A = 0; LeftCon1B = 0; RightCon1A = 0; RightCon1B = 0; }

语音控制小车 SU-03T LD3320

网盘资料 https://pan.baidu.com/s/1dXQSla_8D5O3D7UCsHZ0Dw 提取码 3k5a 这个语音模块不需要编程,不需要二次开发 通过厂家给的网站配置后即可使用,傻瓜式操作,

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3