N76E003控制雙路步進電機(開環)

2021-10-11 18:32:42 字數 2479 閱讀 8443

實驗材料

類目型號

mcun76e003

步進電機

42步進

步進電機驅動器

設定800細分

電源24v

ttlch340

1.1、程式採用pwm中斷,實現對pwm脈衝計數,由此實現開環控制步進電機,設定為下降沿觸發。

1.2、步進電機驅動器提供en、pulse、dir、com四個介面,其中com接微控制器的vcc,en用於控制電機使能,dir用於電機換向,pulse為輸入脈衝。

1.3、根據上述說明,微控制器pwm持續產生脈衝,通過en控制步進電機是否使能

1.4、流程圖如下

//頻率

uint temp[10]

;//存放輸入捕獲值

int i=0;

uint pwm_value;

//需要改變的占空比值

uchar uart0_rx_buf[11]

;//串列埠0,串列埠1資料接收緩衝區

uchar uart0_rx_sta=0;

//串列埠0,串列埠1接收計數器

uchar uflag=0;

//串列埠中斷指令接收完成標誌

char start=0;

//用於資料記錄

uint ct1,ct2;

//脈衝期望值(0-6700)

uint evt1,evt2;

//狀態機:

//0——初始狀態

//1——串列埠

//2——執行到了指定距離。

uchar flag1=

0,flag2=0;

//pwm中斷計數器控制器

//0:關閉

//1:開啟

char cep1=

0,cep2=0;

//用於回到零點

sbit key1=p0^4;

sbit key2=p1^4;

//使能

sbit en1=p1^0;

sbit en2=p1^1;

//換向

sbit dir1=p1^2;

sbit dir2=p1^3;

//指示燈

sbit led1=p0^5;

sbit led2=p3^0;

void

delay1

(uint ms)

;void

pwm_dead_time_value

(uint16 deadtimedata);/*

程式說明:

1、pwm一直保持輸出,使用en來控制步進電機輸出

2、使用pwm中斷,實現脈衝計數,設定為全域性變數

3、串列埠接收資料,資料報見下'a1234b1234e'其中a為第乙個步進電機、b為第二個,1234為期望脈衝數

tips:程式仍存在問題:

1、在執行過程中不能二次接收資料(應對串列埠中斷關閉,回到0點後再開啟)

*/void main (

void

)//初始化保持步進電機停車

if(flag1==0)

if(flag2==0)

if(!flag1&&

!flag2)

//該狀態為接收到指令,前向運動

if(flag1==

1&&flag2==1)

}}/****************串列埠0中斷服務程式*****************/

void

uart0_test

() interrupt 4}}

}/****************pwm中斷服務程式*****************/

void

pwmisr

() interrupt 13

//-----------------1號返航-------------------

if(ct1>=evt1&&flag1==3)

//回到零點}if

(cep2)

//-----------------2號返航-------------------

if(ct2>=evt2&&flag2==3)

//回到零點

} clr_pwmf;

//清楚pwm中斷標誌位timer0_delay1ms(1)

}}

N76E003紅外解碼程式

最近學習了網上的紅外解碼程式儲存學習一下 使用的是n76e003晶元 借鑑了好多地方 只是簡單的啟動led燈 使用的是日本 nec協議 外部定時器中斷1 定時器模式2,8位自動重灌 256步溢位一次 16m晶振 判斷語句那裡自己集合了好多想了乙個案例 定義乙個16位數字 將 的使用者碼反碼和鍵碼正碼...

N76E003低功耗的處理

低功耗是專案中非常重要的一部分,尤其是對於一些使用電池供電的裝置。n76e003支援兩種低功耗模式,一種是空閒模式,一種是掉電模式,從字面意思一看就知道如果要最求最低的功耗,一定是需要使用掉電模式。在掉電模式下,作者對當前的專案應用中測試出來的最低的功耗是5ua,這個值本人認為已經是非常不錯的。針對...

N76E003編譯陣列記憶體不連續的問題

編譯的時候關閉外部編輯器,不然可能有記憶體共用問題。我使用keil c51編譯n76e003發現陣列記憶體不連續問題,這裡特意記錄下來。編譯情況 乙個16位的陣列,前3個元素是連續的位址,從第4個開始,出現不連續。用指標取陣列每乙個元素的位址能看出來。但是,debug直接把陣列放到watch中能看到...