步进电机加减速运行程C程序.docx
《步进电机加减速运行程C程序.docx》由会员分享,可在线阅读,更多相关《步进电机加减速运行程C程序.docx(6页珍藏版)》请在冰豆网上搜索。
步进电机加减速运行程C程序
1./******************************************************************/
2./*****************************************************************/
3./*
4./*步进电机加减速运行程
序
5./*步进电机启动时,转速由慢到快逐步加
速。
6./*步进电机匀速运
行
7./*步进电机由快到慢逐步减速到停止
8./*
9./******************************************************************/
10.
11.#include
12.#include
13.
14.#defineucharunsignedchar
15.#defineuintunsignedint
16.
17.sbitaddr0=P1^4;
18.sbitaddr1=P1^5;
19.sbitaddr2=P1^6;
20.sbitaddr3=P1^7;
21.
22.ucharcodeFFW[8]={0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};//正转数组
23.ucharcodeREV[8]={0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};//反转数组
24.ucharrate;
25./********************************************************/
26./*
27./*延时
28./*11.0592MHz时钟,
29./*
30./********************************************************/
31.voiddelay()
32.{
33.uchark;
34.uints;
36.do
37.{
38.for(s=0;s<100;s++);
39.}while(--k);
40.}
41.
42.
43.voiddelay2(uchark)
44.{
45.
46.uchars;
47.for(s=0;s48.
49.}
50.
51./********************************************************/
52./*
53./*步进电机正转
54./*
55./********************************************************/
56.voidmotor_ffw()
57.{
58.uchari;
59.
60.for(i=0;i<8;i++)//一个周期转30度
61.{
62.P0=FFW[i];//取数据
63.addr0=1;
64.addr1=0;
65.addr2=1;
66.addr3=1;
67.addr3=0;
68.delay();//调节转速
69.}
70.}
71.
72./********************************************************/
73./*
74./*步进电机反转
75./*
76./********************************************************/
77.voidmotor_rev()
78.{
80.
81.for(i=0;i<8;i++)//一个周期转30度
82.{
83.P0=REV[i];//取数据
84.addr0=1;
85.addr1=0;
86.addr2=1;
87.addr3=1;
88.addr3=0;
89.delay();//调节转速
90.}
91.}
92.
93./********************************************************
94.*
95.*步进电机运行
96.*
97.*********************************************************/
98.voidmotor_turn()
99.{
100.ucharx;
101.rate=0x30;
102.x=0xf0;
103.do
104.{
105.motor_ffw();//正转加速
106.rate--;
107.}while(rate!
=0x0a);
108.
109.do
110.{
111.motor_ffw();//正转匀速
112.x--;
113.}while(x!
=0x01);
114.
115.do
116.{
117.motor_ffw();//正转减速
118.rate++;
119.}while(rate!
=0x30);
120.do
121.{
122.motor_rev();//反转加速
123.rate--;
124.}while(rate!
=0x0a);
125.
126.do
127.{
128.motor_rev();//反转匀速
129.x--;
130.}while(x!
=0x01);
131.
132.do
133.{
134.motor_rev();//反转减速
135.rate++;
136.}while(rate!
=0x30);
137.}
138.
139./********************************************************140.*141.*主程序
142.*143.*********************************************************/144.main()
145.{
146.
147.P1=0xf0;
148.
149.while
(1)
150.{
151.P0=0x00;//ULN2003输出高电平
152.addr0=1;
153.addr1=0;
154.addr2=1;
155.addr3=1;
156.addr3=0;
157.delay2(255);
158.
159.motor_turn();
160.
161.}
162.}