|
基于MC9S12X128的直流電機與步進電機單片機源程序如下:
- /********************************************
- 龍邱MC9S12XS128函數庫
- Designed by Cherish
- E-mail:chiusir@yahoo.cn
- 軟件版本:V1.0
- 最后更新:2015年12月28日
- ------------------------------------
- Code Warrior 5.1
- 下載器:BDM2.3
- Target : MC9S12XS128
- 備注;基于庫版本程序編寫
- **********************************************/
- #include "include.h"
- unsigned char data[20],data1[7]={0x7F,0x3F,0x1F,0xF,0x7,0x3,0x1};
- unsigned int falg=1,falg1=3,falg2=3,falg3=0,falg4=14,kkk;
- void delayms(int ms) //延時函數
- {
- int ii,jj;
- if (ms<1) ms=1;
- for(ii=0;ii<ms;ii++)
- for(jj=0;jj<3338;jj++); //40MHz--1ms
- }
- void bu1()//步進電機第一步
- {PWM_Change_Duty(PWM2,0);//B_
- PWM_Change_Duty(PWM3,100);//A
- PWM_Change_Duty(PWM4,0);//B
- PWM_Change_Duty(PWM5,0);//A_// A-AB-B-BA_-A_-A_B_-B_-B_A-A
-
- }
- void bu2()//2步
- {PWM_Change_Duty(PWM2,0);
- PWM_Change_Duty(PWM3,100);
- PWM_Change_Duty(PWM4,100);
- PWM_Change_Duty(PWM5,0);
-
- }
- void bu3()
- {PWM_Change_Duty(PWM2,0);
- PWM_Change_Duty(PWM3,0);
- PWM_Change_Duty(PWM4,100);
- PWM_Change_Duty(PWM5,0);
-
- }
- void bu4()
- {PWM_Change_Duty(PWM2,0);
- PWM_Change_Duty(PWM3,0);
- PWM_Change_Duty(PWM4,100);
- PWM_Change_Duty(PWM5,100);
-
- }
- void bu5()
- {PWM_Change_Duty(PWM2,0);
- PWM_Change_Duty(PWM3,0);
- PWM_Change_Duty(PWM4,0);
- PWM_Change_Duty(PWM5,100);
-
- }
- void bu6()
- {PWM_Change_Duty(PWM2,100);
- PWM_Change_Duty(PWM3,0);
- PWM_Change_Duty(PWM4,0);
- PWM_Change_Duty(PWM5,100);
-
- }
- void bu7()
- {PWM_Change_Duty(PWM2,100);
- PWM_Change_Duty(PWM3,0);
- PWM_Change_Duty(PWM4,0);
- PWM_Change_Duty(PWM5,0);
-
- }
- void bu8()
- {PWM_Change_Duty(PWM2,100);
- PWM_Change_Duty(PWM3,100);
- PWM_Change_Duty(PWM4,0);
- PWM_Change_Duty(PWM5,0);
-
- }
- void bu()//步進電機整體程序
- {
- int i;
- int kkk;//速度標志
- kkk=falg4;
- //步進電機順轉
- if(falg3==0)
- {
- for(i=0;i<200;i++)
- {
- //按鍵減速選擇
- if(PORTE_PE5==0)
- {
- while(PORTE_PE5==0);
-
- falg4++;
- if(falg4>17)
- {
- falg4=17;
- }
- delayms(20);//防抖動
- break;
- }
- //按鍵加速選擇
- if(PORTE_PE3==0)
- {
-
- while(PORTE_PE3==0);
- falg4--;
- if(falg4==10)
- {
- falg4=11;
- }
- delayms(20);
- break;
- }
- //切換直流和步進
- if(PORTE_PE2==0)
- {
- while(PORTE_PE2==0);
- delayms(20);
- if(falg==0)
- {
- falg=1;//直流步進標志
- PWM_Change_Duty(PWM4,100);
- PWM_Change_Duty(PWM5,0);
- }
- else
- { falg=0;
-
- }
- // PORTB_PB1=0;
- break;
- }
- PWM_Change_Duty(PWM0,100);
- PWM_Change_Duty(PWM1,100);
- DDRB=~data1[17-falg4];//指示燈
- bu1();
- delayms(kkk);
- bu2();
- delayms(kkk);
- bu3();
- delayms(kkk);
- bu4();
- delayms(kkk);
- bu5();
- delayms(kkk);
- bu6();
- delayms(kkk);
- bu7();
- delayms(kkk);
- bu8();
- delayms(kkk);
- //切換逆轉
- if(PORTE_PE7==0)
- {
- while(PORTE_PE7==0);
- falg3=1;//步進狀態標志
-
- delayms(20);
- break;
- }
- //切換停止
- if(PORTB_PB0==0)
- {
- while(PORTB_PB0==0);
- falg3=2;
- delayms(20);
- break;
-
- }
- }
- }
- //步進電機逆轉
- else if(falg3==1)
- {
- for(i=0;i<200;i++)
- {
- if(PORTE_PE5==0)
- {
- while(PORTE_PE5==0);
-
- falg4++;
- if(falg4>17)
- {
- falg4=17;
- }
-
- delayms(20);
- break;
- }
- if(PORTE_PE3==0)
- {
-
- while(PORTE_PE3==0);
- falg4--;
- if(falg4==10)
- {
- falg4=11;
- }
- delayms(20);
- break;
- }
- if(PORTE_PE2==0)
- {
- while(PORTE_PE2==0);
- delayms(20);
- if(falg==0)
- {
- falg=1;
- PWM_Change_Duty(PWM4,100);
- PWM_Change_Duty(PWM5,0);
- }
- else
- { falg=0;
-
- }
- // PORTB_PB1=0;
- break;
- }
- PWM_Change_Duty(PWM0,100);
- PWM_Change_Duty(PWM1,100);
- DDRB=~data1[17-falg4];
- bu8();
- delayms(kkk);
- bu7();
- delayms(kkk);
- bu6();
- delayms(kkk);
- bu5();
- delayms(kkk);
- bu4();
- delayms(kkk);
- bu3();
- delayms(kkk);
- bu2();
- delayms(kkk);
- bu1();
- delayms(kkk);
- //切換順轉
- if(PORTE_PE6==0)
- {
- while(PORTE_PE6==0);
- falg3=0;
- delayms(20);
- break;
-
- }
- if(PORTB_PB0==0)
- {
- while(PORTB_PB0==0);
- falg3=2;
- delayms(20);
- break;
-
- }
-
- }
- }
- //停止步進電機
- else
- {
- if(PORTE_PE2==0)
- {
- while(PORTE_PE2==0);
- delayms(20);
- if(falg==0)
- {
- falg=1;
- PWM_Change_Duty(PWM4,100);
- PWM_Change_Duty(PWM5,0);
- }
- else
- { falg=0;
-
- }
-
- }
- if(PORTE_PE6==0)
- {
- while(PORTE_PE6==0);
- falg3=0;
- delayms(20);
-
- }
- if(PORTE_PE7==0)
- {
- while(PORTE_PE7==0);
- falg3=1;
- delayms(20);
- }
-
- PWM_Change_Duty(PWM0,0);
- PWM_Change_Duty(PWM1,0);
- }
- }
- void main(void)
- {
-
- unsigned char LedCnt=0;
- DDRB = 0x00;
- /* put your own code here */
- PLL_Init(PLL160);
- EnableInterrupts;
- PWM_Init(PWM0,100,100);
- PWM_Init(PWM1,100,100);
- PWM_Init(PWM2,100,100);
- PWM_Init(PWM3,100,0);
- PWM_Init(PWM4,100,100);
- PWM_Init(PWM5,100,0);
- while(1)
- {
- //下面直流和步進差不多
- if(PORTE_PE2==0)
- {
- while(PORTE_PE2==0);
- delayms(20);
- if(falg==0)
- {
- falg=1;
- PWM_Change_Duty(PWM4,100);
- PWM_Change_Duty(PWM5,0);
- }
- else
- { falg=0;
-
- }
- }
- if(falg==1)
- {
- if(PORTE_PE6==0)
- { ;
- while(PORTE_PE6==0);
- PWM_Change_Duty(PWM4,100);
- PWM_Change_Duty(PWM5,0);
-
- }
- if(PORTE_PE7==0)
- {
- while(PORTE_PE7==0);
- PWM_Change_Duty(PWM4,0);
- PWM_Change_Duty(PWM5,100);
-
- }
- if(PORTE_PE3==0)
- {
- while(PORTE_PE3==0);
- if(falg1==10)
- {falg1=3;
-
- }
- falg1++;
- if(falg1>7)
- {
- falg1=7;
- }
-
- }
- if(PORTE_PE5==0)
- {
-
- while(PORTE_PE5==0);
- if(falg1==10)
- {falg1=3;
-
- }
- falg1--;
- if(falg1==0)
- {
- falg1=1;
- }
-
- }
- if(falg1!=10)
- {
- PWM_Change_Duty(PWM1,35+falg1*2);
- DDRB=~data1[falg1-1];
- }
-
- if(PORTB_PB0==0)
- {
- PWM_Change_Duty(PWM1,0);
- falg1=10;
- while(PORTB_PB0==0);
-
- }
- delayms(20);
-
- }
- else
- {
- bu();
-
- }
- }
- }
復制代碼
|
-
-
main.docx
2018-5-26 00:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
15.22 KB, 下載次數: 5, 下載積分: 黑幣 -5
|