Proteus实现编码器电机转速及方向检测 您所在的位置:网站首页 帕萨特多功能方向盘编码器在哪 Proteus实现编码器电机转速及方向检测

Proteus实现编码器电机转速及方向检测

2024-07-10 08:58| 来源: 网络整理| 查看: 265

Proteus实现编码器电机转速及方向检测 原理图代码

原理图

控制编码电机采用的是最简单的开关控制正反电压的输入,滑动变阻器控制电机转速,也可以采用数字IC去控制电机转速以及方向,如L298N电机驱动芯片。 在这里插入图片描述

代码 /* 名称:直流电机测速 说明:数码管显示的正反转状态与转速值应与motor encode器件上显示的值基本一致; 测量误差 ≤1RPM 。 */ #include #include sbit duan = P2^0; sbit wei = P2^1; sbit flag = P3^0; //正反转标志位 unsigned char code mtable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77}; unsigned char code LED_W[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char data mnumber[]={0,0,0,0,0,0}; //显示的符号与速度 unsigned int data mcount=0; //脉冲数 unsigned int data mtime=0; float cspeed=0; //当前速度 float prespeed=0; void display(float mspeed); void main() { //**********设置定时器T0工作方式和定时时间**********// TMOD =0X01; // TH0 =0X3C; TL0 =0XB0; //**************************************************// ET0=1; //允许T0产生中断 IT0=1; //外部中断0(P3.2)为边沿触发 EX0=1; //允许外部中断0产生中断 TR0=1; //启动T0 EX0=1; //允许外部中断0产生中断 EA=1; //开总中断 while(1) { display(cspeed); } } void display(float mspeed) { unsigned int temp_speed; unsigned char i,j=30,mindex; if ((mspeed>prespeed)||(mspeed P0=0; duan=1; duan=0; P0=LED_W[i]; wei=1; wei=0; if(i>0) { mindex=mnumber[i]; P0=mtable[mindex]; //显示数字 if(i==4) P0=mtable[mindex]+0x80; //显示小数点 } else { //**********电机正反转的判断与显示**********// if(flag==1) //反转- { P0=0x40; } else P0=0x00; //正转0 //******************************************// } duan=1; duan=0; while(j--); } } //**********外部中断计脉冲数**********// void int_0() interrupt 0 { mcount++; } //************************************// //**********脉冲采样周期定时**********// void timer0() interrupt 1 { ET0=0; mtime++; if(mtime==20) //定时时间 { cspeed =(60*mcount)/(24*0.05*mtime); //根据采样周期内产生的脉冲数,计算转速 mcount=0; //cspeed是采用编码器转速公式得出 mtime=0; } TH0=0X3C ; TL0=0xB0 ; //重装初值 ET0=1; } //************************************//


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有