打印
[STM32F1]

步进电机有声音,不转

[复制链接]
3277|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuliuzhou|  楼主 | 2015-7-15 12:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用stm32来控制步进电机转动,示波器上有波形输出,步进电机有声音,但没转是怎么回事?
/******************************************************************************
* 文件名          : main.c
* 作者            : Losingamong
* 时间                          : 08/08/2008
* 文件描述        : 主函数
******************************************************************************/
/* 头文件    ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"

/* 自定义同义关键字    --------------------------------------------------------*/

/* 自定义参数宏        --------------------------------------------------------*/

/* 自定义函数宏        --------------------------------------------------------*/

/* 自定义变量          --------------------------------------------------------*/

/* 自定义函数声明      --------------------------------------------------------*/

void RCC_Configuration(void);
void GPIO_Configuration(void);
void Systick_Configuration(void);
void Delay_Second(void);

/******************************************************************************
* 函数名                 : main
* 函数描述       : main 函数
* 输入参数       : 无
* 输出结果       : 无
* 返回值         : 无
******************************************************************************/
int main(void)
{
     

    /* 设置系统时钟 */
    RCC_Configuration();                       
    /* 设置GPIO端口 */
    GPIO_Configuration();
    /* 设置SyTtick定时器 */
    Systick_Configuration();
        while(1)
        {
        GPIO_SetBits(GPIOA, GPIO_Pin_0);
                Delay_Second();
                GPIO_ResetBits(GPIOA, GPIO_Pin_0);
                Delay_Second();
                GPIO_SetBits(GPIOA, GPIO_Pin_1);

        }
}


/******************************************************************************
* 函数名        : RCC_Configuration
* 函数描述  : 设置系统各部分时钟
* 输入参数  : 无
* 输出结果  : 无
* 返回值    : 无
******************************************************************************/
void RCC_Configuration(void)
{
    /* 定义枚举类型变量 HSEStartUpStatus */
    ErrorStatus HSEStartUpStatus;
   
    /* 复位系统时钟设置*/
    RCC_DeInit();
    /* 开启HSE*/
    RCC_HSEConfig(RCC_HSE_ON);
    /* 等待HSE起振并稳定*/
    HSEStartUpStatus = RCC_WaitForHSEStartUp();
    /* 判断HSE起是否振成功,是则进入if()内部 */
    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);
            /* 设置FLASH延时周期数为2 */
            FLASH_SetLatency(FLASH_Latency_2);
            /* 使能FLASH预取缓存 */
            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
            /* 选择锁相环(PLL)时钟源为HSE 1分频,倍频数为9,则PLL输出频率为 8MHz * 9 = 72MHz */
            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
            /* 使能PLL */
            RCC_PLLCmd(ENABLE);
            /* 等待PLL输出稳定 */
            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);
}


/******************************************************************************
* 函数名                  : GPIO_Configuration
* 函数描述            : 设置各GPIO端口功能
* 输入参数      : 无
* 输出结果      : 无
* 返回值        : 无
******************************************************************************/
void GPIO_Configuration(void)
{
    /* 定义GPIO初始化结构体 GPIO_InitStructure */
    GPIO_InitTypeDef GPIO_InitStructure;
   
    /* 设置 GPIOA.4 为推挽输出,最大翻转频率为50MHz*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
}


/******************************************************************************
* 函数名                  : Systick_Configuration
* 函数描述            : 设置Systick定时器,重装载时间为1s
* 输入参数      : 无
* 输出结果      : 无
* 返回值        : 无
******************************************************************************/
void Systick_Configuration(void)
{
    /* 失能Systick定时器 */
    SysTick_CounterCmd(SysTick_Counter_Disable);
    /* 选择HCLK为Systick时钟源 */
    SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
    /* 清除Systick计数器 */
    SysTick_CounterCmd(SysTick_Counter_Clear);
    /* 主频为72/8MHz,配置计数值为9*3可以得到定时间隔*/
    SysTick_SetReload(9*3 );                       
}


/******************************************************************************
* 函数名                  : Delay_Second
* 函数描述            : 定时
* 输入参数      : 无
* 输出结果      : 无
* 返回值        : 无
******************************************************************************/
void Delay_Second(void)
{
    /* 启动Systick计数 */
    SysTick_CounterCmd(SysTick_Counter_Enable);
    /* 等待Systick计数至0 */
    while(SysTick_GetFlagStatus(SysTick_FLAG_COUNT) == 0);
    /* 失能Systick定时器 */
    SysTick_CounterCmd(SysTick_Counter_Disable);
    /* 清除Systick计数器 */
    SysTick_CounterCmd(SysTick_Counter_Clear);
}

望各位大神赐教
沙发
liuliuzhou|  楼主 | 2015-7-15 12:54 | 只看该作者
我还有有步进电机驱动器,大家帮帮忙,万分感谢。

使用特权

评论回复
板凳
diweo| | 2015-7-15 13:03 | 只看该作者
可能是电流太小,拖不动。或者是启动频率不对

使用特权

评论回复
地板
liuliuzhou|  楼主 | 2015-7-15 13:13 | 只看该作者
我看了网上有很多人说用PWM细分,我这应该不需要吧,刚刚接触STM32,菜鸟,轻拍。

使用特权

评论回复
5
diweo| | 2015-7-15 13:21 | 只看该作者
细分是另外一个概念。
你驱动电机的频率要变的。要有个加减速的过程的。

使用特权

评论回复
6
liuliuzhou|  楼主 | 2015-7-15 13:39 | 只看该作者
解决了,谢谢,是我之前的频率太大了,万分感谢。

使用特权

评论回复
7
求学问路| | 2015-7-15 16:11 | 只看该作者
应该是频率太快了,你PWM频率多大?一般设置32K频率,再根据情况细分24步或者48步。

使用特权

评论回复
8
mmuuss586| | 2015-7-15 18:43 | 只看该作者

连加减速都没做;

另外驱动器和STM32怎么连的,最好输出加三极管或光耦驱动;

使用特权

评论回复
9
李冬发| | 2015-7-15 19:49 | 只看该作者
启动的时候,速度慢点嘛。

使用特权

评论回复
10
sufeiyicun| | 2015-7-17 17:35 | 只看该作者
请问楼主,步进电机的程序怎么改的?我最近用stm32f103设计步进电机驱动,但是没调出来,能贴一下代码吗

使用特权

评论回复
11
sufeiyicun| | 2015-7-17 22:53 | 只看该作者
liuliuzhou 发表于 2015-7-15 13:39
解决了,谢谢,是我之前的频率太大了,万分感谢。

你好,我在做stm32f103板子的步进电机控制,能参考一下你的程序吗?菜鸟一枚,求进步。qq1147835181.谢谢

使用特权

评论回复
12
豆腐块| | 2015-7-18 09:45 | 只看该作者
步进电机驱动时要考虑节拍,开始启动应该慢点

使用特权

评论回复
13
liuliuzhou|  楼主 | 2015-7-19 10:09 | 只看该作者
sufeiyicun 发表于 2015-7-17 22:53
你好,我在做stm32f103板子的步进电机控制,能参考一下你的程序吗?菜鸟一枚,求进步。qq1147835181.谢谢 ...

后来发现了好多问题,还没成功

使用特权

评论回复
14
sufeiyicun| | 2015-7-19 12:00 | 只看该作者
liuliuzhou 发表于 2015-7-19 10:09
后来发现了好多问题,还没成功

你电机现在转动了吗?我的还没动,求程序

使用特权

评论回复
15
北极星405| | 2015-7-19 12:06 | 只看该作者
第一查相序,第二查频率,是不是太快了?

使用特权

评论回复
16
liuliuzhou|  楼主 | 2015-7-20 14:23 | 只看该作者
sufeiyicun 发表于 2015-7-19 12:00
你电机现在转动了吗?我的还没动,求程序

我之前是用systick可以转,现在用pwm还在努力中。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

42

帖子

1

粉丝