日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

STM32控制启动步进电机

發(fā)布時(shí)間:2023/12/16 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32控制启动步进电机 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述

正在做的項(xiàng)目需要用STM32控制步進(jìn)電機(jī),本篇主要講解利用STM32定時(shí)器外設(shè)輸出脈沖來(lái)控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)。

STM32定時(shí)器

使用STM32芯片類(lèi)型:STM32c8t6。

使用外設(shè)接口:選用TIM4的CH1通道,對(duì)應(yīng)輸出脈沖IO口為PB6。

步進(jìn)驅(qū)動(dòng)器介紹

(這里以兩相步進(jìn)驅(qū)動(dòng)器為例,詳細(xì)見(jiàn)說(shuō)明書(shū))

  • 接口
    步進(jìn)驅(qū)動(dòng)器可分為兩部分:環(huán)形分配器、功率放大器。
    環(huán)形分配器:接收3種信號(hào)分別為:脈沖信號(hào)(PUL),方向信號(hào)(DIR),脫機(jī)信號(hào)(ENA)。
    脈沖信號(hào):環(huán)形分配器對(duì)脈沖信號(hào)進(jìn)行分配,去控制功率放大器相應(yīng)的晶體管,使步進(jìn)電機(jī)的線圈得電。所以,步進(jìn)電機(jī)要運(yùn)轉(zhuǎn)就必須有脈沖輸入,所以需要一個(gè)驅(qū)動(dòng)器來(lái)給步進(jìn)電機(jī)的各項(xiàng)繞組依次通電。
    方向信號(hào):控制AB通電的相序,A-B順時(shí)針,B-A逆時(shí)針
    脫機(jī)信號(hào):步進(jìn)電機(jī)停止時(shí),AB線圈有一相得電,得電的功能使轉(zhuǎn)子鎖住,使轉(zhuǎn)子不能動(dòng),需要收去撥動(dòng)轉(zhuǎn)子的時(shí)候,需要給脫機(jī)信號(hào),使AB相繞組完全斷電,轉(zhuǎn)子處于自由轉(zhuǎn)動(dòng)狀態(tài)。(也就是說(shuō)控制電機(jī)停止除了不給脈沖之外,還可以控制脫機(jī)信號(hào)來(lái)鎖死電機(jī),此處用不著脫機(jī)信號(hào))
  • 細(xì)分
    為了提高步進(jìn)電動(dòng)機(jī)控制的精度,現(xiàn)在的步進(jìn)驅(qū)動(dòng)器都有細(xì)分的功能,所謂細(xì)分,就是通過(guò)驅(qū)動(dòng)器中電路的方法把步距角減小。比如把步進(jìn)驅(qū)動(dòng)器設(shè)置成5細(xì)分,假設(shè)原來(lái)步距角1.8°那么設(shè)成5細(xì)分后,步距角就是0.36°。也就是說(shuō)原來(lái)一步可以走完的,設(shè)置成細(xì)分后需要走5步。一般步進(jìn)電動(dòng)機(jī)的細(xì)分表在驅(qū)動(dòng)器上可以直接看到。(設(shè)置合適細(xì)分能夠避免電機(jī)轉(zhuǎn)動(dòng)時(shí)震動(dòng)過(guò)大,但過(guò)高的細(xì)分?jǐn)?shù)會(huì)導(dǎo)致電機(jī)輸出力矩減小)
  • 驅(qū)動(dòng)電源:
    需要9-42V直流電源,需要使用變壓器將220V交流電轉(zhuǎn)為24V直流電

定時(shí)器頻率與步進(jìn)電機(jī)的關(guān)系

  • 接線

    將驅(qū)動(dòng)器PUL+端接入STM32輸出脈沖的IO口(PB6),PUL-端接地
    將驅(qū)動(dòng)器DIR+端接入STM32的任意一個(gè)閑置IO口(這里選PB5),DIR-端接地
    驅(qū)動(dòng)器ENA±端不接
    A+、A-、B+、B-接入步進(jìn)電機(jī)
    電源接到變壓器

  • 頻率與速度的關(guān)系

    確定輸出脈沖頻率與電機(jī)轉(zhuǎn)速的關(guān)系,對(duì)于兩相步進(jìn)電機(jī)而言:

    轉(zhuǎn)速 = 脈沖頻率 * 60 /((360/T)*x) T是步進(jìn)電機(jī)步距角(1.8°),x是驅(qū)動(dòng)器細(xì)分倍數(shù)(16) 脈沖頻率= 時(shí)鐘頻率(72Mhz)/ ((arr+1)*(psc+1))

    根據(jù)以上公式,可以得到:
    Speed = 15r/min時(shí),若確定arr為199,則psc為449
    其他速度可根據(jù)需要自行設(shè)定。

代碼

編寫(xiě)流程:TIM4配置 -> DIR對(duì)應(yīng)IO口配置 -> main調(diào)用初始化函數(shù)并設(shè)置占空比

//TIM4配置 void TIM4_PWM_Init(u16 arr,u16 psc) //初始化arr=200,psc = 450得到電機(jī)速度為15r/min { //初始化結(jié)構(gòu)體NVIC_InitTypeDef NVIC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;TIM_OCInitTypeDef TIM_OCInitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//使能時(shí)鐘RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //設(shè)置該引腳為復(fù)用輸出功能,輸出TIM4 CH1的PWM脈沖波形 GPIOB.6GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //TIM4_CH1GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);//計(jì)數(shù)模式TIM_TimeBaseStructure.TIM_Period = arr; TIM_TimeBaseStructure.TIM_Prescaler =psc; TIM_TimeBaseStructure.TIM_ClockDivision = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //定時(shí)中斷配置TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE ); /NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); //初始化TIM4 Channel1 PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;TIM_OC1Init(TIM4, &TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_Cmd(TIM4,ENABLE); //使能定時(shí)器 } /*PB5電機(jī)方向引腳配置*/ void DIR_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } int main() {DIR_Init();TIM4_PWM_Init(200,450);TIM_SetCompare1(TIM4,200/2); //設(shè)置占空比為50%(=arr/2),不設(shè)置的話電機(jī)啟動(dòng)不了while(){;} }

對(duì)應(yīng)工程文件:

CSDN:STM32c8t6啟動(dòng)步進(jìn)電機(jī)
GitHub: STM32-drives-step-motor

總結(jié)

以上是生活随笔為你收集整理的STM32控制启动步进电机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。