實驗材料
類目型號
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中能看到...