1、。),双(双相绕组通电)四拍(AB-BC-CD-DA-AB-。),八拍(A-AB-B-BC-C-CD-D-DA-A。)。注意:这款电机的减速比是1:64,也就是说电机每次的步进角度为5.625/64度,步进角度很小,也使得电机转速很精准,非常适合细微控制。通过控制单片机P1.0-P1.3来操作步进电机了,我们为了快速操作IO口,直接对P1进行赋值,而不是每位单独赋值。参看上面的电机驱动表格,我们列出电机操作方法:橙(P1.0)黄(P1.1)粉(P1.2)蓝(P1.3)十六制(P1口)10xF10xF30xF20xF60xF40xFC0xF80xF9实验代码:#include #define u
2、char unsigned char#define uint unsigned intsbit MC0 =P30;sbit MC1 =P31;sbit MC2 =P32;sbit MC3 =P33;sbit KeyIn1 = P24;sbit KeyIn2 = P25;sbit KeyIn3 = P26;sbit KeyIn4 = P27;sbit KeyOut1 = P23;sbit KeyOut2 = P22;sbit KeyOut3 = P21;sbit KeyOut4 = P20; sbit ADDR0 = P10;sbit ADDR1 = P11;sbit ADDR2 = P12;s
3、bit ADDR3 = P13;sbit ENLED = P14;sbit ENLCD = P15;sbit BUZZ = P16;uchar code CCW8=0xF9,0xF8,0xFc,0xF4,0xF6,0xF2,0xF3,0xF1; /顺时钟旋转相序表uchar code CW8=0xF1,0xF3,0xF2,0xF6,0xF4,0xFc,0xF8,0xF9; /逆时钟旋转相序表uchar Q16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x86;uint Led_n = 0;void delaynms
4、(uint aa)uchar bb;while(aa-)for(bb=0;bb115;bb+) /1ms基准延时程序;void motor_ccw(uint x)uchar i,j;for(j=0;j8;j+) /电机旋转一周,不是外面所看到的一周,是里面的传动轮转了一周for(i=0;ii+) /旋转45度P3=CCWi;delaynms(x); /调节转速void motor_cw(uint y)j+)P3=CWi;delaynms(y); n(uint a, uint b )uchar r;for(r=0;r(22*a);r+) motor_cw(b); /电机逆转a/3圈以b速度,因为
5、减速比为1/64,64/3=22 s(uint a, uint b) for(r=0; motor_ccw(b); /电机顺转a/3圈以b速度 void main(void) /假设8层楼,现在这系统装在四楼的电梯,电梯转一圈就升或降一层楼 uint z=1000; ENLED = 0; ADDR0 = 0; ADDR1 = 0; ADDR2 = 0; ADDR3 = 1; P0 = Q4; while(1) KeyOut1 = 1; KeyOut2 = 1; KeyOut3 = 1; KeyOut4 = 0; if(KeyIn1 = 1) KeyOut1 = 0; KeyOut4 = 1;
6、if(KeyIn1 = 0) delaynms(5); if(KeyIn1 = 0) P0 = Q4;s(1,6);s(1,3);s(1,1);P0=Q3;s(3,1);P0=Q2; /按1楼,9/3=3圈,即下降3层 P0 = Q1; while(z-) BUZZ=0;delaynms(1);BUZZ=1; z=1000; if(KeyIn2 = 0) if(KeyIn2 = 0); /按2楼,6/3=2圈,下降2层 P0 = Q2; while(z-) if(KeyIn3 = 0) if(KeyIn3 = 0)s(1,4); /按3楼,3/3=1圈,下降1层 P0 = Q3; if(Key
7、In4 = 0) if(KeyIn4 = 0) /按4楼,电梯不动,蜂鸣器报警 while(KeyIn1 = 0)|(KeyIn2 = 0)| (KeyIn3 = 0)|(KeyIn4 = 0); KeyOut1 = 1; KeyOut2 = 0;n(1,4);n(1,1); /按5楼,3/3=1圈,上升1层 P0 = Q5;n(1,6);n(1,3);P0=Q5; /按6楼,6/3=2圈,上升2层 P0 = Q6;n(3,1);P0=Q6; /按7楼,9/3=3圈,上升3层 P0 = Q7; if(KeyIn4 = 0)P0=Q7; /按8楼,12/3=4圈,上升4层 P0 = Q8;if(KeyIn1 = 0) delaynms(5); if(KeyIn1 = 0) P0 = Q1; P0 = Q2;s(6,1); P0 = Q3;s(9,1); while(KeyIn
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1