<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關(guān) 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 一款基于STM32的貼片機控制系統(tǒng)設計與實現(xiàn)

          一款基于STM32的貼片機控制系統(tǒng)設計與實現(xiàn)

          作者: 時間:2014-05-21 來源:網(wǎng)絡 收藏

          2.2 電源電路

          本文引用地址:http://www.ex-cimer.com/article/247184.htm

          電源電路采用AMS1117—3.3作為電壓轉(zhuǎn)換芯片。AMS1117是一款正電壓輸出低壓差的三端線性穩(wěn)壓電路,在輸出1 A電流時,輸入輸出的電壓差典型值為1.8 V,內(nèi)部集成過熱保護和限流電路,確保芯片和電源系統(tǒng)的穩(wěn)定性。

          該電路輸入端與輸出端各接1個0.1μF的非極性獨石電容和1個220μF的極性電容。這兩組電容起到了穩(wěn)壓濾波的作用。

          2.3 串口電平轉(zhuǎn)換電路

          串行接口是嵌入式系統(tǒng)中較為常用的一種接口。本系統(tǒng)采用RS-232總線于上位機進行通信,采用MAX232芯片來完成RS-232串行接口的電平轉(zhuǎn)換。串口通信電路如圖8所示。

           

           

          2.4 步進電機驅(qū)動電路

          步進電機必須有驅(qū)動器和控制器才能正常工作。驅(qū)動器的作用是對控制脈沖進行環(huán)形分配、功率放大,使步進電機繞組按一定順序通電,控制電機轉(zhuǎn)動。本設計采用DM442數(shù)字式步進電機驅(qū)動器。該驅(qū)動器可以設置512內(nèi)的任意細分以及額定電流內(nèi)的任意電流值,能夠滿足大多數(shù)場合的應用需要。電路連線如圖9所示。

           

           

          通過步進電機驅(qū)動器控制步進電機的方法較為簡單,僅需通過單片機IO口給出不同頻率的方波脈沖信號即可控制步進電機的速度,通過另一個IO口給出高低電平控制電機旋轉(zhuǎn)方向。本文所采用的步進電機步距角為1.8°,因此驅(qū)動器每接收200個脈沖信號,步進電機旋轉(zhuǎn)一周。

          3 運動控制系統(tǒng)軟件設計

          下位機控制程序由串口收發(fā)程序,限位開關(guān)檢測程序,舵機驅(qū)動程序、步進電機驅(qū)動等部分組成。下面將對舵機驅(qū)動和串口收發(fā)部分做詳細的介紹。

          3.1 舵機驅(qū)動程序

          根據(jù)1.1.2中的介紹,舵機用來控制吸筆和拖拽針的運動,在單片機的控制中常用PWM(Pulse Width Modulation)調(diào)制來驅(qū)動它。脈沖寬度調(diào)制(PWM)是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術(shù),其優(yōu)越性在于驅(qū)動電子設備的簡單性和計算機接口的容易性。在舵機控制系統(tǒng)中,輸出的PWM信號通過功率器件將所需的電流和能量傳送到舵機線圈繞組中,來控制舵機的正反轉(zhuǎn)。

          的定時器除了TIM6和TIM7,其他的定時器都可以用來產(chǎn)生PWM輸出。其中高級定時器TIM1和TIM8可以同時產(chǎn)生多達7路的PWM輸出。而通用定時器也能同時產(chǎn)生多達4路的PWM輸出,這樣,最多可以同時產(chǎn)生30路PWM輸出。由于只控制一個舵機,這里我們僅利用TIM3的CH2產(chǎn)生一路PWM輸出。具體步驟如下:

          1)開啟TIM3時鐘,配置PA7為復用輸出。

          2)設置TIM3的ARR和PSC,控制輸出PWM的周期。

          3)設置TIM3_CH2的PWM模式。

          4)使能TIM3的CH2輸出,使能TIM3。

          5)修改TIM3_CCR2來控制占空比。

          由于舵機所需的控制信號標準周期是20毫秒,最低不得少于15毫秒。中位脈沖寬度是1.5毫秒,脈沖寬度在加減1.5毫秒之間內(nèi)變化。可控范圍一般都是0.5~2.5毫秒。即控制舵機運行至兩個機械極限位置的信號周期為0.5~2.5毫秒,對應占空比為2.5%-12.5%。本方案中舵機需保持在3個狀態(tài),分別是左極限,右極限和中間位置。用于控制拖拽針下移,吸筆下移和復位。

          因此,要控制舵機,首現(xiàn)需要一個頻率為50赫茲的PWM波,然后調(diào)節(jié)其占空比為2.5%-12.5%。PWM輸出頻率的計算公式為:

           

          基于STM32F103的貼片機控制系統(tǒng)的設計與實現(xiàn)

           

          這里系統(tǒng)時鐘頻率為72000000赫茲,所需PWM頻率為50赫茲。為方便計算,同時保證自動重裝載值和預分頻系數(shù)均為整數(shù),這里取自動重裝載值為1000。計算得預分頻系數(shù)為1440-1=1439。因此調(diào)用PWM初始化函數(shù)為:PWM_Init(1000,1439);

          PWM輸出波形占空比計算公式為:

           

          基于STM32F103的貼片機控制系統(tǒng)的設計與實現(xiàn)

           

          由此計算得到:

          左極限位置時TIM3->CCR2=25,

          右極限位置時TIM3->CCR2=125,

          中間位置時TIM3->CCR2=75。

          3.2 串口通信配置

          的串口資源相當豐富的,最多可提供5路串口(只有3個串口),有分數(shù)波特率發(fā)生器、支持同步單線通信和半雙工單線通訊、支持LIN、支持調(diào)制解調(diào)器操作、智能卡協(xié)議和IrDA SIR ENDEC規(guī)范(僅串口3支持)、具有DMA等。

          STM32的串口配置需要開啟串口時鐘,并設置相應IO口的模式,配置波特率、數(shù)據(jù)位長度、奇偶校驗位等信息。STM32的串口波特率計算公式如下:

           

          基于STM32F103的貼片機控制系統(tǒng)的設計與實現(xiàn)

           

          上式中,fPCLKx是給串口的時鐘;USARTDIV是一個無符號定點數(shù)。

          3.3 串口數(shù)據(jù)包格式設計

          表1為串口與單片機通信的數(shù)據(jù)包格式,每幀有9個字節(jié),開始六個字節(jié)是包頭標志、器件地址、數(shù)據(jù)類型、起始地址以及數(shù)據(jù)長度,其中數(shù)據(jù)類型有:讀數(shù)據(jù)指令r(0x72)、預設參數(shù)w(0x77)、運動指令m(0x6D)、請求重發(fā)指令c(0x63)、正常返回指令b(0x62)和放棄通信指q(0x71)。然后是10個字節(jié)的數(shù)據(jù)位,通常數(shù)據(jù)位為2個4字節(jié)的數(shù)據(jù),為了避免出現(xiàn)數(shù)據(jù)對齊問題,在后面加入兩個值為0的字節(jié)。最后是兩

          個字節(jié)的校驗位和結(jié)束標志位,采用CRC16進行校驗。

           

          攝像頭相關(guān)文章:攝像頭原理


          關(guān)鍵詞: STM32 STM32F103RBT6

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();