Board logo

标题: [已交货] 客户一个订单:详情(具体研发过程开源)!!! [打印本页]

作者: andylee    时间: 2010-10-10 14:47     标题: 客户一个订单:详情(具体研发过程开源)!!!

技术要求:

步进电机控制要求

实现按一次按钮电机转过一固定角,按复位按钮恢复到零度角,能用数码管显示角度。

能实现单片机与PC机通讯,能独立控制步进电机的功能。要求步进角小且精确,工作确定。

一、硬件设备

1STM32PIN100(步进电机控制器V1.3)  95

2THB7128 3A 单轴步进电机驱动器  95

3、电源   8

4、步进电机   12

5、数码管显示器   30

6串口线一条,  5

7JLINK下载器   60

二、控制要求

1、单片机与PC机能够通讯,单片机与PC机均能独立控制步进电机工作。

2、单片机工作要求:

1)通过面板三个按钮选择固定偏转角,固定偏转角为(18/128*2,(18/128*71,(18/128*20,按启动按钮单步运行到对应角度停止。

2)设立二个限位开关,一个安装在零度角,一个安装在90度。

3设立复位开关,复位开关的功能按复位开关电机反转到零度角,限位开关工作电机停止。数码管显示零度?????

4)数码管显示转过的角度(运行几步角度累加)

5)单片机上能够存储PC机传入的固定偏角值数据。

6)实现正反转控制。

3PC机控制要求

三个固定偏转角通过电脑可以设定,在PC机上给定一个角度让电机运转到指定角度,数码管显示的角度信息传回PC

三、提供原理图及源程序代码

部分聊天记录:

网游天下_01 (16:53:43):

额,在哪接收?

fangruimin123456 (16:54:00):

==

我重新发,你在这接收。

网游天下_01 (16:54:36):

这套系统最好能够帮我标明总的价格

fangruimin123456 (16:54:59):

跟这个类似

fangruimin123456 (16:56:58):

我把理解的说说:按一下按钮,系统就驱动输出控制电机转动,转动多少角度呢?正转还是反转呢?

网游天下_01 (16:58:50):

转动的角度是否可以手动输入或者固定三个档次,例如0.1、0.5、1用开关切换,既要正转又要反转、、

fangruimin123456 (17:01:06):

对应是运行0.1度,0.5度,1度,是吗?

网游天下_01 (17:01:49):

fangruimin123456 (17:02:51):

要求在数码管上设定,还是用个拨码开关设定就可以?数码管设定程序就麻烦些

网游天下_01 (17:03:33):

用个拨码开关设定就可以

fangruimin123456 (17:03:36):

正、反转也可以用3个拨码开关设定。

网游天下_01 (17:04:12):

fangruimin123456 (17:05:18):

控制器一套、128细分驱动一个、1.8度42步进电机一个。220V变5V电源要不?

网游天下_01 (17:05:47):

还需要一个复位开关,例如转到9度以后按一下就可以直接复位从零开始

要电源

fangruimin123456 (17:06:43):

意思是点动运行的角度是累加的,若反转就要减掉运行的角度

加个复位可以

网游天下_01 (17:07:35):

是的

fangruimin123456 (17:07:37):

或按复位键就重新开始算

什么时候要,我们要给你重新焊上面那个小板,而且要改程序,需要多少套?

网游天下_01 (17:09:36):

按复位键能回到起始的平衡点,即零度,可以在零度上设一个限位器,当反转到此限位器时就停止

网游天下_01 (17:11:59):

可能是要加二个限位开关的接口,一个在零度,一个在90度,电机运转就在0度和90度之间,复位键一按即反转到零度,而不是计数器清零

fangruimin123456 (17:12:52):

若碰到90度的开关也停止

网游天下_01 (17:13:05):

fangruimin123456 (17:13:28):

若按复位键就反转运行,并且碰到0度开关就停止。

网游天下_01 (17:14:03):

fangruimin123456 (17:15:04):

好的,等于要2个隔离输入,限位开关给我的信号是什么?

网游天下_01 (17:17:01):

相当于导线接通

fangruimin123456 (17:17:25):

接通到我电源的地?平时为悬空?

网游天下_01 (17:18:42):

接通到电源的地

fangruimin123456 (17:20:46):

也就是你的限位开关的工作电源的地到时与我电源的地连在一起就可以。

功能就这些?

控制器一套、128细分驱动一个、1.8度42步进电机一个。220V变5V电源。

需要多少套,还是一套?

网游天下_01 (17:21:38):

fangruimin123456 (17:21:52):

多少套呢?

网游天下_01 (17:21:53):

一套

一套

fangruimin123456 (17:23:55):

要成品是吗?

网游天下_01 (17:25:06):

fangruimin123456 (17:25:23):

不需要提供内部原理和代码?

网游天下_01 (17:25:46):

要提供内部原理和代码

fangruimin123456 (17:26:31):

也就是要控制器所有的电路、实现程序代码和方案?

网游天下_01 (17:26:52):

fangruimin123456 (17:27:55):

好的,提供2种选择,整个系统;1、我们提供产品,不提供方案,320元;包邮费。

2、提供产品和所有方案,480元,包邮费。

最后成交费用705元,加EEPROM、VB源代码;包快递费用。


作者: andylee    时间: 2010-10-10 14:59

[根据上述技术要求,初步采用的硬件电路设计是:attach]9[/attach]

基于电路模板:
http://item.taobao.com/item.htm?id=7253533994

后续焊接好的板子将继续公布。

附件: [硬件电路原理图] STM32-SK.DDB (2010-10-10 14:58, 268 KB) / 下载次数 2448
http://bbs.hymcu.com/attachment.php?aid=9&k=3f2c7b535be9f9d102948d2ac358d431&t=1732440975&sid=QydRDk
作者: andylee    时间: 2010-10-10 15:27

焊好的成品图:
1.JPG

图片附件: 1.JPG (2010-10-10 15:27, 44.31 KB) / 下载次数 906
http://bbs.hymcu.com/attachment.php?aid=10&k=11a98c0ae48e0488e3c338e1702056a1&t=1732440975&sid=QydRDk


作者: 光屁股的小孩    时间: 2010-10-11 12:08

不知道什么时候可以拿到些源码来学习。
作者: andylee    时间: 2010-10-12 18:55

基于串口的VB程序基本写好,界面如下图所示:

源代码,等调试通过后上传。

图片附件: 1.JPG (2010-10-12 18:54, 52 KB) / 下载次数 851
http://bbs.hymcu.com/attachment.php?aid=62&k=ca1b00a11e21a5a4928536a386cd3717&t=1732440975&sid=QydRDk


作者: andylee    时间: 2010-10-15 16:28

呵呵,今天基本调试完成,先上传VB源程序先,有想做上位机串口通信的兄弟姐妹们可以下载参考:
VB上位机源代码.zip (5.03 KB)

附件: VB上位机源代码.zip (2010-10-15 16:28, 5.03 KB) / 下载次数 2606
http://bbs.hymcu.com/attachment.php?aid=114&k=2b376c5de1b0bf4c26c7e55774e9c5b9&t=1732440975&sid=QydRDk
作者: andylee    时间: 2010-10-15 16:38

STM32中实现步进电机驱动控制,采用了定时器OC比较输出的模式,具体设置代码如下:
void Tim1_Configuration(void)//PA8-CH1-T1-DMA1CH5
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
TIM_OCInitTypeDef  TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
TIM_DeInit(TIM1);
/*TIM1时钟配置*/
TIM_TimeBaseStructure.TIM_Prescaler = 71;          //
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;      //
TIM_TimeBaseStructure.TIM_Period = 0xffff;       //
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
/* Channel 1 Configuration in oc mode */
TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;     //
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;      //
TIM_OCInitStructure.TIM_Pulse =S_50HZ;               //
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;       //输出极性


TIM_OC1Init(TIM1,&TIM_OCInitStructure);           //通道1
TIM_ClearFlag(TIM1, TIM_FLAG_CC1|TIM_FLAG_CC2|TIM_FLAG_CC3|TIM_FLAG_CC4);
TIM_ITConfig(TIM1, TIM_IT_CC1, DISABLE);

TIM_OC1PreloadConfig(TIM1,DISABLE);
TIM_ARRPreloadConfig(TIM1, DISABLE);
TIM_Cmd(TIM1,DISABLE);
TIM_CtrlPWMOutputs(TIM1,ENABLE);
}

然后再中断服务函数里面进行更改相应参数,使其输出脉冲的频率不同,做到加速-高速-减速的功能。

void TIM1_CC_IRQHandler(void)
{
    uint16_t capture=0;
uint16_t temp=0;

if(TIM_GetITStatus(TIM1, TIM_IT_CC1) == SET)
    {
        TIM_ClearITPendingBit(TIM1, TIM_IT_CC1 );
        capture = TIM_GetCapture1(TIM1);
  Tulun_i++;
  if(Tulun_i==2)
  {
   Mxmc_timer++;//2次中断为一个脉冲周期
   Tulun_i=0;
  }
  if(Tulun_runflag==1)
  {
   temp=TIM1_CC1_handler(COM_Refernce,Mxmc_timer);
  }
  else if(Tulun_runflag==0)
  {
   temp=TIM1_CC1_Datatreat(COM_Refernce,Mxmc_timer);
  }
        TIM_SetCompare1(TIM1, capture + temp);
    }
}


/********************************************************** ***
说明:运行过程中,定时器比较功能的实现函数
***************************************************************/
uint16_t TIM1_CC1_handler(uint32_t *ptr,uint32_t ym_data)
{
  uint16_t counter=0;
  static unsigned int i=0;
  static unsigned int temp=0;
  if(TLCLOSE_flagN==0)
  {
    if(ym_data<=ptr[1])//加速阶段
   {
     counter=500000/(Start_fre+Add_celer*ym_data);//500000为1M频率分为2;
   }
   else
   {
      counter=500000/ptr[4];//500000为1M频率分为2;
   }
  }
  else //获得了停止的按钮
  {
   if(i==0)
   {
    i++;
   if(ym_data>=ptr[1])//减速的脉冲数必须为PTR[1]
   {
    temp=ptr[1];
   }
   else
   {
    temp=ym_data;
   }
   }
   if(i<temp)
   {
    counter=500000/(Start_fre+Add_celer*temp-Add_celer*i);//500000为1M频率分为2
    i++;
   }
   else
   {
     counter=500000/Start_fre;//500000为1M频率分为2
    if(Tulun_i==0)
    {
        TIM_Cmd(TIM1,DISABLE);
        TIM_ITConfig(TIM1, TIM_IT_CC1, DISABLE);
     i=0;
     temp=0;
     TLCLOSE_flag=0;
     Tulun_runflag=10;
     Mxmc_timer=0;
     Tulun_datatemp=0;
        return 60000;//回一个非常的值
    }
   }  
  }
  return counter;
}
作者: andylee    时间: 2010-10-15 16:40

哈哈。这个板块基本完成了,开源啦。从项目技术要求,到硬件电路设计,到生产焊接出来的板子,到实现程序代码,其中板子中的核心控制步进电机的程序公开,上位机VB程序完全公开。接下来就是上一下运行状态的板子了。
作者: 火儿    时间: 2010-10-15 17:07

5天完成!
强!!
功力好深厚!
作者: andylee    时间: 2010-10-16 09:45


最后运行状态,和结构图。呵呵,希望客户满意:


图片附件: [步进电机控制器] 按键文本数控系统.jpg (2010-10-16 09:45, 369.17 KB) / 下载次数 1042
http://bbs.hymcu.com/attachment.php?aid=116&k=b9470710f43122385d885bbf58f81771&t=1732440975&sid=QydRDk


作者: leslen    时间: 2010-10-17 16:06

代码已收,谢谢分享。
作者: admin    时间: 2010-11-13 16:12


作者: z6g5j3r1p9e    时间: 2010-11-18 20:20

好帖子,向楼主致敬!~
作者: z9s4v2i8x5t    时间: 2010-11-23 02:50

积分真难得啊,先那积分走人了
作者: z0h9y0d1j6x    时间: 2010-11-29 15:30

好帖子,向楼主致敬!~
作者: z9s4v2i8x5t    时间: 2010-12-2 20:28

你说什么呢?不过还是同意哈~
作者: z7h2c4l2s1k    时间: 2010-12-15 23:03

因为帖子太长啦,所以先顶了在看啦~~~
作者: chinatjwzb    时间: 2011-1-22 18:58

不错的东西 继续努力
作者: tuowai    时间: 2011-2-18 11:03

记号记号,以后再看
作者: z8k6x0f8v6s    时间: 2011-2-21 10:14

人如其名,楼主你很给力啊!!




欢迎光临 珩源工控论坛 (http://bbs.hymcu.com/) Powered by Discuz! 7.2