电机控制方案
登录
直播中
张虎豹
8年用户
1648经验值
私信
关注
[问答]
请问怎样用Proteus去实现编码器电机转速及方向检测?
开启该帖子的消息推送
编码器
电机
怎样用
proteus
去实现编码器电机转速及方向检测?如何去编写Proteus实现编码器电机转速及方向检测的代码?
回帖
(1)
周棠亨
2021-6-30 14:07:31
Proteus实现编码器电机转速及方向检测
原理图
代码
原理图
控制编码电机采用的是最简单的开关控制正反电压的输入,滑动变阻器控制电机转速,也可以采用数字IC去控制电机转速以及方向,如L298N电机驱动芯片。
代码
/* 名称:直流电机测速 说明:数码管显示的正反转状态与转速值应与motor encode器件上显示的值基本一致; 测量误差 ≤1RPM 。*/#include《reg51.h》#include《intrins.h》 ***it duan = P2^0;***it wei = P2^1;***it 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《prespeed)) { prespeed=mspeed; mspeed=mspeed*10; temp_speed=mspeed; mnumber[1]=temp_speed/10000; mnumber[2]=(temp_speed%10000)/1000; mnumber[3]=(temp_speed%1000)/100; mnumber[4]=(temp_speed%100)/10; mnumber[5]=temp_speed%10; } for(i=0;i《6;i++){ P0=0; duan=1; duan=0; P0=LED_W; wei=1; wei=0; if(i》0) { mindex=mnumber; 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; }//************************************//
Proteus实现编码器电机转速及方向检测
原理图
代码
原理图
控制编码电机采用的是最简单的开关控制正反电压的输入,滑动变阻器控制电机转速,也可以采用数字IC去控制电机转速以及方向,如L298N电机驱动芯片。
代码
/* 名称:直流电机测速 说明:数码管显示的正反转状态与转速值应与motor encode器件上显示的值基本一致; 测量误差 ≤1RPM 。*/#include《reg51.h》#include《intrins.h》 ***it duan = P2^0;***it wei = P2^1;***it 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《prespeed)) { prespeed=mspeed; mspeed=mspeed*10; temp_speed=mspeed; mnumber[1]=temp_speed/10000; mnumber[2]=(temp_speed%10000)/1000; mnumber[3]=(temp_speed%1000)/100; mnumber[4]=(temp_speed%100)/10; mnumber[5]=temp_speed%10; } for(i=0;i《6;i++){ P0=0; duan=1; duan=0; P0=LED_W; wei=1; wei=0; if(i》0) { mindex=mnumber; 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; }//************************************//
举报
更多回帖
rotate(-90deg);
回复
相关问答
编码器
电机
伺服
电机
与
编码器
是
怎样
工作的
2021-09-26
2378
如何通过
编码器
得知
电机
转速
?
2021-11-23
2936
请问
怎么利用51单片机
检测
编码器
旋转
方向
和速度?
2018-06-27
11808
增量式
编码器
控制
电机
转速
问题
2016-01-27
6847
如何
去
测量设备的旋转量和旋
转速
度呢
2021-09-08
2481
编码器
安装对
电机
测速的影响?
2024-03-06
17857
请问
怎样
去
判断
编码器
的正反转?
2021-06-29
3531
请问
无刷
电机
+
编码器
是如何
去
实现
伺服
电机
的功能?
2021-06-26
2324
为什么要用
电机
编码器
?
电机
编码器
怎么使用?
2021-10-20
7990
请问
步进
电机
加
编码器
就是伺服
电机
吗?
2021-09-29
2986
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分