测速模块
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