现在我的试验系统是:一个小型的直流电机,在直流电机的转轴上安置一个小转盘,在转盘的边缘上有8个小孔,在电机的底座上有个槽型光耦传感器,当电机转动时,带动转盘转动,在转盘转动时,槽型光耦就会输出一个脉冲信号,然后用51单片机的外中断0去采集传感器输出的信号,先计算电机所转的圈数,最终得出电机的速度,在12864显示屏上显示出来。本人现在编写了一个程序,但好像是错的,不知道错在哪里了,请高手多多指教指教!!给我一个程序也行!!谢谢~~
本人在言语方面表达的可能有问题,还请大家原谅!!
我本人的程序如下,我的程序是仅仅将电机的圈数计算出来!!!请大家帮帮忙!!!
#define _0007_C_
#include "reg51.h"
#include "0007.h"
#define p2 P2
sbit rst=P1^0;
sbit cs2=P1^1;
sbit cs1=P1^2;
sbit e=P1^3;
sbit rw=P1^4;
sbit rs=P1^5;
sbit kai=P1^6;
unsigned char quanshu;
//这里时显示汉字和数字的自摸信息,由于字数太长了,本人已经删除了!!
void delay(unsigned char z)
{
while (z--);
}
void zhiling(unsigned char zhi)
{
rw=0;
rs=0;
delay(1);
p2=zhi;
e=1; //液晶下降沿触发
e=0; //液晶的使能信号是下降沿有效
}
void shuju(unsigned char shu)
{
rw=0; //对液晶是写操作
rs=1; //送入的是显示的数据
delay(1);
p2=shu;
e=1; //大液晶的使能信号是下降沿有效
e=0; //下降沿有效
}
void chushihua()
{
rst=0;
delay(200);
rst=1; //硬件复位完成
zhiling(0x3f); //开显示
zhiling(0x40); //设置 y 的 地址
zhiling(0xb8); //设置 x 的 地址
zhiling(0xc0); //设置 z 的 地址
}
void qingping()
{
unsigned char j,k;
for (j=0;j<8;j++)
{
zhiling(0xb8+j);
for (k=0;k<64;k++)
{
shuju(0x00);
}
}
}
void xianshi(unsigned char ye1,lie1,kuan,gao,daxiao,unsigned char *wenzi)
{
unsigned char j,k;
unsigned char ye,lie;
unsigned char n;
ye=0xb8+ye1;
lie=0x40+lie1;
for (j=0;j<gao;j++)
{
zhiling(ye+j);
for (k=0;k<kuan;k++)
{
zhiling(lie+k);
shuju(wenzi[n]);
n++;
if (n==daxiao)
{
n=0;
}
}
}
}
void in0()
{
IT0=1; //低电平触发
EA=1; //开总中断
EX0=1; //开外中断0
}
void main()
{
unsigned char j;
unsigned char shu[16];
char a1=0;
quanshu=0;
cs1=cs2=1;
chushihua();
qingping();
in0();
kai=0; //电机启动
while (1)
{
cs1=1;cs2=0;
xianshi(3,0,16,2,32,hanzi1); //显示 当
xianshi(3,0+16,16,2,32,hanzi2); //显示 前
xianshi(3,0+16+16,16,2,32,hanzi3); //显示 已
xianshi(3,0+16+16+16,16,2,32,hanzi4);//显示 转
cs1=0;cs2=1;
xianshi(3,0,16,2,32,hanzi5); //显示 圈
xianshi(3,0+16,16,2,32,hanzi6); //显示 数
xianshi(3,0+16+16,16,2,32,hanzi7); //显示 :
//------------------------------------------------------------
a1=quanshu/8;
for (j=0;j<16;j++)
{
shu[j]=shuzi[a1/10][j];
}
xianshi(3,0+16+16+16,8,2,16,shu);
for (j=0;j<16;j++)
{
shu[j]=shuzi[a1%10][j];
}
xianshi(3,0+16+16+16+8,8,2,16,shu);
}
}
void duan0() interrupt 0 using 1
{
quanshu++;
}
我设计的测速系统是不是错误的???是不是具有不妥的地方?要是有的话请问怎么改进??
用单片机控制风扇的转速希望提供具体电路,我是新手希望大家多多帮助...
一般直流电机调速都采用PWM(即脉宽调制)技术。即,首先在电源和电机之间串联一个开关电子器件(比如mosfet管、达林顿管),这种器件可以以极高的速度控制电路通断。然后,我利用模拟电路或者数字电路(现在多用单片机)来控制这个开关管就能控制电机的电功率。比如,我想让电机工作电压只有电源电压的一半,我...
单片机PWM直流电机问题
1、所谓的pwm就是高低变化的方波,单片机可以实现,建议选择有pwm功能的单片机;2、精度不高的话,可以用简单一点的码盘来测速,直接计数就行;精度高的话,可以用编码器,推荐avagotech的heds9710系列编码器;3、单片机可以设定为在没有发生中断时读取键盘;若正在读取键盘时产生了中断,则保存当前状态,...
求实验:《直流电机测速》的电路图。
电动机是主要的驱动设备,目前在电力拖动系统中已大量采用晶闸管(即可控硅)装置向电动机供电的KZ-D拖动系统,取代了笨重的发电动一电动机的F-D系统,又伴随着微电子技术的不断发展,中小功率直流电机采用单片机控制,调速系统具有频率高,响应快
单片机直流电机调速系统设计
进入70年代以来,体积小、耗电少、成本低、速度快、功能强、可靠性高的大规模集成电路微处理器已经商品化,把电机控制推上了一个崭新的阶段,以微处理器为核心的数字控制(简称微机数字控制)成为现代电气传动系统控制器的主要形式。PWM常取代数模转换器(DAC)用于功率输出控制,其中,直流电机的速度控制是最常见的应用。通常...
霍尔传感器测速直流电机时,三个引脚该怎么接线
用的就这几种接法:1脚:负电源(-15V)正极电源输入。2脚:电源地(OV)接地线。3脚:正电源(15V)负极电源输入。4脚:输出(Output)测量信号输出。5、7脚:初级电流输入被测物的输入电流。6、8脚:次初级电流输出被测物的输出电流。
Proteus单片机控制直流电机测速部分 74LS386 编码电机motor-encoder...
motor-encoder有五根线,左右两侧两根线接电源。下面三根线,左右两侧两根线输出相位差90度的脉冲,每旋转一圈输出多少个脉冲可以在设置对话框中设置,中间那根线,每圈输出一个脉冲。motor-encoder的电源电压可以在设置框中设置。转速显示的单位是rpm.有单片机开发控制器订做问题或许我这可以帮助的。
急!用51单片机控制直流电机速度,然后用霍尔传感器测出转速,并在数管...
编程上比较简单,难点在硬件控制电路上。直流电机控制可以采用控制电压或电流;测速可以用霍尔传感器,个人感觉采用编码盘比较好一点。
编码器测速原理,要单片机实现,怎么通过脉冲数跟速度联系起来(转轴半径...
单片机主要是通过定时器定时1秒或1分钟,同时利用计数器对光电编码器的脉冲计数,每当定时时间到,就读出计数器的脉冲个数,计数出单位时间的脉冲个数除以转一圈来的脉冲数,就是电机的转数。如:在单位时间1秒内,计数脉冲为 80000个 即80000个脉冲\/每秒 可以推出:20转\/每秒 即 1200转\/分 呵呵 满意...
用霍尔传感器对直流电机测速时,输出信号的电压是多少?需要放大吗?_百度...
一般不需要放大 举例:霍尔传感器A1344EUA-T AH3144E VCC:4-24V 驱动单片机没问题
...最好能测出顺时针转还是逆时针转,用什么传感器好呢?请大家帮...
测速用光电开关,正反转需要用三个比较吧