提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
提示:这里可以添加本文要记录的大概内容:
我们学习了51单片机的定时器之后,已经定时1s,用按键控制定时的时间。
之前产生的波形都是方波,就是高电平、低电平一样的波形。PWM
提示:以下是本篇文章正文内容,下面案例可供参考
一个学期都没搞懂的直流电机工作原理,一分钟讲解清楚!
https://www.bilibili.com/video/BV1yV4y1o7Nd/?spm_id_from=333.337.search-card.all.click
基于51单片机直流电机调速实验
https://www.bilibili.com/video/BV1Eo4y1m774/?spm_id_from=333.337.search-card.all.click

接通电机会有效果?

电压越高,电机转得越快


t=t0+t1;=50+10=60
D=10/60%100
sbit motor=P1^0;
t0=50ms ,motor=0;
定时50ms,
TH0=( 65536-50000)/256;
TL0=( 65536-50000)%256;
t1=10ms
定时10ms,motor=1;
TH0=( 65536-10000)/256;
TL0=( 65536-10000)%256;
TH0=( 65536-1000)/256;
TL0=( 65536-1000)%256;
t0=150
t1=110
50 10 ->num
num<10 motor=1
num>=10 motor=0
num=60 num=0

代码如下(示例):
#include
void main()
{
//初始化定时器
while(1)
{
if(key0)
{
10
}
if(key1)
{
60
}
}
}
void timer0()interrupt 1
{
TH0=( 65536-1000)/256;
TL0=( 65536-1000)%256;
num++;
if(num<10)
{
motor=1;
}else if(num<60)
{
motor=0;
}
else
{
num=0;
}
/* t0=1*50
t1=1*10
50 10 ->num
num<10 motor=1
num>=10 motor=0
num=60 num=0*/
}
#include
sbit motor=P1^0;
sbit key0=P3^0;
sbit key1=P3^1;
sbit led0=P2^0;
unsigned int num=0;
int d=0;//占空比
//unsigned int t=0;
#define t 1000
void delay(unsigned int ms)
{
unsigned int x,y;
for(x=0;x<ms;x++)
{
for(y=0;y<100;y++);
}
}
void timer_init()
{
TMOD=0X01;//方式1 16位
TH0=( 65536-1000)/256;
TL0=( 65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
}
void main()
{
//初始化定时器
timer_init();
key0=1;
key1=1;
while(1)
{
if(!key0)
{
delay(5);
if(!key0)
{
while(!key0);
d=d+100;
if(d>t)
{
d=t;
}
}
}
if(!key1)
{
delay(5);
if(!key1)
{
while(!key1);
d=d-100;
if(d<0)
{
d=0;
}
}
}
}
}
void timer0()interrupt 1
{
TH0=( 65536-1000)/256;
TL0=( 65536-1000)%256;
num++;
if(num<d)
{
motor=1;
}else if(num<t)
{
motor=0;
}
else
{
num=0;
led0=~led0;
}
/* t0=1*50
t1=1*10
50 10 ->num
num<10 motor=1
num>=10 motor=0
num=60 num=0*/
}



//开机: TR0=1;
if(!key2)
{
TR0=1;
}
//关机:TR0=0;
if(!key3)
{
TR0=0;
}
了解直流电机工作原理,熟悉定时器定时功能,掌握电机调速技术。