|
stm32控制步進(jìn)電機(jī)源碼:
0.png (57.44 KB, 下載次數(shù): 93)
下載附件
2017-5-2 23:42 上傳
stm32單片機(jī)源程序:
- /*******************************************************************************
- * 文件名 : main.c
- * 作者 : jackice
- * 時(shí)間 :2013/8/10
- * 文件描述 : EN:PA.0 CLK:PA.1;DIR:PA.2
- ******兩個(gè)電機(jī)同時(shí)走動(dòng),可以通過給定不同頻率的脈沖、不同脈沖數(shù)達(dá)到兩個(gè)電機(jī)走速不同,走的距離不同************
- **********134個(gè)脈沖 電機(jī)走1mm;1345個(gè)脈沖 電機(jī)走10mm;13450個(gè)脈沖電機(jī)走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)時(shí)鐘 */
- 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)各部分時(shí)鐘
- * 輸入?yún)?shù) : 無
- * 輸出結(jié)果 : 無
- * 返回值 : 無
- *******************************************************************************/
- void RCC_Configuration(void)
- {
- /* 定義枚舉類型變量 HSEStartUpStatus */
- ErrorStatus HSEStartUpStatus;
- /* 復(fù)位系統(tǒng)時(shí)鐘設(shè)置*/
- RCC_DeInit();
- /* 開啟HSE*/
- RCC_HSEConfig(RCC_HSE_ON);
- /* 等待HSE起振并穩(wěn)定*/
- HSEStartUpStatus = RCC_WaitForHSEStartUp();
-
- /* 判斷HSE起是否振成功,是則進(jìn)入if()內(nèi)部 */
- if(HSEStartUpStatus == SUCCESS)
- {
- /* 選擇HCLK(AHB)時(shí)鐘源為SYSCLK 1分頻 */
- RCC_HCLKConfig(RCC_SYSCLK_Div1);
-
- /* 選擇PCLK2時(shí)鐘源為 HCLK(AHB) 1分頻 */
- RCC_PCLK2Config(RCC_HCLK_Div1);
- /* 選擇PCLK1時(shí)鐘源為 HCLK(AHB) 2分頻 */
- RCC_PCLK1Config(RCC_HCLK_Div2);
- /* 設(shè)置FLASH延時(shí)周期數(shù)為2 */
- FLASH_SetLatency(FLASH_Latency_2);
- /* 使能FLASH預(yù)取緩存 */
- FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
- /* 選擇鎖相環(huán)(PLL)時(shí)鐘源為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時(shí)鐘源為PLL */
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
- /* 等待PLL成為SYSCLK時(shí)鐘源 */
- while(RCC_GetSYSCLKSource() != 0x08);
- }
-
- /* 打開APB2總線上的GPIOA時(shí)鐘*/
- 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ù)描述 : 簡(jiǎn)單延時(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ù)描述 : 電機(jī)控制,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軸電機(jī)脈沖數(shù),控制X軸電機(jī)走的距離
- {
- clk0_0();
- delay(Xspeed); //給脈沖頻率,控制電機(jī)轉(zhuǎn)速,頻率越高速度越快,頻率越低速度越慢
- clk0_1();
- delay(Xspeed);
- for(Ystep=Ysteps;Ystep>0;Ystep--) //給Y軸電機(jī)脈沖數(shù),控制Y軸電機(jī)走的距離
- {
- clk1_0();
- delay(Yspeed); //給脈沖頻率,控制電機(jī)轉(zhuǎn)速,頻率越高速度越快,頻率越低速度越慢
- clk1_1();
- delay(Yspeed);
- }
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
完整源碼下載:
dianji1.rar
(391.01 KB, 下載次數(shù): 256)
2017-5-2 20:16 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|