OpenEdv-开源电子网

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

分享最近研究步進電機的訊息

[复制链接]

20

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
308
金钱
308
注册时间
2013-11-6
在线时间
23 小时
发表于 2013-12-6 10:20:05 | 显示全部楼层 |阅读模式

參考原子哥的原碼,試出使用TIM2 CH1 去輸出PWM控制步進電機的CLK
在使用TIM4去計數要走的步數,因我要使用ADC讀數據出來轉換成要走的步數.
以下是我的原碼拿出來跟大家討論,有更好的方式也可以提出跟大家分享。
#define pulse 999
#define pscr  71
int main(void)
{
 u16 adcx=0;
 float temp_now=0;
 int buf=0,temp_old=0;
 u8 flag=0;
 SystemInit();
 delay_init(72);    
 NVIC_Configuration();
  uart_init(9600);
  Stepper_PinControlConfig();
 Adc_Init();
 IIC_Init();
 AT24CXX_Check();
 SMCLK_Init(pulse,pscr); 
 Timerx_Init(pulse/2,pscr);
 while(1)
 {
  adcx=Get_RinData(ADC_Channel_1);
  temp_now=(float)adcx*(3.303/4096);
  adcx=temp_now;
  temp_now=(temp_now*265/33)+8;
  if(temp_now<8) temp_now=8;
  if(temp_now>26.5) temp_now=26.5;
  buf=temp_now*100;
  delay_ms(100);
  if(10<(buf-temp_old)||10<(temp_old-buf))
  {
   temp_old=temp_now*100;
   printf("%3.1fmm",temp_now);
   flag=1;
  }
  if(flag==1) 
  {
   TIM_Cmd(TIM4, ENABLE);
   TIM_Cmd(TIM2, ENABLE);
  }
  buf=temp_now*10;
  buf=buf*40;
  Stepper_SetRotationDirection(SRD_CW);
  while(buf!=StepCount);
  printf("CW Step=%d\n",StepCount);
  StepCount=0;
  TIM_Cmd(TIM4, DISABLE);
  TIM_Cmd(TIM2, DISABLE);
  printf("motor CW stop\n");
  delay_ms(2000);
  if(flag==1) 
  {
   TIM_Cmd(TIM4, ENABLE);
   TIM_Cmd(TIM2, ENABLE);
  }
  buf=temp_now*10;
  buf=buf*40;
  Stepper_SetRotationDirection(SRD_CCW);
  while(buf!=StepCount);
  printf("CCW Step=%d\n",StepCount);
  StepCount=0;
  TIM_Cmd(TIM4, DISABLE);
  TIM_Cmd(TIM2, DISABLE);
  printf("motor CCW stop\n");
  delay_ms(2000);
  flag=0;
 }
配置請參考原子哥的Mini原碼.

 

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 16:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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