999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于keil軟件的一體化螺絲刀控制器設計

2019-11-14 08:17:47王飛杜向陽
軟件 2019年9期
關鍵詞:設置設計

王飛 杜向陽

摘 ?要: 針對低壓斷路器產(chǎn)品生產(chǎn)效率低、可操作性差等系列問題,提出了基于keil軟件的一體化螺絲刀控制器設計?;贙eil5(Keil uVision5)的軟件平臺及STM32f10x封裝函數(shù)包,在搭建好實物裝置的基礎上,建立控制模型及編寫控制系統(tǒng)的運行程序。編寫的程序主要是在一體化螺絲刀裝置上的各個傳感器等設備的監(jiān)測下,完成以STM32f103ZET6為主控芯片的控制器來控制相應步進電機的運行及電磁閥的開斷配合,完成一個完整的軌跡運行。并將設計的程序進行仿真、實驗調(diào)試。實驗最終表明:該裝置可以實現(xiàn)低壓斷路器高效率的生產(chǎn)且該設計的控制器可操作性強。

關鍵詞?Keil5;控制模型;STM32f103ZET6;仿真模擬;實驗調(diào)試

中圖分類號: TP319????文獻標識碼?A????DOI:10.3969/j.issn.1003-6970.2019.09.017

本文著錄格式:王飛,杜向陽. 基于keil軟件的一體化螺絲刀控制器設計[J]. 軟件,2019,40(9):75-80

Design of Integrated Screwdriver Controller Based on Keil Software

WANG Fei, DU Xiang-Yang

School of Mechanical and Automotive Engineering, Shanghai University of Engineering and Technology, Shanghai 201620, China

Abstract: For the series of low-voltage circuit breaker products with low production efficiency and poor operability, an integrated screwdriver controller design based on leil software is proposed. Based on Keil (Keil uVision5) software platform and STM32f10x package function package, based on the physical device, the control model and the running program of the control system are established. The main task of the prepared control program code is to complete the control of the corresponding stepper motor with STM32f103ZET6 as the main control chip under the monitoring of various sensors and other devices on the integrated screwdriver device (one angle control motor, two displacement control motors), a control of the torque nut motor), the designed program running code for simulation, experimental debugging. The experiment finally shows that the device can achieve high-efficiency production of low-voltage circuit breakers and the controller of the design is operability.

Key words: Keil5; Control model; STM32f103ZET6; Simulation; Experimental debugging

0??引言

ARM公司[1]在2005年收購keil公司后,于2013年10月推出了最新的開發(fā)環(huán)境Keil5。Keil提供了包括C編譯器、宏匯編、鏈接器、庫管理和一個功能強大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(uVision)將這些部分組合在一起。Keil官網(wǎng)雖然沒有發(fā)布中文版本,但是Keil系列軟件[2-3]卻被中國80%以上的軟硬件工程師使用,說明該系統(tǒng)軟件的強大,以及它的發(fā)展前景。

此軟件開發(fā)系統(tǒng)的優(yōu)點:Keil5生成的目標代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。與匯編相比,C語言在功能上、結構性、可讀性、可維護性上有明顯的優(yōu)勢,因而易學易用。因此,借助集成開發(fā)環(huán)境Keil5,在以STM32f103ZET6為主控芯片的控制器[4-6]硬件平臺來控制一體化螺絲刀裝置運行,提高裝置的工作

1??裝置結構與硬件設計

該裝置控制器是對塑殼斷路器生產(chǎn)設備控制方式的改進。系統(tǒng)指令實現(xiàn)的載體,是控制系統(tǒng)功能得以實現(xiàn)的執(zhí)行者,硬件的執(zhí)行方式?jīng)Q定了程序控制的設計。首先,了解一體化螺絲刀裝置的組成。然后,分析該裝置主要執(zhí)行部分,如驅動電機、電磁閥及傳感器等,知道各個構件的運行規(guī)律,選擇與控制器相連接的IO口。一體化螺絲刀裝置的控制裝置結構:4個步進電機(一個角度控制電機,兩個位移控制電機,一個控制扭螺母電機)、兩個電磁離合器、扭矩[7]傳感器、移動框架、組合套筒等。Driver代表步進電機驅動器,SEN1~3是傳感器和離合器的驅動模塊,UART串口通信,與PC機相連接。其電路原理[8]圖如圖1所示。

裝置運行原理。為了使塑殼斷路器內(nèi)部核心器件跳閘金屬片都能在某一設定的時間內(nèi)頂跳觸頭,斷開電路完成任務。由此,設計了一體化螺絲刀旋緊裝置。我們先假定一個頂跳時間,給跳閘金屬片通電,隨著溫度升高,金屬片變形。這時通過CCD相機對

金屬片上的特定位置進行數(shù)據(jù)采集,經(jīng)過AD轉換及通訊總線傳輸給下位機,讀取指令到處理器[9],通過MCU輸出指令傳遞給各個輸出引腳和驅動器模塊。圖2為一體化螺絲刀控制器的硬件執(zhí)行過程與聯(lián)系。

2??軟件設計

2.1工程建立與分組關系

先在Keil5項目欄里新建工程模板。由于STM32[10-11]這種級別的MCU包含數(shù)百個寄存器,如果通過操作每個寄存器來設計一個控制系統(tǒng),即困難又浪費時間,因此,我們借助ST(意法半導體)推出的官方固件庫[12],建立自己的工程模板,然后按照自己的意愿設計自己的控制代碼。打開MDK新建工程文件夾YTHLSD(一體化螺絲刀英文所寫),然后在此文件夾下建立文件夾USER、HARDWARE、SYSTEM、CORE、FWLIB和README等。

USER分組負責存放代碼工程文件,如USER分組下的main.c主要存放主函數(shù),其中包含ST提供的stm32f10x_it.c用來定義中斷函數(shù),System_?stm32f10x.c用來初始化時鐘函數(shù)等。HARDWARE分組存放外部硬件驅動函數(shù),該設計包含了led.c、key.c、driver.c三個硬件驅動函數(shù),如driver.c中調(diào)用stm32f10x_gpio.c中的函數(shù)對driver進行初始化,每一個.c源文件對應一個.h頭文件。SYSTEM分組存放了一些ST提供的公用代碼,包括:延時函數(shù),IO口位操作、寄存器操作及串口相關函數(shù),方便我們調(diào)用這些函數(shù)。CORE分組放置固件庫啟動文件和核心文件,通常不需要改動。FWLIB分組下存放著ST官方提供的外設固件庫原文件和頭文件,根據(jù)各自設計需求添加或刪除,同樣每個.c源文件對應一個.h頭文件。README分組是整理程序設計過程中的一些注意事項,方便他人使用及問題查找。這些分組之間的結構聯(lián)系如圖3所示。

2.2??程序設計

以該裝置控制系統(tǒng)的執(zhí)行器件的控制過程與電路原理圖為依據(jù),如圖3代碼層次結構,Keil5開發(fā)軟件為平臺及STM32f10x封裝函數(shù)包,設計程序[13]驅動代碼。設計過程包括主函數(shù)的設計,子函數(shù)的調(diào)用等。設計過程:

(1)打開YTHLSD下USER分組內(nèi)的main.c主函數(shù)。首先將ST提供的存放在SYSTEM分組下的底層驅動函數(shù)包含進來。其中包含的頭文件:#include "sys.h"(定義了I/O口的輸入和輸出宏定義)、#include "usart.h"(串口初始化和中斷的接收)、#include "delay.h"(實現(xiàn)系統(tǒng)延時功能)。然后,將HARDWARE分組下的外部硬件驅動函數(shù)包含進來。其中包含的頭文件:#include "key.h"(外設按鍵驅動代碼)、#include "led.h"(外設led驅動代碼)、#include "drivers"(外設步進電機驅動代碼)。最后,將USMART分組下的串口調(diào)試函數(shù)#include "usmart.h"(串口調(diào)試組件)包含進來。

(2)寫主函數(shù)(int main?(void))。主函數(shù)內(nèi)包含的初始化函數(shù)有:延時(delaine())、中斷設置(NVIC_?PriorityGroupConfig?(NVIC_PriorityGroup_2))、串口(uart_init?(115200))、USMART?(usmart_dev.init(72))、按鍵(KEY_Init())、傳感SEN_Init();LED端口(LED_?Init())、高級定時器(TIM8_OPM_RCR_Init?(999, 72-?1))和步進電機驅動函數(shù)(Driver_Init())、兩個關鍵字(u8 I; u8 keyval)。步進電機驅動器端口與控制板引腳的連接如表1。

(3)在while()循環(huán)里面設定函數(shù)之間的邏輯關系,首先按下WKUP_PRES,調(diào)用絕對定位函數(shù)Locate_Abs(0,?10000);電機回初始設定點,SEN1_?ACT和SEN2_ACT是調(diào)用電磁閥和步進電機的函數(shù),Locate_Rle(100000,?10000,?CW/CCW)為相對運動函數(shù),代表頻率設定值是10kHz,當?shù)谌齻€參數(shù)選CW時,順時針發(fā)出100K個脈沖,選為CCW時逆時針發(fā)出100K個脈沖,驅動步進電機轉動確定的角度。

完整的主程序為:

#include "sys.h"

#include "usart.h"

#include "delay.h"

#include "key.h"

#include "led.h"

#include "usmart.h"

#include "driver.h"

上面部分為程序設計的第一部分,宏定義的聲明。

int main(void)

{

u8 i;

u8 keyval;

delay_init();

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

uart_init(115200);

usmart_dev.init(72);

LED_Init();

KEY_Init();

SEN_Init();

Driver_Init();

TIM8_OPM_RCR_Init(999,?72-1);

中間部分為程序設計的第二部分,定義關鍵字i、keyval,延時、中斷、串口通信、串口調(diào)試、led燈、按鍵、傳感外設、步進電機驅動、高級計數(shù)器TIM8等函數(shù)初始化,中斷優(yōu)先級分組設為2位搶占優(yōu)先級2位相應優(yōu)先級,串口波特率設為115200,usmart設晶振設為72MHz;TIM8初始化計數(shù)器向上計數(shù),自動重裝載值arr設為999,預分頻值pos設為72-1。

while(1)

{

keyval=KEY_Scan(0);

if(keyval==WKUP_PRES)

{

Locate_Abs(0,?10000);

} ???else if(keyval==SEN1_ACT)

{

Locate_Rle(100000,?10000,?CW);

}

else if(keyval==SEN2_ACT)

{

Locate_Rle(100000,?10000,?CCW);

}

delay_ms(10);

i++;

if(i==50)

{

i=0;

LED1=!LED1;

}

}

}

最后部分為程序設計的邏輯部分,在while()循環(huán)中,通過if語句來判斷當前應該執(zhí)行的函數(shù)語句,來控制電磁閥和步進電機動作。其中主要的子函數(shù)設計為步進電機的端口初始、中斷及相關參數(shù)設置,其中核心部分為步進電機的驅動程序設計[14],包含相對運動和絕對運動。相對運動對應相對定位函數(shù):

void Locate_Rle(long num,?u32 frequency,?DIR_?Type dir)

{

if(num<=0)

{

printf("\r\nThe num should be greater than zero?。。躵\n");

return;

}

if(TIM8->CR1&0x01)

{

printf("\r\nThe last time pulses is not send finished,?wait please?。躵\n");

return;

}

if((frequency<20)||(frequency>100000))

{

printf("\r\nThe frequency is out of range! please reset it?。。╮ange:20Hz~100KHz)\r\n");

return;

}

motor_dir=dir;

DRIVER_DIR=motor_dir;

if(motor_dir==CW)

target_pos=current_pos+num;

else if(motor_dir==CCW)

target_pos=current_pos-num;//

rcr_integer=num/(RCR_VAL+1);

rcr_remainder=num%(RCR_VAL+1);

is_rcr_finish=0;

TIM8_Startup(frequency);

}

相對定位函數(shù)中語句if(num<=0)表示沒有脈沖產(chǎn)生,不執(zhí)行下列程序語句,直接返回。if(TIM8->?CR1&0x01),代表上一次脈沖還未發(fā)送完成時,程序將直接返回初始位置。語句if((frequency<20)||?(frequency>100000))為脈沖頻率不在20Hz~100KHz范圍內(nèi)時,直接返回初始狀態(tài)。motor_dir=dir;和DRIVER_DIR=motor_dir;為得到和設置電機旋轉方向。然后通過if-else判斷步進電機正傳還是反轉,if(motor_dir==CW)則表示正傳,將目標位置加上num的值作為步進電機的目標值,否則else if?(motor_dir==CCW)反轉,將目標位置減去num的值作為步進電機的目標值,rcr_integer和rcr_remainder分別為重復計數(shù)的整數(shù)部分和余數(shù)部分,其中每計數(shù)(RCR_VAL+1)次,中斷一次。由于重復計數(shù),所以要通過語句is_rcr_finish=0;聲明一下計數(shù)未結束,并在最后開啟高級定時器TIM8。

絕對定位函數(shù)設計如下:

void Locate_Abs(long num,?u32 frequency)

{

if(TIM8->CR1&0x01)

{

printf("\r\nThe last time pulses is not send finished,?wait please!\r\n");

return;

}

if((frequency<20)||(frequency>100000))

{

printf("\r\nThe frequency is out of range! please reset it?。。╮ange:20Hz~100KHz)\r\n");

return;

}

target_pos=num;

if(target_pos!=current_pos)

{

if(target_pos>current_pos)

motor_dir=CW;

else

motor_dir=CCW;

DRIVER_DIR=motor_dir;

rcr_integer=abs(target_pos-current_pos)/(RCR_VAL+1);

rcr_remainder=abs(target_pos-current_pos)%(RCR_VAL+1);

is_rcr_finish=0;

TIM8_Startup(frequency);

}

}

絕對定位函數(shù)與相對定位函數(shù)基本相同。其中不同點為:target_pos=num;該語句是步進電機經(jīng)過num個計數(shù)后的目標位置。接下來通過if(target_?pos!=current_pos),判斷當前位置和目標位置是否相同。如果當前位置沒有達到目標位置,即if(target_?pos>current_pos),則步進電機順時針轉動;否則else,步進電機逆時針轉動。DRIVER_DIR=motor_?dir;作用為設定步進電機旋轉方向,在頭文件driver.h中定義為#define DRIVER_DIR PCout(0),表示選用的控制板引腳是PC0,輸出PC0的狀態(tài)。

3??仿真與試驗分析

Keil5具備軟件仿真[15]的強大功能,該功能的優(yōu)點是能檢查程序的正確性與可行性。通過debug工具欄里的邏輯分析窗口,進行IO口的仿真與實驗分析。仿真之前,需要設置Options for Target窗口下的Target欄里的參數(shù)(芯片型號和晶振頻率)。然后選擇debug欄里的Use Simulator開啟仿真器,選擇Run to mian(),即直接從主函數(shù)開始運行仿真。Dialog DLL和Parameter設置如圖4。

設置完畢后點擊仿真按鈕,選擇邏輯分析,并在其仿真界面中建立信號。根據(jù)電路原理圖,設置邏輯分析信號PA0、PE2、PE3、PB5、PE5、PC0、PC2和PC7,選擇信號的輸出方式為Bit,如PORTC&?0x00000004為基地址與第五位求與,只取第2位PORTC_2,其他全為0。然后右移2為,如果結果為低電平0則0x00000000,結果為高電平1則為0x00000001。其它端口分析同理。下圖5以步進電機的IO接口信號為示例。

完成上述設置后。在功能區(qū)Peripherals下的通用輸入輸出接口下,設置PA.0為下拉輸入,其電平狀態(tài)對應復位按鈕動作狀態(tài);設置PB.5和PE.5為推挽輸出,作用為控制led;設置PE.2和PE.3為上拉輸入,代表傳感器的響應電平;設置PC.0為推挽輸出,其輸出電平控制電機的觸發(fā)脈沖方向;設置PC.2為推挽輸出,作用是使能驅動器;設置PC.7為復用推挽輸出,輸出高級定時器TIM8_CH2的PWM脈沖。

最后運行仿真,雖然上面我們設置了各個選定IO口的輸出輸入模式,但Keil5不會自動設置外部硬件的響應狀態(tài),因此需要手動設置相應的輸入IO口狀態(tài)來模仿外部硬件的狀態(tài)。為模仿復位功能,

需手動設置PA.0為高電平,進行間隔為0.2秒的仿真。同時PC.2使能driver函數(shù),板載led燈的綠燈開始閃爍,表示程序正常運行。PB.5一直為高電平,處于滅的狀態(tài),代表系統(tǒng)運行正常。然后,設置PE.2位高電平,代表外部傳感器一(SEN1)動作。同PC.7開產(chǎn)生方波脈沖,當PE.2的電平恢復后,PC.7口的脈沖停止產(chǎn)生;設置PE.3為高電平,代表外部傳感器二(SEN2)動作。PC.7產(chǎn)生的方波形式,原理同上,但方向發(fā)生改變。最后PE.2和PE.3電平均為低電平,方波停止產(chǎn)生系統(tǒng)運行完畢??刂葡到y(tǒng)仿真如圖6。

4??結束語

設計根據(jù)電路原理圖,以Keil5環(huán)境為主要平臺,設計了一體化螺絲刀控制器。其中先建立工程模板,在建立的工程下設計自己的外設及內(nèi)部系統(tǒng)的相關函數(shù)塊,通過設置輸入IO的電平狀態(tài),來模擬外部硬件的實際工作情況,證明了控制器可以完成指定的運動。并且自己所建立的工程,可以根據(jù)自己的需要添加自己需要的外部驅動函數(shù),其靈活性、移植性強,節(jié)省了資源。對其外部指定函數(shù)做一定改動就可以應用到相類似的控制系統(tǒng)中,將提高產(chǎn)品的生產(chǎn)效益。

參考文獻

[1]?王偉, 持續(xù)創(chuàng)新的ARM&中國的技術創(chuàng)新專訪ARM公司中國區(qū)總裁譚軍先生[J].?電子技術應用,?2008(8).

[2]?馬得秀,?韓佳奇,?趙銘,?逯玉蘭.?基于51單片機的溫室自動灌溉系統(tǒng)設計[J].?軟件,?2019,?40(05):?30-32.

[3]?張英梅,?傅仕杰.?STM32的智能溫室控制系統(tǒng)[J].?軟件,?2010,?31(12):?14-18.

[4]?陳玉樓,?單片機原理與應用技術[M].?北京:?科學出版社,?2015.

[5]?李寧,?基于MDK的STM32處理器應用開發(fā)[M].?北京:?北京航空航天大學出版社,?2008.

[6]?意法半導體,?STM32中文參考手冊,?第10版.?意法半導體(中國)投資公司,?2010.

[7]?劉汝斌,?程武山.?扭矩傳感器在步進電機控制系統(tǒng)中的應用[J].?儀表技術與傳感器,?2012,?(7):?1-3.

[8]?王波,?鞠飛.?電子電路仿真技術在電子應用開發(fā)中的運用[J].?電子技術與軟件工程,?2019(13):?74.

[9]?王燕東,?基于嵌入式實時系統(tǒng)的步進電機協(xié)同運動控制系統(tǒng)設計與實現(xiàn)[D],?河北工業(yè)大學,?2016.

[10]?常文泰,?張冉,?王利華,?張雷剛.?虛擬樣機技術及虛擬樣機試驗[J].?軟件,?2016,?37(07):?84-88.

[11]?沈紅衛(wèi),?任沙浦,?朱敏杰,?楊亦紅,?盧雪萍,STM32單片機應用與全案例實踐[M].?電子工業(yè)出版社,?2017,?6(1):?62-70.

[12]?意法半導體,?STM32F1開發(fā)指南庫函數(shù)版V1.1.?意法半導體(中國)投資公司,?2010.

[13]?彭治國,?劉海浪,?陳輝金.?基于“卓越計劃”C語言程序設計實驗教學研究[J].?裝備制造技術,?2012(7).

[14]?譚浩強,?C程序設計第四版[M].?清華大學出版社,?2010,?6(4):?87-89,?115-120.

[15]?張玲,?晏伯武.?時序仿真和驅動編寫在數(shù)字電路實踐教學中的應用研究[J].?軟件,?2016,?37(03):?107-109.

猜你喜歡
設置設計
中隊崗位該如何設置
少先隊活動(2021年4期)2021-07-23 01:46:22
何為設計的守護之道?
《豐收的喜悅展示設計》
流行色(2020年1期)2020-04-28 11:16:38
7招教你手動設置參數(shù)
瞞天過海——仿生設計萌到家
藝術啟蒙(2018年7期)2018-08-23 09:14:18
設計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
本刊欄目設置說明
中俄臨床醫(yī)學專業(yè)課程設置的比較與思考
艦船人員編制的設置與控制
主站蜘蛛池模板: 一本久道久久综合多人| 三上悠亚精品二区在线观看| 久久激情影院| 亚洲欧州色色免费AV| 国产精品太粉嫩高中在线观看| 22sihu国产精品视频影视资讯| 日本a级免费| 亚洲一区黄色| 国产综合精品日本亚洲777| 老司机精品久久| 精品精品国产高清A毛片| 午夜性爽视频男人的天堂| 青青草原国产精品啪啪视频| 国产亚洲精品va在线| 九九精品在线观看| 日韩第一页在线| 国产91高跟丝袜| 精品国产黑色丝袜高跟鞋| 婷婷中文在线| 国产成人综合亚洲欧美在| 九色最新网址| 亚洲成a人片7777| 日韩欧美国产成人| 国产日韩av在线播放| 国产在线无码一区二区三区| 久久福利片| 精品午夜国产福利观看| 亚洲成a人片在线观看88| 国产欧美高清| 精品偷拍一区二区| 91久久夜色精品| 国产情侣一区二区三区| 在线观看无码av免费不卡网站| 91精品伊人久久大香线蕉| 国产精品网址你懂的| 国产成人免费| 亚洲高清免费在线观看| 国产H片无码不卡在线视频| 色综合色国产热无码一| 人妻丰满熟妇αv无码| 亚卅精品无码久久毛片乌克兰| 人妻丝袜无码视频| 99久久婷婷国产综合精| 在线国产91| 亚洲bt欧美bt精品| 麻豆国产精品一二三在线观看| 亚洲人成网址| 粗大猛烈进出高潮视频无码| 国产区91| 99在线国产| 欧美a在线| 国产精品高清国产三级囯产AV| 在线观看91精品国产剧情免费| 亚洲狠狠婷婷综合久久久久| 国产麻豆另类AV| 美女潮喷出白浆在线观看视频| 91久久国产热精品免费| 波多野结衣AV无码久久一区| 欧美在线黄| 99精品免费在线| 久久国产高潮流白浆免费观看| 欧美性久久久久| 国产视频大全| 亚洲毛片网站| 老司机午夜精品网站在线观看 | 国产成人精品亚洲日本对白优播| 国产69精品久久久久孕妇大杂乱| 国产美女无遮挡免费视频| 高清无码一本到东京热| 亚洲性日韩精品一区二区| 91久久性奴调教国产免费| 国产一区二区三区精品欧美日韩| 国产激情第一页| 中文字幕在线看| 一本大道无码日韩精品影视| 成年女人18毛片毛片免费| 视频二区中文无码| 日韩一区二区在线电影| 无码网站免费观看| 9cao视频精品| 综合网久久| 五月婷婷激情四射|