|
|
TB6560驅(qū)動(dòng)42步進(jìn)電機(jī)例程
- #include "reg51.h"
- #include "stdio.h"
- #include < intrins.h >
- #include<math.h>
- #define uchar unsigned char
- #define uint unsigned int
- //************************管腳定義************************************/
- sbit A_key = P0^2;//前
- sbit B_key = P0^0;//右
- sbit C_key = P0^3;//左
- sbit D_key = P0^1;//后
- sbit en_left = P1^0;//左電機(jī)使能控制位
- sbit cw_left= P1^1;//左電機(jī)方向控制位
- sbit clk_left= P1^2;//左電機(jī)脈沖控制位
- sbit en_right = P1^3;//右電機(jī)使能控制位
- sbit cw_right= P1^4;//右電機(jī)方向控制位
- sbit clk_right= P1^5;//右電機(jī)脈沖控制位
- /////////////////////////函數(shù)聲明////////////////////////////////////////
- void timer1_init(); //定時(shí)器1初始化函數(shù)
- void move_left(uint speed_l,uchar cw,uchar en);//左電機(jī)運(yùn)動(dòng)函數(shù)
- void move_right(uint speed_r,uchar cw,uchar en);//右電機(jī)運(yùn)動(dòng)函數(shù)
- void clk(uint speed,uint step);
- void delay(uint speed);
- //////////////////變量定義////////////////////////////////////////////////
- uint n;//進(jìn)定時(shí)器1中斷次數(shù)計(jì)數(shù)
- uint speed;//電機(jī)速度控制變量
- /**************函數(shù)體******************************************/
- /*******************************/
- void timer1_init()
- {
- TMOD=0X10;
- ET1=1;
- EA=1;
- TH1=(65536-100)/256;
- TL1=(65536-100)%256;
- TR1=1;//定時(shí)器啟動(dòng)后 運(yùn)動(dòng)控制脈沖將一直產(chǎn)生 小車(chē)的運(yùn)動(dòng)方式受 cw 和en控制
- }
- void main (void)
- {
- delay(10);
- timer1_init();
- while(1)
- {
- if(A_key==1&&B_key==0&&C_key==0&&D_key==0)
- {
- EA=1;
- move_left(20,0,1);
- move_right(20,1,1);
-
- }
- else if(A_key==0&&B_key==1&&C_key==0&&D_key==0)
- {
- EA=1;
- move_left(20,0,1);
- move_right(20,0,1);
-
- }
- else if(A_key==0&&B_key==0&&C_key==1&&D_key==0)
- {
- EA=1;
- move_left(20,1,1);
- move_right(20,1,1);
-
- }
- else if(A_key==0&&B_key==0&&C_key==0&&D_key==1)
- {
- EA=1;
- move_left(20,1,1);
- move_right(20,0,1);
-
- }
- else
- {
- EA=0;
- }
-
- }
-
- }
- void delay(uint speed)
- {
- while(speed--)
- {
- ;
- }
- }
- void timer1_serve() interrupt 3
- {
- TH1=(65536-100)/256;
- TL1=(65536-100)%256;
- n=n+1;
- if(n==speed)
- {
- clk_left=~clk_left;
- clk_right=~clk_right;
- n=0;
- }
-
-
- }
- void move_right(uint speed_r,uchar cw,uchar en)
- { //speed_r速度控制變量 cw方向控制變量 en使能控制變量
- speed=speed_r; //speed數(shù)值與速度成反比 請(qǐng)結(jié)合實(shí)際情況進(jìn)行調(diào)節(jié),
- if(cw==1) //但速度不能無(wú)限加快因?yàn)椴竭M(jìn)電機(jī)有速度上限
- { //而且速度加快是力矩會(huì)下降,容易導(dǎo)致丟步現(xiàn)象
- cw_right=1; //所以實(shí)際應(yīng)用當(dāng)中應(yīng)調(diào)節(jié)到速度可力矩比較合適的數(shù)值
- } //應(yīng)考慮到電池電壓,輪胎直徑等因素
- else
- {
- cw_right=0; //cw 控制電機(jī)正反轉(zhuǎn),1與0各代表一個(gè)方向
- }
- if(en==1)
- { //en 為使能位 1:能 0:不能
- en_right=1;
- }
- else
- {
- en_right=0;
- }
-
- }
- void move_left(uint speed_l,uchar cw,uchar en)
- { //speed_l速度控制變量 cw方向控制變量 en使能控制變量
- speed=speed_l;
- if(cw==1)
- {
- cw_left=1;
- }
- else
- {
- cw_left=0;
- }
- if(en==1)
- {
- en_left=1;
- }
- else
- {
- en_left=0;
- }
-
- }
復(fù)制代碼 |
|