舞蹈機器人步進機仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ截圖20180524085421.png (55.75 KB, 下載次數(shù): 53)
下載附件
2018-5-24 08:57 上傳
QQ截圖20180524085540.png (60.34 KB, 下載次數(shù): 61)
下載附件
2018-5-24 08:57 上傳
QQ截圖20180524085526.png (14.04 KB, 下載次數(shù): 50)
下載附件
2018-5-24 08:57 上傳
QQ截圖20180524085513.png (25.35 KB, 下載次數(shù): 52)
下載附件
2018-5-24 08:57 上傳
單片機源程序如下:
- #include "reg51.h"
- #include "intrins.H"
- //8步式步進電機脈沖序列
- //unsigned char steps[8] = {0x77,0x33,0xbb,0x99,0xdd,0xcc,0xee,0x66};
- unsigned char steps[8] = {0x2,0x6,0x4,0xc,0x8,0x9,0x1,0x3};
- //當前各電機在上述序列中的位置
- unsigned char cur_step[8] = {0,0,0,0,0,0,0,0};
- //這個文件用于記錄舞步信息序列
- char speed_tickers[8] = {0,0,0,0,0,0,0,0};
- //從上述文件中讀出的當前舞步信息
- unsigned char speeds[8] = {0,0,0,0,0,0,0,0};
- unsigned char data_pointer = 0;//指向舞步數(shù)據(jù)的指針
- unsigned char time_t = 0;//指定重新讀取一次 speeds 值的計時周期
- code char dancedata[] = {54,15,12,12,87,95,65,45,-89,-88,-54,-54,54,68,-45,-65,-65,-48,101,121,115,117,19,
- -98,-100,-21,-114,-101,-24,-98,95,102,102,100,130,30,10,-90,-120,87,102,103,105,109,104,-30,-102,-104,-106,110,100,
- 54,15,12,12,87,95,65,45,-89,-88,-54,-54,-98,95,102,102,100,130,30,10,-90,-120,87,102-114,-101,-24,-98,95,102,102,
- 100,130,30,10,-90,-120,87,102,102,100,130,30,10,-90,-120,87,102,103,105,54,15,12,12,87,95,65,45,-89,-88,-54,
- -98,-100,-21,-114,-101,-24,-98,95,102,102,100,130,30,10,-90,-120,87,102,103,105,12,87,95,65,45,-89,-88,-54,
- -98,-100,-21,-114,-101,-24,-98,95,102,102,100,130,30,10,-90,-120,87,102,103,105,109,104,-30,-102,-104,-106,110,
- 100,130,30,10,-90,-120,87,102,102,100,130,30,10,-90,-120,87,-120,87,102,103,105,109,104,-30,-102,-104,-106,110,
- 54,15,12,12,87,95,65,45,-89,-88,-54,-54,-98,95,102,102,100,130,30,10,-90,-120,87,102-114,-101,-24,-98,95,102,102,
- 54,15,12,12,87,95,65,45,-89,-88,-54,-54,-98,95,102,102,100,130,30,10,-90,-120,87,102-114,-101,-24,-98,95,102,102,
- 54,15,12,12,87,95,65,45,-89,-88,-54,-54,-98,95,102,102,100,130,30,10,-90,-120,87,102-114,-101,-24,-98,95,102,102,
- 54,15,12,12,87,95,65,45,-89,-88,-54,-54,-98,95,102,102,100,130,30,10,-90,-120,87,102-114,-101,-24,-98,95,102,102,
- -98,-100,-21,-114,-101,-24,-98,95,102,102,100,130,30,10,-90,-120,87,102,103,105,12,87,95,65,45,-89,-88,-54,
- -98,-100,-21,-114,-101,-24,-98,95,102,102,100,130,30,10,-90,-120,87,102,103,105,12,87,95,65,45,-89,-88,-54,
- -98,-100,-21,-114,-101,-24,-98,95,102,102,100,130,30,10,-90,-120,87,102,103,105,12,87,95,65,45,-89,-88,-54,
- };
- code char pin[8] = {1,2,4,8,16,32,64,128};
- char MAX_SPEED_TICKER = 120;
- unsigned char i; //電機序號
- void InitTimer(void) //初始化計數(shù)器
- {
- TH0 = 0xFA; //設(shè)置觸發(fā)周期:1000次
- TL0 = 0x24;
- TMOD = TMOD |0x01; //select mode 1
- TR0 = 1; //start timer0
- ET0 = 1; //enable timer 0 interrupt
- EA =1; //global interrupt enable
- }
- void SetAllSpeeds(void) //設(shè)置各電機的速度,并讓它運動起來
- {
- char delta; //旋轉(zhuǎn)方向 1:正 -1:反 0:停
- for(i=0;i<8;i++)
- {
- P2=pin[i]; //發(fā)送鎖存信號
- speed_tickers[i] += speeds[i]; //計數(shù)值增加 speed[i]越高,增加得越多
- if(speed_tickers[i] >= MAX_SPEED_TICKER) //如果計數(shù)值超過預定最大值,就發(fā)送脈沖
- {
- speed_tickers[i] = 0;
- delta = 1;
- }
- else if(speed_tickers[i] <= -MAX_SPEED_TICKER) //同上,反響旋轉(zhuǎn)
- {
- speed_tickers[i] = 0;
- delta = -1;
- }
- else delta = 0;
- cur_step[i] += delta;
- cur_step[i] &= 0x07; //計算當前應發(fā)脈沖
- P0 = steps[cur_step[i]];
- P2 = 0;
- }
- }
- void OnTimer(void) interrupt 1 using 2
- {
- unsigned char j;
- SetAllSpeeds();
- InitTimer();
- time_t++;
- if(time_t==200) //每200次觸發(fā)讀取一次新舞步數(shù)據(jù)
- {
- for(j=0;j<8;j++)
- speeds[j] = dancedata[data_pointer+j];
- data_pointer += 8;
- time_t = 0;
- }
- }
- void main() //程序的入口
- {
- InitTimer(); //初始化后等中斷
- while(1);
- }
-
復制代碼
所有資料51hei提供下載:
舞蹈機器人步進機仿真.zip
(61.59 KB, 下載次數(shù): 30)
2018-5-24 09:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|