抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

AD转换

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
time:2024-05-16
数字电压表
*/

# include "reg51.h"
sbit st = P3^0;
sbit eoc = P3^1;
sbit oe = P3^2;
sbit RS = P3^3;
sbit RW = P3^4;
sbit E = P3^5;
unsigned int vol = 0;
unsigned char t[] = {"012346789"};
unsigned char str[] = {"VOLTAGE: "};

void delay(unsigned char n)
{
unsigned int i = 0, j = 0;
for (i=0; i<n; i++)
{
for (j=0; j<120; j++);
}
}

// 写数据
void writedate(unsigned int date)
{
RS = 1;
RW = 0;
E = 0;
P1 = date;
delay(5);
E = 1;
E = 0;
}

// 写命令
void writecom(unsigned char com)
{
RS = 0;
RW = 0;
E = 0;
P1 = com;
delay(5); // 延时根据实际效果判断
E = 1;
E = 0;
}

// 初始化
void initlcd()
{
writecom(0x38);
writecom(0x0c);
writecom(0x06);
writecom(0x01);
}

void adc()
{
// 开启START
st = 0;
st = 1;
delay(5);
st = 0;
while (eoc != 1);
oe = 1;
vol = P2;
oe = 0;
}

void display()
{
unsigned char temp0 = 0, temp1 = 0, temp2 = 0;
int i = 0;

vol = vol * 100 / 51;
temp0 = vol/100;
temp1 = (vol%100)/10;
temp2 = vol%10;

writecom(0x80);
delay(5);
for(i=0; i<8; i++)
{
writedate(str[i]);
delay(5);
}
writecom(0x80 + 0x40 + 4);
delay(5);
writedate(t[temp0]);
delay(5);
writedate('.');
delay(5);
writedate(t[temp1]);
delay(5);
writedate(t[temp2]);
delay(5);
writedate('V');
delay(5);
}

void main()
{
initlcd();
while(1)
{
adc();
display();
}
}

直流电机

直流电机的控制:

  1. 方向控制:直流电机只有正负极,只需交换正负极就可以调节正反转。

  2. 转速控制:负载变化不大的时候,加在直流电动机两端的电压大小与其速度近似成正比。

PWM技术:

  1. 电动机的电枢绕组两端的电压平均值U为:$D = \frac{t_1}{T}U=DU_s$

  2. D为PWM的占空比:$D = \frac{t_1}{T}$

  3. 占空比:一个周期之内高电平的时间与整个周期时长之比。范围:0~1

L293D 芯片:

顺时针转动:最大转速192

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
/*
time:2023-05-16
51单片机对直流电机的控制
*/
# include "reg51.h"
typedef unsigned int uint;
sbit IN0 = P2^0;
sbit IN1 = P2^1;
sbit E = P2^2;


void motor()
{
IN0 = 1;
IN1 = 0;
E = 1;
}

void inittimer()
{
TMOD = 0X01;
TH0 = (65536 - 10000)/256;
TL0 = (65536 - 10000)%256;
ET0 = 1;
EA = 1;
TR0 = 1;
IN1 = 0;
}

/*void timer_isr() interrupt 1
{
TH0 = (65536 - 10000)/256;
TL0 = (65536 - 10000)%256; // 占空比:%50
IN1 = ~IN1;
}
*/
void main()
{
inittimer();
while(1)
{
motor();
}
}

步进电机

  1. 驱动芯片:L298
  2. 四相步进电机四步法和八步法:四步法:给ABCD引脚给控制信号:1001、1100、0110、0011步进电机顺时针转动。八步法:四步法的一半,1001、1000、1100、0100、0110、0010、0011、0001
  3. 四步法转动角度大,更平滑。八步法转读角度小,但是能够实现更高的转速

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
time:2023-05-16
步进电机
*/


# include "reg51.h"
typedef unsigned char uchar;
typedef unsigned int uint;
uchar st[] = {0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};

void delay(uint n)
{
uint i = 0, j = 0;
for (i=0; i<n; i++)
{
for (j=0; j<120; j++);
}
}

void stepper()
{
int i = 0;
for (i=7; i>0; i--) // 反转 每次转动45°
{
P2 = st[i];
delay(100);

}
}

void main()
{
while(1)
{
stepper();
}
}