直流电机:
其实直流电机也就是小的时候玩的四驱车的马达,但是在单片机驱动是,需要家驱动电路,我至今还没驱动起直流电机,就是因为目前不知道怎么来连接驱动电路;
控制直流电机的转速的是用PWM波形来控制,就是控制高电平持续时间在一个周期中所占的比例,这个有个专用的名词叫占空比来着
用单片机得到PWM波形有三种方式
方式1:利用软件延时,当高电平延时时间到时的时候,对I/O口电平取反,然后咋延时,当低电平延时时间到后,在对I/O口进行取反,如此循环就得到PWM波形
方式2:利用的是定时器延时,控制方法同上
方式3:利用单片机自带的PWM控制器
示例代码:得到PWM波形
//利用软件延时:并且用键盘扫描得到不同的PWM
#include
#define uint unsigned int
#define uchar unsigned char
sbit PWN = P1^1;
sbit key1 = P3^1;
sbit key2 = P3^2;
uchar num;
uint yanshi;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
void delayms(uint z)
{
uint x,y;
for(x = z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
while(1)
{
P3 = 0xff;
if(key1 ==0)
{
delayms(2);
if(key1 ==0)
{
while(!key1);
num++;
if(num ==7)
{
num =0;
}
yanshi = 200*num;
}
}
switch(num)
{
case 1:
{
PWN = ~PWN;
P0 = table[num];
delayms(yanshi);
}
break;
case 2:
{
PWN = ~PWN;
P0 = table[num];
delayms(yanshi);
}
break;
case 3:
{
PWN = ~PWN;
P0 = table[num];
delayms(yanshi);
}
break;
case 4:
{
PWN = ~PWN;
P0 = table[num];
delayms(yanshi);
}
break;
case 5:
{
PWN = ~PWN;
P0 = table[num];
delayms(yanshi);
}
break;
case 6:
{
P0 = table[num];
PWN = 1;
}
break;
}
}
}
示例代码2:
#include
#define uint unsigned int
#define uchar unsigned char
#define TIME 600
sbit led1 = P1^1;
void delay(uint xx)
{
while(xx--);
}
void main()
{
uint x;
while(1)
{
for(x = 0;x