东莞做网站制作,建筑公司图片,温州企业模板建站,众希网站建设目录
1. 让小车动起来
2. 串口控制小车方向
3. 如何进行小车PWM调速
4. PWM方式实现小车转向 1. 让小车动起来
电机模块开发
L9110s概述
接通VCC#xff0c;GND 模块电源指示灯亮#xff0c; 以下资料来源官方#xff0c;具体根据实际调试
IA1输入高电平#xff0c…目录
1. 让小车动起来
2. 串口控制小车方向
3. 如何进行小车PWM调速
4. PWM方式实现小车转向 1. 让小车动起来
电机模块开发
L9110s概述
接通VCCGND 模块电源指示灯亮 以下资料来源官方具体根据实际调试
IA1输入高电平IA1输入低电平【OA1 OB1】电机正转
IA1输入低电平IA1输入高电平【OA1 OB1】电机反转
IA2输入高电平IA2输入低电平【OA2 OB2】电机正转
IA2输入低电平IA2输入高电平【OA2 OB2】电机反转 核心代码
#include reg52.h
#include intrins.hsbit 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.hextern char speed;void main()
{Time0Init();//UartInit();while(1){speed 10;//10份单位时间全速运行30份停止所以慢20ms是40份的500usDelay1000ms();Delay1000ms();speed 20;Delay1000ms();Delay1000ms();speed 40;Delay1000ms();Delay1000ms();}
}//time.c
#include motor.h
#include reg52.hchar speed;
char cnt 0;void Time0Init()
{//1. 配置定时器0工作模式位16位计时TMOD 0x01;//2. 给初值定一个0.5出来TL00x33;TH00xFE;//3. 开始计时TR0 1;TF0 0;//4. 打开定时器0中断ET0 1;//5. 打开总中断EAEA 1;
}void Time0Handler() interrupt 1
{cnt; //统计爆表的次数. cnt1的时候报表了1//重新给初值TL00x33;TH00xFE;//控制PWM波if(cnt speed){//前进goForward();}else{//停止stop();}if(cnt 40){//爆表40次经过了20mscnt 0; //当100次表示1s重新让cnt从0开始计算下一次的1s}}
4. PWM方式实现小车转向
原理 左轮定时器0调速右轮定时器1调速那么左转就是右轮速度大于左轮!
核心代码
#include motor.h
#include reg52.hchar speedLeft;
char cntLeft 0;char speedRight;
char cntRight 0;void Time1Init()
{//1. 配置定时器1工作模式位16位计时TMOD 0x0F;TMOD | 0x1 4;//2. 给初值定一个0.5出来TL10x33;TH10xFE;//3. 开始计时TR1 1;TF1 0;//4. 打开定时器1中断ET1 1;//5. 打开总中断EAEA 1;
}void Time0Init()
{//1. 配置定时器0工作模式位16位计时TMOD 0x01;//2. 给初值定一个0.5出来TL00x33;TH00xFE;//3. 开始计时TR0 1;TF0 0;//4. 打开定时器0中断ET0 1;//5. 打开总中断EAEA 1;
}void Time1Handler() interrupt 3
{cntRight; //统计爆表的次数. cnt1的时候报表了1//重新给初值TL10x33;TH10xFE;//控制PWM波if(cntRight speedRight){//右前进goForwardRight();}else{//停止stopRight();}if(cntRight 40){//爆表40次经过了20mscntRight 0; //当100次表示1s重新让cnt从0开始计算下一次的1s}}void Time0Handler() interrupt 1
{cntLeft; //统计爆表的次数. cnt1的时候报表了1//重新给初值TL00x33;TH00xFE;//控制PWM波if(cntLeft speedLeft){//左前进goForwardLeft();}else{//停止stopLeft();}if(cntLeft 40){//爆表40次经过了20mscntLeft 0; //当100次表示1s重新让cnt从0开始计算下一次的1s}}