C51——小车测速,串口发送数据

本文介绍了使用C51进行电机转速检测的方法,通过脉冲计数和码盘实现测速。每转一圈,码盘输出20个脉冲,1个脉冲对应1.0205cm。通过定时器每秒统计脉冲数,计算出速度。文章还提及了涉及的代码文件,包括main.c、motor.c、pwm.c、uart.c和delay.c等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测速模块
1、用途:用于电机转速检测,脉冲计数,位置限位等

2、实现原理:有遮挡输出高电平;无遮挡,输出低电平

3、接线:vcc接5v,gnd接地,out信号输出

4、测速原理,和单位换算
①轮子走一圈,经过一个周长,C=2*3.14*半径=3.14*直径(6.5cm)
②轮子走一圈,对应码盘转一圈,经过一圈有20个孔,遮挡为高电平,不遮挡为低电平,那么对应的一个脉冲就是3.14*6.5cm/20=1.0205cm
③定时器可以设计成1s,统计脉冲数,1个脉冲就是1cm,若1s有80个脉冲,则速度为80cm/s

代码实现:

1.

main.c

//#include "reg52.h"//代码里边没有,sbit i/o口,可以不要声明
//#include "intrins.h"//代码里边没有_nop_();可以不要该声明
#include "reg52.h"
#include "stdio.h"
#include "motor.h"
#include "dalay.h"
#include "uart.h"
#include "pwm.h"


sbit speedio=P3^2;//外部中断口
unsigned int speedcnt=0;//用外部中断统计速度
extern unsigned int speed;
extern char signal;
char speedmes[24];

void EX0init()
{
  EX0=1;//允许外部中断
	//EA=1 在串口初始化中已经打开EA总中断
	IT0=1;//外部中断为下降沿触发
}

void main()
{
	Delay1000ms();
	time0init();
	UartInit();
	EX0init();
	  while(1){
			if(signal){
				sprintf(speedmes,"speed:%d",speed);//组建字符串,用speed来填充%d
        sendstr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值