OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2740|回复: 1

步进电机只慢速动五下

[复制链接]

7

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2015-11-28
在线时间
30 小时
发表于 2016-3-24 16:45:05 | 显示全部楼层 |阅读模式
这代码控制步进电机,设置的好好地,但是步进电机只慢速动五下,不知道为什么、求告知。我设置的明明是以600r/min的速度转,然后发送3200个脉冲转一定距离啊,尝试好几天了,不知道是代码错了还是步进电机有点问题
#include "bujin.h"
#include "led.h"

/****************************
**TIM2μÄí¨μà1ê1óÃμÄμ¥Âö3åÄ£ê½
**TIM1ê1óÃÃÅ¿ØÄ£ê½à′êä3&#246WM
**
****************************/
//TIM2per:֨װÖμ
//Compare1:±è½Ï2¶»ñ1μÄÔ¤Ïè×°ÔØÖμ
void Motor_Init(u16 TIM2per, u16 TIM1per, u16 TIM1Compare1)
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  TIM_OCInitTypeDef TIM_OCInitStruct;
  GPIO_InitTypeDef GPIO_InitStruct;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//ê1Äü¶¨ê±Æ÷2μÄê±Öó
  RCC_APB1PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//ê1Äü¶¨ê±Æ÷1μÄê±Öó
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//ê1ÄüGPIOAê±Öó
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//ê1Äü¸′óÃIOê±Öó

  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//¸′óÃíÆíìêä3ö
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_8;//1ü½ÅéèÖÃÎaPA0
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA,&GPIO_InitStruct);

  //TIM21¤×÷Ôúμ¥Âö3åÄ£ê½ÏÂ
  TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//ûóDê±Öó·Ö¸î
  TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//ÏòéϼÆêyÄ£ê½
  TIM_TimeBaseInitStruct.TIM_Prescaler = 7200;//Ô¤·ÖÆμÖμ£¬Ã¿100us¼Æêyò»′Î
  TIM_TimeBaseInitStruct.TIM_Period = TIM2per;//֨װÖμ
  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);

  //TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single);                        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!zhuyi !!!!!!!!!!!!11!!!!!
  TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Repetitive);//éèÖÃTIM2Ôúμ¥Âö3åÄ£ê½Ï£¬ÇòÎaμ¥ò»Âö3壬ÔúÏÂò»ê¼t¸üDÂê±í£Ö1
  TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);//ê1ÄüTIM2μÄí¨μà1Ô¤×°ÔØ¼Ä′æÆ÷
  TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_OC1Ref);
   //TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single)£»
        
  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//&#207;òé&#207;&#188;&#198;êy£&#172;ò&#187;μ&#169;TIMx_CNT<TIMx_CCR1í¨μà1&#206;a&#206;TD§μ&#231;&#198;&#189;£&#172;·&#241;&#212;ò&#206;aóDD§μ&#231;&#198;&#189;
  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1ê&#228;3&#246;ê1&#196;ü
  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//óDD§μ&#231;&#198;&#189;&#206;a&#184;&#223;
  TIM_OCInitStruct.TIM_Pulse = 1;//±è&#189;&#207;2&#182;&#187;&#241;1μ&#196;&#212;¤×°&#212;&#216;&#214;μ
  TIM_OC1Init(TIM2,&TIM_OCInitStruct);

  TIM_Cmd(TIM2,DISABLE);//&#207;è2&#187;ê1&#196;üTIM2


  //TIM11¤×÷&#212;ú′ó&#196;£ê&#189;&#207;&#194;μ&#196WMê&#228;3&#246;&#196;£ê&#189;
  TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//&#195;&#187;óDê&#199;ê±&#214;ó·&#214;&#184;&#238;
  TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//&#207;òé&#207;&#188;&#198;êy
  TIM_TimeBaseInitStruct.TIM_Prescaler = 720;//&#212;¤·&#214;&#198;μ&#214;μ,10us&#188;&#198;êyò&#187;′&#206;
  TIM_TimeBaseInitStruct.TIM_Period = TIM1per;//&#214;&#216;×°&#214;μ
  TIM_TimeBaseInit(TIM1,&TIM_TimeBaseInitStruct);

  TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Gated);//TIM1&#206;a&#195;&#197;&#191;&#216;&#196;£ê&#189;
  TIM_SelectMasterSlaveMode(TIM1,TIM_MasterSlaveMode_Enable);//ê1&#196;üTIM1&#214;÷′ó&#196;£ê&#189;
  TIM_SelectInputTrigger(TIM1,TIM_TS_ITR1);//&#196;ú2&#191;′¥·¢£&#172;′óTIM2′¥·¢

  TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//&#207;òé&#207;&#188;&#198;êyò&#187;μ&#169;TIMx_CNT<TIMx_CCR1í¨μà&#206;TD§
  TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//OC1ê&#228;3&#246;ê1&#196;ü
  TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//óDD§&#184;&#223;μ&#231;&#198;&#189;
  TIM_OCInitStruct.TIM_Pulse = TIM1Compare1;//±è&#189;&#207;2&#182;&#187;&#241;1μ&#196;×°&#212;&#216;&#214;μ
  TIM_OC1Init(TIM1,&TIM_OCInitStruct);

  TIM_Cmd(TIM1,ENABLE);//ê1&#196;üTIM1
        
}

//éè&#214;&#195WMμ&#196;ê&#228;3&#246;
//Cycle:&#206;a&#214;ü&#198;ú£&#172;μ¥&#206;&#187;us
//Pulse_Num:&#206;a&#194;&#246;3&#229;&#184;&#246;êy£¨D&#161;óú3200)
void TIM1_TIM2_PWM(u16 Cycle, u16 Pulse_Num)
{
  u16 TIM1per = 0;
  u32 Time = 0;

  //&#184;&#196;±&#228;TIM1μ&#196;&#214;&#216;×°&#214;μ&#190;í&#184;&#196;±&#228;á&#203;&#194;&#246;3&#229;μ&#196;&#198;μ&#194;ê£&#172;&#213;aà&#239;éè&#214;&#195;&#213;&#188;&#191;&#213;±è&#206;a50%
  //&#184;&#196;±&#228;TIM2μ&#196;&#212;¤·&#214;&#198;μ&#214;μoí&#214;&#216;×°&#214;μ&#190;í&#184;&#196;±&#228;á&#203;&#194;&#246;3&#229;μ&#196;&#184;&#246;êy

  Time = Cycle * Pulse_Num;
  Time /= 100;              //&#212;¤·&#214;&#198;μ&#206;a7200,100us&#188;&#198;êyò&#187;′&#206;
  TIM1per = Cycle/10;       //&#212;¤·&#214;&#198;μ&#206;a720,10us&#188;&#198;êyò&#187;′&#206;

  TIM_SetAutoreload(TIM2, Time+1);//éè&#214;&#195;TIM2&#214;&#216;×°&#214;μ
  TIM_SetAutoreload(TIM1, TIM1per-1);//éè&#214;&#195;TIM1μ&#196;&#214;&#216;×°&#214;μ
  TIM_SetCompare1(TIM1,TIM1per/2);//éè&#214;&#195;&#213;&#188;&#191;&#213;±è&#206;a50%
  TIM_Cmd(TIM2,ENABLE);//ê1&#196;üTIM2
        
}

int main(void)
{

        SystemInit();
        delay_init(72);             //&#209;óê±3&#245;ê&#188;&#187;ˉ
        NVIC_Configuration();          
   //TIM_CtrlPWMOutputs(TIM1, ENABLE);   
         Motor_Init(10,5,2);                  
   TIM1_TIM2_PWM(500,3200);
while(1)
{
  delay_us(100);

}}
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
103
金钱
103
注册时间
2015-11-28
在线时间
30 小时
 楼主| 发表于 2016-3-24 16:45:50 | 显示全部楼层
呃,注释怎么变成这个样子了,这段代码以前有人成功的啊~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-19 17:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表