标题:
51单片机直流电机调速仿真与程序
[打印本页]
作者:
congcong1234
时间:
2018-9-28 16:43
标题:
51单片机直流电机调速仿真与程序
直流电机调速仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(13.45 KB, 下载次数: 55)
下载附件
2018-9-28 17:32 上传
0.png
(42.5 KB, 下载次数: 60)
下载附件
2018-9-28 17:33 上传
单片机源程序如下:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void keycan(); //按键
void delayms(x); //延时
sbit K1 = P1^6;
sbit K2 = P1^7;
sbit M1 = P0^0;
sbit M2 = P0^2;
sbit M11 = P0^1;
sbit M22 = P0^3;
uint AUXR;
uint temp1=0,temp2=0;
void Timer0Init(void) //10微秒@12.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0xF6; //设置定时初值
TH0 = 0xFF; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
}
uint c=0,sudu=0;
void time_0 () interrupt 1
{
TL0 = 0xF6; //设置定时初值
TH0 = 0xFF; //设置定时初值
c++;
}
void main()
{
uint i=0;
P1=0XFF;
P0=0X00;
Timer0Init();
ET0=1;
EA=1;
while(1)
{
keycan();//按键
M11=0;
M22=0;
if(temp1==0)
{
M1=0;
}
if(temp1==1)
{
if(c<=30) M1=1;
else M1=0;
if(c>114) c=0;
}
if(temp1==2)
{
if(c<=80) M1=1;
else M1=0;
if(c>114) c=0;
}
if(sudu==1)
{
M2=1;
}
}
}
void keycan()//按键
{
if(K1==0)
{
delayms(10);
if(K1==0)
{
temp1++;
if(temp1>=3) temp1=0;
}
while(!K1);
}
if(K2==0)
{
delayms(10);
if(K2==0)
{
sudu=1;
}
while(!K2);
}
}
void delayms(x)//延时
{
uint i=0,j=0;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
复制代码
所有资料51hei提供下载:
单片机作业.zip
(109.3 KB, 下载次数: 132)
2018-9-28 16:42 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
faridzled
时间:
2018-9-28 20:12
thanks for sharing
作者:
qqhrchen
时间:
2018-11-25 10:17
本帖最后由 qqhrchen 于 2018-11-25 10:47 编辑
这个程序肯定不能PWM调速的。
51单片机没有PWM功能,只能用定时器模拟PWM的实现。
必须用到定时器的中断,即PWM的实现是在定时中断里完成的。
作者:
qqhrchen
时间:
2018-11-25 10:29
本帖最后由 qqhrchen 于 2018-12-1 10:43 编辑
void T0 (void ) interrupt 0
{static unsigned char i;
i++;
if(i>PWMH) //PWMH为高电平周期
{
PWMout=0;//1时电机转动
}
else if(i>PWM) //PWM为PWM周期
{
PWMout=1;
i=0;
}
}
作者:
9C9C9C
时间:
2020-5-13 15:13
为什么打不开啊
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1