登录
|
立即注册
|
使用QQ帐号登录
论坛
>
51单片机
发帖
|
51单片机直流电机调速仿真与程序
看8001
|
回4
|
收藏
楼主
ID:331603
只看他
2018-9-28 16:43
直流电机调速仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
代码:
#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
沙发
ID:89286
只看他
2018-9-28 20:12
thanks for sharing
板凳
ID:282457
只看他
2018-11-25 10:17
本帖最后由 qqhrchen 于 2018-11-25 10:47 编辑
这个程序肯定不能PWM调速的。
51单片机没有PWM功能,只能用定时器模拟PWM的实现。
必须用到定时器的中断,即PWM的实现是在定时中断里完成的。
地板
ID:282457
只看他
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;
}
}
5
#
ID:750834
只看他
2020-5-13 15:13
为什么打不开啊
51黑电子论坛
Powered by
Discuz!
X3.1
首页
|
标准版
|
触屏版
|
电脑版