男女午夜激情_www.天堂av.com_亚洲综合小说区_亚洲欧美自拍视频_成年精品_久久www免费人成—看片_激情综合五月天_久久高潮视频_最新国产成人ab网站_国产精品卡一

當前位置:機電之家首頁 >> PLC技術>> PLC基礎 >> 解決方案 >> 基于SOPC系列的簡易運動控制芯片方案
基于SOPC系列的簡易運動控制芯片方案

摘要: SM1000是一個高性價比的運動控制芯片級方案,也是SOPC解決方案,它提供長達32位的可編程計數和脈沖發生的功能,簡易而又方便于客戶應用,面向更廣泛、更一般的運動控制應用領域。
關鍵詞: 運動控制   可編程計數和脈沖發生   SOPC 

現在的運動控制器已經發展到了以專用芯片(ASIC)或FPGA作為核心處理部件的開放式運動控制器。這樣的解決方案突出的特點,是讓運動控制的處理部分以獨立的、硬件性方式展開,增加系統的性能和可靠性。有效地解決了以單純的MCU或DSP系統的處理帶寬限制,以及用戶系統軟件和運動控制軟件混雜性的問題。
業界也早已出現了各種類型的運動控制專用芯片,雖然有較高的功能、性能,但一般都比較復雜,使得客戶應用起來非常的困難。
用戶們常常需要一種容易用的運動控制芯片與通用MCU/CPU結合起來的系統方案,用以面向更一般性的或中低端的應用場合。這樣的方案里,運動控制芯片部分可以擔當關鍵的馬達控制信號發生功能,又可以擁有較高的性能和其他的系統性接口資源(若是利用8253/8254之類的計數器,就顯得捉襟見肘,計數長度太短,且沒有其他資源);而在MCU/CPU部分可以通過一些簡單的控制指令完成對馬達運動的控制,更多的資源用來處理系統界面或應用軟件。
簡單而言,就是需要一個方案有效地協調了運動控制系統的軟硬件的分工,軟件部分方便客戶開發,硬件部分確保系統性能。
深圳市斯邁迪科技發展有限公司 (Smarteer)推出的SM1000系列SOPC運動控制芯片就是上述需求的解決方案。它是在高性能系列運動控制FPGA/芯片——SM5000方案后,經過不斷的技術累積和市場調查后,特地為中低端市場應用推出的。
SM1000是一個簡易的運動控制芯片系列,它提供長達32位的可編程計數和脈沖發生的功能,脈沖頻率可以高達10M以上。同時在芯片內部增加了許多系統性的資源,比如:內置3-8譯碼器、地址鎖存器、矩陣鍵盤掃描接口和通用I/O等。由于芯片是SOPC技術方案,因此還可以根據客戶的具體需求做定向化的設計。
SM1000簡易而又方便于客戶應用,它面向更廣泛、更一般的運動控制應用領域。利用它結合MCU/CPU可以便捷地組建成一個運動控制系統,尤其是一些嵌入式、系統集成的應用系統。
SM1000非常適合于獨立多軸的馬達控制場合,同時結合控制軟件也可以非常靈活地實現常見的加減速運動控制,甚至多軸聯動控制。
以下是SM1000系列芯片技術特點和應用介紹。


一、SM1000芯片方案的技術指標
 輸入時鐘CLK頻率最高到78MHz。
 1-4道32位計數器,可達計數范圍為:1~ 2147483647。
 1-4道32位直接脈沖分頻器,可設置頻率系數范圍為:1~ 2147483647。
 1-4道正/反向脈沖輸出,可接成差分輸出。
 1-4道正/反向脈沖輸出有效指示,可接成差分輸出。
 最高輸出脈沖頻率為:CLK/64(SM1001不同)
 其他功能:
 內置3-8譯碼器,輸出7個附加片選信號;
 8通用輸入+8通用輸出;
 可接8X8矩陣鍵盤,直接讀取按鍵編碼/有效值;
 8位數據接口(內置地址鎖存,可以直接接MCS51 CPU)。


二、SM1000系列規格


三、SM1000功能框圖

四、功能引腳介紹

五、應用方向舉例
 步進馬達控制器
 輕紡設備:縫紉機/繡花機等
 機器手/臂
 空間座標測量/定位系統
 經濟型通用運動控制器
 鉆孔、銑邊設備
 其他


六、編程應用介紹
A、CPU接口
該芯片采用通用8051 8位地址/數據復用接口。由于芯片內內置了地址鎖存器,因此,可以直接與8051單片機地址/數據總線相連,而不需要通過地址鎖存器分離出地址和數據總線。另外,該芯片內置了一個3-8譯碼器,可以輸出7個片選信號,以共用戶擴展地址譯碼用。這樣,極大地方便了用戶基于8051單片機的應用系統設計。整個接口只需要14根線。包括:
 8根地址/數據總線:AD0~7
 3根片選線:CS1~3
 1根地址鎖存允許線:ALE
 1根讀允許線:RD_n
 1根寫允許線:WR_n
輸出7根片選線,地址劃分見《表二:地址分配表》。

B、地址分配

C、CPU讀/寫操作
讀寫脈沖計數器:
脈沖計數器的值可以用命令直接寫,但要讀出時,就必須先用鎖存脈沖計數器值命令,先鎖存起來,再用命令直接讀;如下所示。
寫脈沖計數器操作格式:
a、(*地址)=  數據 ;
其中:地址=基地址+0+nn*16+mm;   nn=(0~3)為通道號,mm=(0~3)為字節地址;
            數據為8bit字節數據。

讀脈沖計數器操作格式:
a、(*鎖存地址)=  任意數據;
b、變量=(*讀地址);
其中:鎖存地址=基地址+10+nn*16;   nn=(0~3)為通道號,10為鎖存脈沖計數器地址;
            鎖存命令的數據為8bit字節任意數據,其值無意義。
            讀地址=基地址+0+mm;   mm=(0~3)為字節地址;
注意:脈沖計數器長度為32位,允許全范圍設置:0x00000000~0xFFFFFFFF。實際輸出脈沖個數由下面公式給出:
           脈沖個數=(脈沖計數器值+1)/2;
           當脈沖計數器值為最大值0xFFFFFFFF時,允許最大脈沖個數為2147483648。
           當脈沖計數器值為最小值0x00000001時,允許最小脈沖個數為1。
其中,脈沖計數器值應該為奇數,如為偶數,則最后一個脈沖寬度很窄。輸出脈沖為對應頻率的方波。
           
寫脈沖頻率數據:
寫脈沖頻率數據操作格式:
a、(*地址)=  數據 ;
其中:地址=基地址+4+nn*16+mm;   nn=(0~3)為通道號,mm=(0~3)為字節地址;
            數據為8bit字節數據。

32位情況:脈沖頻率值長度為32位,允許設置范圍為:0x00000001~0xFFFFFFFF。實際輸出脈沖頻率由下面公式給出:
當脈沖頻率值<0x00800000 時:
                   脈沖頻率=(輸入時鐘頻率/2^28)*脈沖頻率值;
當脈沖頻率值≥0x00800000 時:
                   脈沖頻率=(輸入時鐘頻率/(2^36+2^28)*脈沖頻率值。

24位情況:脈沖頻率值長度為24位,允許設置范圍為:0x000001~0xFFFFFF。實際輸出脈沖頻率由下面公式給出:
當脈沖頻率值<0x00400000 時:
                   脈沖頻率=(輸入時鐘頻率/2^25)*脈沖頻率值;
當脈沖頻率值≥0x00400000 時:
                   脈沖頻率=(輸入時鐘頻率/(2^33+2^25)*脈沖頻率值。

啟動脈沖通道工作:
啟動脈沖通道工作操作格式:
a、(*地址)=  數據 ;
其中:地址=基地址+8; 
數據為8bit字節,作為允許啟動標志,定義為:
D0----為1時,允許通道1啟動,為0時不啟動;
D1----為1時,允許通道2啟動,為0時不啟動;
D2----為1時,允許通道3啟動,為0時不啟動;
D3----為1時,允許通道4啟動,為0時不啟動。

停止脈沖通道工作:
停止脈沖通道工作操作格式:
a、(*地址)=  數據 ;
其中:地址=基地址+9; 
數據為8bit字節,作為允許停止標志,定義為:
D0----為1時,允許通道1停止,為0時不停止;
D1----為1時,允許通道2停止,為0時不停止;
D2----為1時,允許通道3停止,為0時不停止;
D3----為1時,允許通道4停止,為0時不停止。

回讀數據鎖存:
CPU要讀相應功能的數據,就必須先鎖存其數據,才能讀;否則,只能讀取上次鎖存的數據。共有下面三種功能數據:
 脈沖計數器值:32bit;
 通用輸入口值:8bit;
 按鍵編碼值:7bit;
CPU讀數據是按8 bit字節讀方式進行的,32 bit脈沖計數器值需要讀4次,可按0~3任意順序讀取。8 bit值只能從地址0讀取。格式為:
a、(*鎖存地址)=  任意數據;
b、變量=(*讀地址);
其中:鎖存地址和讀地址,可參見地址分配表一。

8/8位通用輸入/輸出口:
該芯片包含8位通用輸入口和8位通用輸出口。
8位通用輸入口讀命令為:
a、(*鎖存地址)=  任意數據;
b、變量=(*讀地址);
其中:鎖存地址=基地址+12;
            讀地址    =基地址+0;(所有讀地址相同)

8位通用輸出口寫命令為:
a、(*寫地址)=  數據;
其中:寫地址=基地址+11;
            寫數據為8位字節數據。

8X8鍵盤接口:
該芯片支持8X8矩陣鍵盤,自動掃描鍵盤,識別按鍵鍵碼,CPU通過接口可讀取當前按鍵編碼值。命令如下:
a、(*鎖存地址)=  任意數據;
b、變量=(*讀地址);
其中:鎖存地址=基地址+28;
            讀地址    =基地址+0;(所有讀地址相同)

按鍵編碼格式:

標志位:為1表示有鍵正按下,為0表示沒有按鍵;
X:忽略;
回讀碼:取0~7為當前按鍵所對應的行(或列)編碼,特指輸入線(KBC_0~7);
掃描碼:取0~7為當前按鍵所對應的列(或行)編碼;特指輸出線(KBS_0~7);

七、編程示例
//A、地址常量定義:(設芯片基地址為0xe000)

#define   MC_sys_CLK                                       32000000                                             //定義芯片工作頻率

#define   MC_CNT_WR_Base_Addr                 (volatile unsigned char *) 0xe000     //定義計數器值寫基地址
#define   MC_CNT_Latch_WR_Base_Addr     (volatile unsigned char *) 0xe00A    //定義計數器鎖存寫基地址

#define   MC_FRQ_WR_Base_Addr                (volatile unsigned char *) 0xe004     //定義頻率值寫基地址

#define   MC_Startup_WR_Base_Addr            (volatile unsigned char *) 0xe008     //定義啟動寫基地址

#define   MC_Stop_WR_Base_Addr                 (volatile unsigned char *) 0xe009     //定義停止寫基地址

#define   MC_GPOut_WR_Base_Addr             (volatile unsigned char *) 0xe00B     //定義通用輸出值寫基地址

#define   MC_GPIn_Latch_WR_Base_Addr    (volatile unsigned char *) 0xe00C     //定義通用輸入值鎖存寫基地址

#define   MC_KB_Latch_WR_Base_Addr       (volatile unsigned char *) 0xe01C     //定義鍵盤編碼值鎖存寫基地址

#define   MC_ RD_Base_Addr                           (volatile unsigned char *) 0xe000     //定義回讀值讀基地址

//B、子程序片:

//0、延遲子程序:芯片讀/寫命令間要求有一定的定時間隔。
void delay(int n)
{     int i;
      for( i = 0; i<n ; i++);
}

//1、寫第n通道脈沖數值(必須為奇數)
cnt = Np*2-1;
MC_CNT_WR_Base_Addr[n*16+0] = (char)((cnt>>  0) & 0x0ff);delay(10);
MC_CNT_WR_Base_Addr[n*16+1] = (char)((cnt>>  8) & 0x0ff); delay(10);
MC_CNT_WR_Base_Addr[n*16+2] = (char)((cnt>>16) & 0x0ff); delay(10);
MC_CNT_WR_Base_Addr[n*16+3] = (char)((cnt>>24) & 0x0ff); 

//2、讀第n通道脈沖數值
MC_CNT_Latch_WR_Base_Addr [n*16+0] = (char)0; delay(10); //鎖存第n通道脈沖數值
Cnt  = MC_ RD_Base_Addr [0]; delay(10);                                       //回讀數據0字節
Cnt |= MC_ RD_Base_Addr [1]<<8; delay(10);                                //回讀數據1字節
Cnt |= MC_ RD_Base_Addr [2]<<16; delay(10);                              //回讀數據2字節
Cnt |= MC_ RD_Base_Addr [3]<<24;                                                //回讀數據3字節
if( Cnt ==0xffffffff)
{
    //第n通道脈沖輸出完處理
}

//3、寫第n通道脈沖頻率值
Nfrq= frq_pulse*0x10000000/MC_sys_CLK;  //注意整數運算溢出問題
MC_FRQ_WR_Base_Addr [n*16+0] = (char)((Nfrq>>  0) & 0x0ff); delay(10);
MC_FRQ_WR_Base_Addr [n*16+1] = (char)((Nfrq>>  8) & 0x0ff); delay(10);
MC_FRQ_WR_Base_Addr [n*16+2] = (char)((Nfrq>>16) & 0x0ff); delay(10);
MC_FRQ_WR_Base_Addr [n*16+3] = (char)((Nfrq>>24) & 0x0ff);

//4、啟動多個通道脈沖工作
MC_Startup_WR_Base_Addr[0] = (F0 & 1) | ((F1<<1)&2) | ((F2<<2)&4 | ((F3<<3)&8) ;

//5、停止多個通道脈沖工作
MC_Stop_WR_Base_Addr[0] = (F0 & 1) | ((F1<<1)&2) | ((F2<<2)&4 | ((F3<<3)&8) ;

//6、8位通用輸出口輸出
MC_GPOut_WR_Base_Addr [0] = (char)(GPOut &0x0ff) ;

//7、8位通用輸入口輸入
MC_GPIn_Latch_WR_Base_Addr [0] = (char)0; delay(10);   //鎖存通用輸入口值
GPIn_V = MC_ RD_Base_Addr [0] ;


//8、7位鍵盤按鍵編碼輸入
MC_KB_Latch_WR_Base_Addr [0] = (char)0; delay(10);   //鎖存按鍵編碼值
KBCode = MC_ RD_Base_Addr [0] ;
if(KBCode & 0x80)
{  
//當前有按鍵按下處理  
}


八、基于SM1000的運動控制系統框圖

在上述的方案里,除了1-4軸運動控制本身之外,在板上根本不需要譯碼器、鎖存器之類的芯片,按鍵掃描電路也節省了不少MCU帶寬開銷,數字量通用輸出/輸入也增加了系統的控制方便性。

英文標題::
The Simple Motion-Control  IC Solution Based on SOPC

參考文獻:

作者:未知 點擊:1047次 [打印] [關閉] [返回頂部]
本文標簽:基于SOPC系列的簡易運動控制芯片方案
* 由于無法獲得聯系方式等原因,本網使用的文字及圖片的作品報酬未能及時支付,在此深表歉意,請《基于SOPC系列的簡易運動控制芯片方案》相關權利人與機電之家網取得聯系。
電子樣本

SN系列樣冊
:鞏經理
:13915946763
:南京塞姆泵業有限公司
個人求購

王經理 【求購】  西湖輪胎  2026-3-20
蘇紅慶 【求購】  工業除濕機  2026-3-20
金喜 【求購】  線纜  2026-3-20
林杰 【求購】  自粘結鐵芯  2026-3-20
任建波 【求購】  鋰電鉆  2026-3-20
劉經理 【求購】  吊具電纜總...  2026-3-20
潘梟 【求購】  高強鋼焊絲  2026-3-19
李經理 【求購】  丹弗斯液壓...  2026-3-18
VIP公司推薦

主站蜘蛛池模板: 南投县| 自贡市| 滦平县| 巫溪县| 平潭县| 嘉定区| 华安县| 武胜县| 庄浪县| 虞城县| 天门市| 通化市| 玉田县| 文成县| 屯昌县| 七台河市| 罗甸县| 容城县| 海安县| 宝丰县| 恩施市| 巩义市| 金寨县| 双流县| 天长市| 涟源市| 萍乡市| 琼中| 焦作市| 突泉县| 裕民县| 昌邑市| 新泰市| 繁峙县| 平远县| 措勤县| 长治县| 盘山县| 孙吴县| 九台市| 阳城县|