我想把数码管换成LM016L具体的程序怎么改:
#include<reg52.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
#define THC0 0xf9
#define TLC0 0x0f //2ms
unsigned char code Duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//共阴极数码管
unsigned char Data_Buffer[8]={0,0,0,0,0,0,0,0}; // 显示缓存
uchar i=0;
sbit AddSpeed=P1^1;
sbit SubSpeed=P1^2;
sbit PWM_FC=P1^0;
int e ,e1 ,e2 ;//pid偏差
float uk ,uk1 ,duk ;//pid输出值
float Kp=5,Ki=10,Kd=1.9;//pid控制系数
int out=0;
uint SpeedSet=380;
uint cnt=0;
uint Inpluse=0,num=0;//脉冲计数
uint PWMTime=100;//脉冲宽度
unsigned char arry[];
void SendString(uint ch);
void PIDControl();
void SystemInit();
void delay(uchar x);
void PWMOUT();
void SetSpeed();
void SegRefre();
/**************主函数************/
void main()
{
SystemInit();
while(1)
{
SetSpeed(); //按键设定速度
SegRefre(); //数码管显示刷新
PWMOUT(); //输出PWM
}
}
void PIDControl() //pid偏差计算
{
e=SpeedSet-num; //误差=设定值-1S采集的脉冲值
duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2))/50;
uk=uk1+duk;
out=(int)uk; //输出为占空比
if(out>1000)
{
out=1000;
}
else if(out<0)
{
out=0;
}
uk1=uk; //变量值移位
e2=e1;
e1=e;
PWMTime=out;
}
void delay(uchar x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=50;j>0;j--);
}
void PWMOUT() //输出PWM脉冲
{
if(cnt<PWMTime) //高电平时间为PID输出PWMTime
{
PWM_FC=1;
}
else
{
PWM_FC=0;
}
if(cnt>1000) cnt=0;
}
void SystemInit()
{
TMOD=0X21;
TH0=THC0;
TL0=TLC0;
TH1=0xC0;
TL1=0XC0;
ET1=1;
ET0=1;
TR0=1;
TR1=1;
EX0=1; //中断0用来测量转速
IT0=1;
EA=1;
e =0; //初始化差值
e1=0;
e2=0;
}
void SetSpeed()
{
if(AddSpeed==0)
{
delay(200); //消抖处理
if(AddSpeed==0)
{
SpeedSet+=10;
if(SpeedSet>1500)
{
SpeedSet=1500;
}
}
}
if(SubSpeed==0)
{
delay(200);
if(SubSpeed==0)
{
SpeedSet-=10;
if(SpeedSet<0) SpeedSet=0;
}
}
}
void SegRefre() //显示刷新
{
Data_Buffer[0]=SpeedSet/1000; //分离设定值各位
Data_Buffer[1]=SpeedSet%1000/100;
Data_Buffer[2]=SpeedSet%100/10;
Data_Buffer[3]=SpeedSet%10;
Data_Buffer[4]=num/1000; //分离采集脉冲数各位
Data_Buffer[5]=num%1000/100;
Data_Buffer[6]=num%100/10;
Data_Buffer[7]=num%10;
}
程序还有出不来这么多,求大神,有偿
51单片机按键控制直流电机正反转和快慢
可以利用51单片机实现按键控制直流电机的正反转和速度调整。1. 按键与单片机的连接:首先,需要将按键连接到51单片机的I\/O端口。这些按键可以包括控制电机正转、反转和速度调整的按钮。每个按键对应单片机的一个或多个I\/O位,用于检测按键是否被按下。2. 电机控制逻辑编写:当单片机检测到特定按键被按下时...
51单片机系统中怎么测直流电机的转速,方法有几种及各方法原理是什么...
1电源引出脉冲信号,放大整形,根据极数算出转数,可能电源要加个小电感。2用霍尔元件,在轴上置磁铁,测出转速 3轴上涂一半反光,一半不反光涂料,发光管-光敏管接收,放大整形,不可强光干扰 4轴上装扇叶,发光管-光敏管接收,放大整形,不可强光干扰 5轴上装旋转编码器,不但知道转速,还可知道角度...
51单片机控制直流电机。(c语言控制)
有3种方案:第一种,通过PWM脉宽调制输出方法控制转速,控制占空比的大小可以实现调速!第二种,通过AD转换的方法控制直流电机的电压 第三种,用xtr115程控电流源来控制直流电机(类似第二种方法)如果以上的驱动能力不够的话再加上一个电压跟随器!程序方面就是一个寄存器的配置问题了,你查一下单片机的...
51单片机怎么让直流电机转动
一般而言,所有单片机的端口驱动能力都有限,还有电机的额定电压也许会比单片机的供电电压高,直接驱动电机有困难。这时候要想驱动电机,就必须根据电机的额定电压和额定功率采用合适的功率器件去驱动。下边的电路图是我工程上实际使用的,可以正反转,脉宽调制的话还可以调速。
急!用51单片机控制直流电机速度,然后用霍尔传感器测出转速,并在数管...
编程上比较简单,难点在硬件控制电路上。直流电机控制可以采用控制电压或电流;测速可以用霍尔传感器,个人感觉采用编码盘比较好一点。
51单片机实现直流电机PWM调速,为什么要用定时器?
直流电机的PWM调速,就是改变在一个周期里的通电时间,和断电时间的比,即占空比,而通电时间+断电时间=一个周期,这都是用时间来决定的,当然要用定时器。
如何用51单片机控制直流无刷电机的匀速转动
ccap0H是8位的寄存器,每次只能增加256分之1约0.4%,就给它赋的值每次加1好了 延时时间当然不能以1秒为间隔了,10ms我认为比较小,50-100ms差不多
设计基于单片机控制的直流电机闭环PWM调速系统
摘要:基于AT89C51单片机的直流电机调速设计采用目前市场上性能价格比较高的51单片机作为主控部分。同时利用PWM控制直流电机转速。并通过共阴极数码管显示出来。主要有单片机最小系统模块、LED显示模块、PWM电机转速控制模块和电源模块组成。通过调节输出矩形波的占空比来控制直流电机转速。使用简单的电路实现了智能...
单片机直流电机转速测试
另一边,单片机一个IO口接光耦一半的正极,光耦的另一半的正极接VCC负极接直流电机再接地。直流电机转轴插在圆盘圆心,保证能带动圆盘转动而不打滑。编程思想如下:一个一秒定时器函数,一个外部中断函数,每中断一次计数一次。每当即时到时,计数器中的数就是转速 圈\/S,然后清零。至于控制转速则是由IO...
51单片机通过pwm波控制直流电机进行调速是一定需要电机驱动吗?如果没...
是的,通过PWM波控制直流电机进行调速时,不一定需要专门的电机驱动。在一些简单的应用中,可以直接使用微控制器(如51单片机)来生成PWM信号,并通过适当的接口电路驱动直流电机。然而,这种方法可能存在一些限制,例如电流大小和驱动能力。如果没有电机驱动,单纯向电机使能引脚输入PWM波,也可以控制电机的...