导航:首页 > 操作系统 > 基于单片机的电机测速系统

基于单片机的电机测速系统

发布时间:2024-06-24 10:36:27

A. 锘轰簬鍗旷墖链虹殑鐢靛姩链鸿皟阃熷疄楠岀郴缁熻捐

鍓嶈█
1
1.镐讳綋璁捐℃柟妗
2
锛堜竴锛夋柟妗堜竴锛歅WM娉㈣皟阃
2
锛堜簩锛夋柟妗堜簩锛氭櫠闂哥¤皟阃
2
2.鍗曞厓妯″潡璁捐
3
锛堜竴锛
H妗ラ┍锷ㄧ数璺璁捐℃柟妗
3
锛堜簩锛
璋冮熻捐℃柟妗
5
锛堜笁锛夌郴缁熺‖浠剁数璺璁捐
6
1.鐢垫簮鐢佃矾
6
2锛嶩妗ラ┍锷ㄧ数璺
6
3锛庡熀浜庨湇灏斾紶镒熷櫒镄勬祴阃熸ā鍧
7
4锛嶭CD鏄剧ず妯″潡
8
锛埚洓锛
璋冮熻捐℃ā鍧
9
1锛嶱WM娉㈣蒋浠惰蒋浠惰捐
9
2锛庢祴阃熻蒋浠惰捐
12
3.绯荤粺锷熻兘璋冭瘯
13
锛堜竴锛夎皟璇曡蒋浠朵粙缁
13
锛堜簩锛夌洿娴佺数链虹殑璋冮熷姛鑳戒豢鐪
14
1锛庤皟阃熷墠镄勬尝褰㈠浘
14
2锛庤皟阃熷悗镄勬尝褰㈠浘
14
锛堜笁锛夌数链洪熷害镄勬祴閲忓苟鏄剧ず锷熻兘浠跨湡
15
锛埚洓锛夌郴缁熺殑鐢佃矾铡熺悊锲
15
锛堜簲锛夌郴缁熺殑PCB锲
16
4.璁捐℃荤粨
17
5.鍙傝冩枃鐚
17
闄勫綍
17

B. 设计一个由单片机控制的电机转速检测系统,实时监测电机的转速,达到设定值,声音报警提示谢谢好心人啊!

LCD1602显示,如果转速达到5000R/MIN,蜂鸣器就会报警
#include <reg52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
/*-----------------------端口命名------------------------*/
sbit lcdrs=P2^7; //LCD的数据/命令选择端
sbit lcdrw=P2^6; //LCD的读写选择端
sbit lcden=P2^5; //LCD的使能信号端
sbit warning=P3^1; //蜂鸣器端
/*-------------------------------------------------------*/
/*-----------------------定义参数------------------------*/
uint i,j,z,count,zhuan,msec; //定义参数
uchar num,ge,shi,,qian; //变量声明
uchar code table0[]={"Velometer"}; //定义显示参数
uchar code table1[]={"Speed: r/min"};
/*-------------------------------------------------------*/
/*-----------------------毫秒延时------------------------*/
void delay0(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}

/*-------------------------------------------------------*/
/*--------------------向LCD1602写命令--------------------*/
void write_com(uchar com)//写命令子函数--写指令
{
lcdrs=0;lcden=0;lcdrw=0; //此时命令
P0=com;//命令写入P0口
delay0(5);
lcden=1;
delay0(5);//出现下降沿
lcden=0;
}

/*-------------------------------------------------------*/
/*--------------------向LCD1602写数据--------------------*/
void write_data(uchar date)//写命令子函数--写数据
{
lcdrs=1;lcden=0;lcdrw=0;
P0=date;//数据写入P0
delay0(5);
lcden=1;
delay0(5);//出现下降沿
lcden=0;
}

/*-------------------------------------------------------*/
/*-------------------外部中断0计数程序-------------------*/
void counter(void) interrupt 0
{
EX0=0; //关外部中断0
count++;
if(count==4) //4次循环为电机转一圈
{
count=0; //初始化计数
z++; //转圈计数加1
} //计数+1
EX0=1; //开外部中断0
return;
}

/*-------------------------------------------------------*/
/*-----------------内部中断0计时计数程序-----------------*/
void Timer_0(void) interrupt 1
{
TH0=0x3C; //50ms定时
TL0=0xB0;
msec++;
if(msec==20) //50*20=1S
{
msec=0;
zhuan=z*60;
z=0;
}
}
/*-------------------------------------------------------*/
/*----------------------端口初始化-----------------------*/
void int_all()
{
warning=0; //关蜂鸣器
z=0; //初始化z的值
count=0; //初始化count的值
zhuan=0; //初始化转的值
TMOD=0x01; //内部中断定时器选择
TH0=0x3C; //50ms定时
TL0=0xB0;
lcdrw=0; //选择LCD写数据指令
lcden=0; //使能信号开始为低
write_com(0x38); //16*2显示,5*7点阵,八位数据
delay0(15);
write_com(0x38);
delay0(15);
write_com(0x38);
write_com(0x08);//显示关、关光标,不闪烁
write_com(0x01);//清屏
delay0(15);
write_com(0x04);
delay0(15);
write_com(0x0c);
EA=1; //开中断总开关
ET0=1; //开内部中断0
TR0=1; //计时器开始工作
IT0=1; //外部中断0为下降沿触发
EX0=1; //开外部中断0
}

/*-------------------------------------------------------*/
/*------------------------LCD显示------------------------*/
void display ()
{
write_com(0x01); //清屏
write_com(0x06); //调用写命令函数,向右移动光标(增量)
write_com(0x80|0x03); //初始位置
for(num=0;table0[num] != '\0';num++) //第一行的字符
{
write_data(table0[num]);
delay0(1);
}
write_com(0x80|0x40); //换行
for(num=0;table1[num]!='\0';num++)
{
write_data(table1[num]);
delay0(1);
}
qian=(zhuan/1000+'0'); //转换转速的千位
=(zhuan/100%10+'0'); //转换转速的百位
shi=(zhuan/10%10+'0'); //转换转速的十位
ge=(zhuan%10+'0'); //转换转速的个位
write_com(0x80|0x46);
write_data(qian);
delay0(50);
write_com(0x80|0x47);
write_data();
delay0(50);
write_com(0x80|0x48);
write_data(shi);
delay0(50);
write_com(0x80|0x49);
write_data(ge);
delay0(5000);
}

/*-------------------------------------------------------*/
/*-------------------转速过高警告程序--------------------*/
void warning_speed()
{
if(zhuan>2400||zhuan<800) //高于5000转打开警告
{
warning=1;
}
if(zhuan<=2400&&zhuan>800) //低于5000转关闭警告
{
warning=0;
}
}
/*-------------------------------------------------------*/
/*------------------------主函数-------------------------*/
void main()
{
int_all(); //全局初始化
while(1)
{
warning_speed(); //转速警告
display (); //LCD显示
}
}

C. 基于51单片机直流电机调速测速仿真原理

基于51单片机直流电机调速测速仿真原理是以STC90C52RC单片机为主控芯片,利用PWM的原理,通过按键对直流电机进行调速,实现正反转;采用霍尔传感器对直流电机的转动进行计数,并通过主控芯片将采集到的计数值转化为直流电机的当前速度值;利用LCD1602显示模块将计算得到的值进行实时显示。

D. 单片机直流电机调速系统的设计

单片机控制的直流电机调速系统

摘要:本文采用AT89C52作为主控芯片,设计了一种直流电机高速系统。AT89C52产生单极性工作制的定频PWM脉冲,配合驱动能力强大的L298,从而实现控制和调整直流电机转速和转向的功能。利用软件编程,能够设置多个占空比不同的脉冲,使得电机转速可以逐步增大或减小,同时在LCD上显示电机的工作状态,易于观察和识别。本设计主要由电机调速控制模块和LCD显示模块组成,具有电路简单,可靠性高,运行稳定的特点,是对于小型直流电机调速装置的一种探究。

关键词:AT89C52 定频PWM LCD 直流电机

目 录

1 绪论... 1

2 方案设计... 1

2.1 功能要求... 1

2.2 方案论证... 1

3 系统硬件的设计... 3

3.1 电机调速控制模块... 3

3.2 LCD显示模块... 6

3.3 硬件设计总原理图... 11

4 系统软件的设计... 12

4.1 主程序... 12

5 调试及性能分析... 14

5.1 调试与测试... 14

6 结论... 15

7 致谢... 15

参考文献... 17

附录... 18

E. 基于单片机的直流电机调速系统设计怎么测速

测速电路自己设计的话可以使用
红外对管
测速,或者
激光测速
。。。网上也有程序的
测速传感器
,自己找找就好了,有数据手册,可以说明怎么使用的,一般就是
高低电平
变化。你的
直流电机
上需要加一个测速
码盘
,靠这个检测的,也有其他方式,具体看你的测速传感器是什么样的。

F. 用51单片机测电机的转速,,,,,谢谢各位。。

用一个转速传感器或者编码器,利用单片机引脚的脉冲沿捕获中断,1个计数器用于记录2相邻脉冲捕获时间间隔,一个计数器用于记录脉冲数。
然后计算1s时间内脉冲的个数就是频率啦,再通过换算的电机转速;

G. 锘轰簬51鍗旷墖链虹殑杞阃熸祴閲忚捐★纴绋嫔簭缂栧啓锛佺数璺浠跨湡锲

娴嬮噺杞阃燂纴浣跨敤鍏夌数浼犳劅鍣锛岃娴嬬数链哄甫锷ㄧ焊鐗囨棆杞锛屾垜浠鍦ㄧ焊鐗囦笂寮浜10灏忓瓟锛岀数链烘疮镞嬭浆涓锻ㄥ氨浼氢骇鐢10涓鑴夊啿锛屼骇鐢12涓鑴夊啿锛岃佹眰灏呜浆阃熷硷纸杞/鍒嗭级鏄剧ず鍦ㄦ暟镰佺′笂銆

瀹为獙绋嫔簭濡备笅锛

#include<REG52.H>

#defineucharunsignedchar

#defineuintunsignedint

#defineulongunsignedlong

#defineLED_DATP1

sbitLED_SEG0=P0^3;

sbitLED_SEG1=P0^2;

sbitLED_SEG2=P0^1;

sbitLED_SEG3=P0^0;

//sbitpin_SpeedSenser=P3^5;//鍏夌数浼犳劅鍣ㄤ俊鍙锋帴鍦═1涓

#defineTIME_CYLC100//12M鏅舵尟锛屽畾镞跺櫒10ms涓鏂涓娆鎴戜滑1绉掕$畻涓娆¤浆阃//1000ms/10ms=100

#definePLUS_PER10//镰佺洏镄勯娇鏁锛岃繖閲屽亣瀹氱爜鐩树笂链10涓榻匡纴鍗充紶镒熷櫒妫娴嫔埌10涓鑴夊啿锛岃や负1鍦

#defineK100.0//镙″嗳绯绘暟

unsignedcharcodetable[]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchardataDisbuf[4];//鏄剧ず缂揿啿鍖

uintTcounter=0;//镞堕棿璁℃暟鍣

bitFlag_Fresh=0;//鍒锋柊镙囧织

bitFlag_clac=0;//璁$畻杞阃熸爣蹇

bitFlag_Err=0;//瓒呴噺绋嬫爣蹇

//鍦ㄦ暟镰佺′笂鏄剧ず涓涓锲涗綅鏁

voidDisplayFresh();

//璁$畻杞阃燂纴骞舵妸缁撴灉鏀惧叆鏁扮爜绠$紦鍐插尯

voidClacSpeed();

//鍒濆嫔寲瀹氭椂鍣═0

voidinit_timer0();

//鍒濆嫔寲瀹氭椂鍣═1

voidinit_timer1();

//寤舵椂鍑芥暟

voidDelay(uintms);

voidit_timer0()interrupt1/*interruptaddressis0x000b*/

{

TF0=0;//d瀹氭椂鍣T0鐢ㄤ簬鏁扮爜绠$殑锷ㄦ佸埛鏂

//

TH0=0xC0;/*initvalues*/

TL0=0x00;

Flag_Fresh=1;

Tcounter++;

if(Tcounter>TIME_CYLC)

{Flag_clac=1;//锻ㄦ湡鍒帮纴璇ラ吨鏂拌$畻杞阃熶简

}

}

voidit_timer1()interrupt3/*interruptaddressis0x001b*/

{

TF1=0;//瀹氭椂鍣═1鐢ㄤ簬鍗曚綅镞堕棿鍐呮敹鍒扮殑鑴夊啿鏁

//瑕侀熷害涓嶆槸寰埚揩锛孴1姘歌繙涓崭细鐩婂

Flag_Err=1;//濡傛灉阃熷害寰堥珮锛屾垜浠搴旇冭槛鍙﹀栦竴绉嶆祴阃熸柟娉曪纴锛氲剦鍐插藉害绠楄浆阃

}

voidmain(void)

{

Disbuf[0]=0;//寮链烘椂锛屽埯濮嫔寲涓0000

Disbuf[1]=0;

Disbuf[2]=0;

Disbuf[3]=0;

init_timer0();

init_timer1();

while(1)

{

if(Flag_Fresh)

{Flag_Fresh=0;

DisplayFresh();//瀹氭椂鍒锋柊鏁扮爜绠℃樉绀

}

if(Flag_clac)

{Flag_clac=0;

ClacSpeed();//璁$畻杞阃燂纴骞舵妸缁撴灉鏀惧叆鏁扮爜绠$紦鍐插尯

Tcounter=0;//锻ㄦ湡瀹氭椂娓呴浂

TH1=TL1=0x00;//鑴夊啿璁℃暟娓呴浂

}

if(Flag_Err)//瓒呴噺绋嫔勭悊

{

//鏁扮爜绠℃樉绀哄瓧姣'EEEE'

Disbuf[0]=0x9e;//寮链烘椂锛屽埯濮嫔寲涓0000

Disbuf[1]=0x9e;

Disbuf[2]=0x9e;

Disbuf[3]=0x9e;

while(1)

{DisplayFresh();//涓嶅啀娴嬮绛夊緟澶崭綅i

}

}

}

}

//鍦ㄦ暟镰佺′笂鏄剧ず涓涓锲涗綅鏁

voidDisplayFresh()

{

P2|=0xF0;

LED_SEG0=0;

LED_DAT=table[Disbuf[0]];

Delay(1);

P2|=0xF0;

LED_SEG1=0;

LED_DAT=table[Disbuf[1]];

Delay(1);

P2|=0xF0;

LED_SEG2=0;

LED_DAT=table[Disbuf[2]];

Delay(1);

P2|=0xF0;

LED_SEG3=0;

LED_DAT=table[Disbuf[3]];

Delay(1);

P2|=0xF0;

}

//璁$畻杞阃燂纴骞舵妸缁撴灉鏀惧叆鏁扮爜绠$紦鍐插尯

voidClacSpeed()

{

uintspeed;

uintPlusCounter;

PlusCounter=TH1*256+TL1;

speed=K*(PlusCounter/PLUS_PER)/60;//K鏄镙″嗳绯绘暟锛屽傞熷害涓嶅嗳锛岃皟鑺侹镄勫ぇ灏

Disbuf[0]=(speed/1000)%10;

Disbuf[1]=(speed/100)%10;

Disbuf[2]=(speed/10)%10;

Disbuf[3]=speed%10;

}

//鍒濆嫔寲瀹氭椂鍣═0

voidinit_timer0()

{

TMOD&=0xf0;//瀹氭椂10姣绉/*Timer0mode1withsoftwaregate*/

TMOD|=0x01;/*GATE0=0;C/T0#=0;M10=0;M00=1;*/

TH0=0xC0;/*initvalues*/

TL0=0x00;

ET0=1;/*enabletimer0interrupt*/

EA=1;/*enableinterrupts*/

TR0=1;/*timer0run*/

}

//寤舵椂鍑芥暟

voidDelay(uintms)

{

uchari;

while(ms--)

for(i=0;i<100;i++);

}

//鍒濆嫔寲瀹氭椂鍣═1

voidinit_timer1()

{

TMOD&=0x0F;/*Counter1mode1withsoftwaregate*/

TMOD|=0x50;/*GATE0=0;C/T0#=1;M10=0;M00=1;*/

TH1=0x00;/*initvalues*/

TL1=0x00;

ET1=1;/*enabletimer1interrupt*/

EA=1;/*enableinterrupts*/

TR1=1;/*timer1run*/

}

阅读全文

与基于单片机的电机测速系统相关的资料

热点内容
mysql命令查看表 浏览:531
阿里云服务器登录密码忘了怎么办 浏览:495
linuxwwwdata 浏览:992
用苹果终端java编译 浏览:364
安卓怎么拼接截屏 浏览:17
如何从安卓手机上修改wifi密码 浏览:226
安卓12一加如何升级 浏览:86
冒险小虎队pdf下载 浏览:542
程序员黑话今晚加班 浏览:930
androidgetmethod 浏览:798
编程输出1112 浏览:792
加密货币矿怎么样 浏览:212
信息流优化师和程序员 浏览:101
pythonkivy框架 浏览:734
xshell怎样返回上一条命令 浏览:489
python函数内存机制 浏览:829
手机国际网络服务器地址 浏览:398
安卓系统投影仪怎么连接外接设备 浏览:816
阴线向下接进20日均线选股源码 浏览:433
穴位图pdf 浏览:46