標題:
stm32控制步進電機源碼 給定不同頻率的脈沖、不同脈沖數(shù)達到兩個電機走速不同
[打印本頁]
作者:
jackice1989
時間:
2017-5-2 20:16
標題:
stm32控制步進電機源碼 給定不同頻率的脈沖、不同脈沖數(shù)達到兩個電機走速不同
stm32控制步進電機源碼:
0.png
(57.44 KB, 下載次數(shù): 93)
下載附件
2017-5-2 23:42 上傳
stm32單片機源程序:
/*******************************************************************************
* 文件名 : main.c
* 作者 : jackice
* 時間 :2013/8/10
* 文件描述 : EN:PA.0 CLK:PA.1;DIR:PA.2
******兩個電機同時走動,可以通過給定不同頻率的脈沖、不同脈沖數(shù)達到兩個電機走速不同,走的距離不同************
**********134個脈沖 電機走1mm;1345個脈沖 電機走10mm;13450個脈沖電機走100mm;******
********************************************************************************/
/* 頭文件 ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"
#define en0_0() GPIO_ResetBits(GPIOA , GPIO_Pin_0) //宏定義
#define en0_1() GPIO_SetBits(GPIOA , GPIO_Pin_0)
#define en1_0() GPIO_ResetBits(GPIOA , GPIO_Pin_4) //宏定義
#define en1_1() GPIO_SetBits(GPIOA , GPIO_Pin_4)
#define clk0_0() GPIO_ResetBits(GPIOA , GPIO_Pin_1)
#define clk0_1() GPIO_SetBits(GPIOA , GPIO_Pin_1)
#define clk1_0() GPIO_ResetBits(GPIOA , GPIO_Pin_5)
#define clk1_1() GPIO_SetBits(GPIOA , GPIO_Pin_5)
#define dir0_0() GPIO_ResetBits(GPIOA , GPIO_Pin_2)
#define dir0_1() GPIO_SetBits(GPIOA , GPIO_Pin_2)
#define dir1_0() GPIO_ResetBits(GPIOA , GPIO_Pin_3)
#define dir1_1() GPIO_SetBits(GPIOA , GPIO_Pin_3)
/* 自定義同義關(guān)鍵字 --------------------------------------------------------*/
/* 自定義參數(shù)宏 --------------------------------------------------------*/
/* 自定義函數(shù)宏 --------------------------------------------------------*/
/* 自定義變量 --------------------------------------------------------*/
/* 自定義函數(shù)聲明 --------------------------------------------------------*/
void RCC_Configuration(void);
void GPIO_Configuration(void);
void delay(u32 i);
void motor_contrl(u32 Xsteps,u8 Xdirection,u16 Xspeed,u32 Ysteps,u8 Ydirection,u16 Yspeed,u32 setps);
/*******************************************************************************
* 函數(shù)名 : main
* 函數(shù)描述 : 無
* 輸入?yún)?shù) : 無
* 輸出結(jié)果 : 無
* 返回值 : 無
*******************************************************************************/
int main(void)
{
/* 設(shè)置系統(tǒng)時鐘 */
RCC_Configuration();
/* 設(shè)置GPIO端口 */
GPIO_Configuration();
/*打開使能端*/
en0_1();
en1_1();
while(1)
{
motor_contrl(1,0,3,1,0,3,13450);
delay(100000);
motor_contrl(1,1,3,1,1,3,13450);
delay(100000);
}
}
/*******************************************************************************
* 函數(shù)名 : RCC_Configuration
* 函數(shù)描述 : 設(shè)置系統(tǒng)各部分時鐘
* 輸入?yún)?shù) : 無
* 輸出結(jié)果 : 無
* 返回值 : 無
*******************************************************************************/
void RCC_Configuration(void)
{
/* 定義枚舉類型變量 HSEStartUpStatus */
ErrorStatus HSEStartUpStatus;
/* 復位系統(tǒng)時鐘設(shè)置*/
RCC_DeInit();
/* 開啟HSE*/
RCC_HSEConfig(RCC_HSE_ON);
/* 等待HSE起振并穩(wěn)定*/
HSEStartUpStatus = RCC_WaitForHSEStartUp();
/* 判斷HSE起是否振成功,是則進入if()內(nèi)部 */
if(HSEStartUpStatus == SUCCESS)
{
/* 選擇HCLK(AHB)時鐘源為SYSCLK 1分頻 */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* 選擇PCLK2時鐘源為 HCLK(AHB) 1分頻 */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* 選擇PCLK1時鐘源為 HCLK(AHB) 2分頻 */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* 設(shè)置FLASH延時周期數(shù)為2 */
FLASH_SetLatency(FLASH_Latency_2);
/* 使能FLASH預取緩存 */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* 選擇鎖相環(huán)(PLL)時鐘源為HSE 1分頻,倍頻數(shù)為9,則PLL輸出頻率為 8MHz * 9 = 72MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* 使能PLL */
RCC_PLLCmd(ENABLE);
/* 等待PLL輸出穩(wěn)定 */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
/* 選擇SYSCLK時鐘源為PLL */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* 等待PLL成為SYSCLK時鐘源 */
while(RCC_GetSYSCLKSource() != 0x08);
}
/* 打開APB2總線上的GPIOA時鐘*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
}
/*******************************************************************************
* 函數(shù)名 : GPIO_Configuration
* 函數(shù)描述 : 設(shè)置各GPIO端口功能
* 輸入?yún)?shù) : 無
* 輸出結(jié)果 : 無
* 返回值 : 無
*******************************************************************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 設(shè)置PA4,PA5,PA6,PA7口為推挽輸出,最大翻轉(zhuǎn)頻率為50MHz*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOA , &GPIO_InitStructure);
}
/*******************************************************************************
* 函數(shù)名 : delay
* 函數(shù)描述 : 簡單延時
* 輸入?yún)?shù) : i
* 輸出結(jié)果 : 無
* 返回值 : 無
*******************************************************************************/
void delay(u32 k)
{
u32 j,i;
for(i=k;i>0;i--)
for(j=300;j>0;j--);
}
/*******************************************************************************
* 函數(shù)名 : motor_contrl
* 函數(shù)描述 : 電機控制,X和Y方向
* 輸入?yún)?shù) : Xsteps,Xdirection,Xspeed,Ysteps,Ydirection,Yspeed,u32 steps
* 輸出結(jié)果 : 無
* 返回值 : 無
*******************************************************************************/
void motor_contrl(u32 Xsteps,u8 Xdirection,u16 Xspeed,u32 Ysteps,u8 Ydirection,u16 Yspeed,u32 steps)
{
u32 step,Xstep,Ystep;
if(Xdirection==1) //判斷向左還是向右
{
dir0_1(); //向右
}
else
{
dir0_0(); //向左
}
if(Ydirection==1) //判斷向上還是向下
{
dir1_1(); //向上
}
else
{
dir1_0(); //向下
}
for(step=steps;step>0;step--)
{
for(Xstep=Xsteps;Xstep>0;Xstep--) //給X軸電機脈沖數(shù),控制X軸電機走的距離
{
clk0_0();
delay(Xspeed); //給脈沖頻率,控制電機轉(zhuǎn)速,頻率越高速度越快,頻率越低速度越慢
clk0_1();
delay(Xspeed);
for(Ystep=Ysteps;Ystep>0;Ystep--) //給Y軸電機脈沖數(shù),控制Y軸電機走的距離
{
clk1_0();
delay(Yspeed); //給脈沖頻率,控制電機轉(zhuǎn)速,頻率越高速度越快,頻率越低速度越慢
clk1_1();
delay(Yspeed);
}
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
完整源碼下載:
dianji1.rar
(391.01 KB, 下載次數(shù): 256)
2017-5-2 20:16 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
minlee
時間:
2017-5-28 17:29
不錯 下載學習學習
作者:
phil8199
時間:
2017-7-3 15:28
沒有黑幣怎么辦?有好人分享嗎?
作者:
黑boy
時間:
2017-8-12 05:39
謝謝 這對電賽很有幫助
作者:
haxiny
時間:
2017-10-11 17:44
正好需要這個。 最近一直在找控制步進電機的程序。
作者:
ahai
時間:
2017-11-23 20:50
正需要這個例程 下載下來研究下
作者:
pcb_86
時間:
2018-1-23 13:49
沒有黑幣怎么辦?有好人分享嗎?
作者:
風影朔人
時間:
2018-2-25 20:14
下載學習,謝謝分享!
作者:
samxly
時間:
2018-3-2 19:36
非常不錯
作者:
samxly
時間:
2018-3-2 19:37
正在學習
作者:
ljlkl1987
時間:
2018-3-20 17:49
HDX 好東西謝謝分享
作者:
ljlkl1987
時間:
2018-3-20 17:50
沒有黑幣怎么辦?有好人分享嗎?
作者:
hejianhuan
時間:
2018-3-22 17:05
在學習控制步進電機,謝謝分享!收下了。
作者:
tgh520
時間:
2018-3-24 17:51
下載學習,謝謝分享!
作者:
wh249507631
時間:
2018-3-25 11:54
謝謝樓主分享
作者:
wuxishun
時間:
2018-4-6 12:33
謝謝分享
作者:
hiker
時間:
2018-4-18 09:14
下載學習,謝謝分享!
作者:
esmember
時間:
2018-6-20 13:22
步進電機是老大難啊.參考下,謝謝
作者:
asdfg221111
時間:
2018-6-25 23:36
感謝樓主分享,好好學習一下
作者:
onono
時間:
2018-8-9 11:55
查詢了一些資料,云里霧里的,學習一下。
作者:
Akon4
時間:
2018-8-9 14:52
真好在研究這塊,謝謝分享!
作者:
39815
時間:
2018-8-24 23:38
謝謝樓主的分享
作者:
goyhuan
時間:
2018-9-6 21:56
謝謝樓主無私奉獻
作者:
plj213
時間:
2019-3-27 20:31
謝謝樓主分享。。。。。。。。。
作者:
QEQWE123
時間:
2019-10-10 16:34
下載程序不動彈啊...
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1