三個步進電機同步運行 直接可用
單片機源程序如下:
- #include <REGX51.H>
- #define motor1 1
- #define motor2 2
- #define motor3 3
- #define motor1_up 0
- #define motor1_down 1
- #define motor2_up 0
- #define motor2_down 1
- #define motor3_up 0
- #define motor3_down 1
- #define sub 16
- sbit pwm1 = P0^0;
- sbit pwm2 = P0^1;
- sbit pwm3 = P0^2;
- sbit dir1 = P0^3;
- sbit dir2 = P0^4;
- sbit dir3 = P0^5;
- sbit exti1 = P1^0;
- sbit exti2 = P1^1;
- sbit exti3 = P1^2;
- int motor1_pulse = 0;
- int motor2_pulse = 0;
- int motor3_pulse = 0;
- char motor1_cons = 0;
- char motor2_cons = 0;
- char motor3_cons = 0;
- void delay_ms(int i)
- {
- unsigned char a,b;
- for(;i>0;i--)
- for(b=102;b>0;b--)
- for(a=3;a>0;a--);
- }
- void InitTimer0(void)
- {
- TMOD = 0x01;
- TH0 = 0x0FF;
- TL0 = 0x48;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void motor_control(char motor,char dir,int pulse)
- {
- if(motor == motor1)
- {
- if(dir == motor1_up)
- {
- dir1 = motor1_up;
- }
- else
- {
- dir1 = motor1_down;
- }
- motor1_cons = 0;
- motor1_pulse += (pulse * sub *2);
- }
- if(motor ==motor2)
- {
- if(dir == motor2_up)
- {
- dir2 = motor2_up;
- }
- else
- {
- dir2 = motor2_down;
- }
- motor2_cons = 0;
- motor2_pulse += (pulse * sub * 2);
- }
- if(motor ==motor3)
- {
- if(dir == motor3_up)
- {
- dir3 = motor3_up;
- }
- else
- {
- dir3 = motor3_down;
- }
- motor3_cons = 0;
- motor3_pulse += (pulse * sub *2);
- }
- }
- void motor_init(void)
- {
- while((!exti1) | (!exti2)| (!exti3))
- {
- if(!exti1)
- {
- motor_control(motor1,motor1_down,5);
- }
- if(!exti2)
- {
- motor_control(motor2,motor2_down,5);
- }
- if(!exti3)
- {
- motor_control(motor3,motor3_down,5);
- }
- while((!motor1_cons) | (!motor2_cons)| (!motor3_cons));
- }
- }
- void main(void)
- {
- InitTimer0();
- motor_init();
-
- motor_control(motor1,motor1_up,200);
- motor_control(motor2,motor2_up,200);
- motor_control(motor3,motor3_up,200);
-
- while((!motor1_cons) | (!motor2_cons)| (!motor3_cons));
- delay_ms(1000);
-
- while(1);
- }
- void Timer1_isr(void) interrupt 1 using 1
- {
- if(motor1_pulse > 0)
- {
- motor1_pulse--;
- pwm1 = !pwm1;
- }
- else
- {
- motor1_cons = 1;
- }
- if(motor2_pulse > 0)
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
程序.rar
(5.33 MB, 下載次數: 76)
2018-5-3 02:11 上傳
點擊文件名下載附件
參考可行 下載積分: 黑幣 -5
|