直流电机测速并显示

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

可实现功能:
1 可控制左右旋转
2 可控制停止转动
3 有测速功能,即时显示在液晶上
4 有速度档位选择,分五个档次,但不能精确控速
5 档位显示在液晶上
用到的知识:
1 用外部中断检测电机送来的下降沿,在一定时间里统计
脉冲个数,进行算出转速。

2 通过改变占空比可改变电机速度,占空比的改变可以通过改变定时器的重装初值来实现。

3 要想精确控制速度,还需要用自动控制理论里的PID算法,但参数难以选定,故在此设计中没有涉及!#include<>
#define uchar unsigned char
#define uint unsigned int
sbit PW1=P1^0 ;
sbit PW2=P1^1 ; ;
write_data('0'+shi);
write_data('0'+ge);
}
/******延时函数********/
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--) ;
}
/************写指令************/
void write_com(uchar com)
{
lcdrs=0;
Da=com;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
/************写数据**********/
void write_data(uchar date)
{
lcdrs=1;
Da=date;
delay(1);
lcden=1;
delay(1);
lcden=0;
}
/************液晶初始化**********/
void lcd_init()
{
lcden=0;
write_com(0x38) ; //初始化
write_com(0x0c) ; //打开光标 0x0c不显示光标 0x0e光标不闪,0x0f光标闪write_com(0x01) ; //清显示
write_com(0x80+0x40);
write_data('0');
write_data(' ');
write_data('G');
write_data('e');
write_data('a');
write_data('r');
}
/***********键盘扫描程序**********/
void keyscan()
{
if(stop==0)
{
TR1=0; //关闭定时器0 即可停止转动
end_turn; // 停止供电
write_com(0x80+0x40);
write_data('0');
}
if(left==0)
{
TR1=1;
dflag=1; //转向标志置位则左转
write_com(0x80+0x40);
write_data('0'+sflag);
}
if(right==0)
{
TR1=1;
dflag=0; //转向标志复位则右转
write_com(0x80+0x40);
write_data('0'+sflag);
}
if(accelerate==0)
{
delay(10) ; //延时消抖
if(accelerate==0)
{
while(accelerate==0) ; //等待松手
sflag++;
if(sflag==2)
{
t0=20000;
t1=30000; //占空比为百分之60
write_com(0x80+0x40);
write_data('2');
}
if(sflag==3)
{
t0=15000;
t1=35000; //占空比为百分之70
write_com(0x80+0x40);
write_data('3');
}
if(sflag==4)
{
t0=10000;
t1=40000; //占空比为百分之80
write_com(0x80+0x40);
write_data('4');
}
if(sflag==5)
{
t0=5000;
t1=45000; //占空比为百分之90
write_com(0x80+0x40);
write_data('5');
}
if(sflag>=6)
{
sflag=0;
t0=25000;
t1=25000;
write_com(0x80+0x40);
write_data('1');
}
}
}
}。

相关文档
最新文档