5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: 用单片机做了个脉冲输出的手柄。替代电脑控制 [打印本页]

作者: mzral    时间: 2014-2-9 21:13
标题: 用单片机做了个脉冲输出的手柄。替代电脑控制
本帖最后由 mzral 于 2014-2-15 22:22 编辑

虽然已经有卖遥控手柄的了,而且价格不贵,但本着DIY 能自己做的东西花钱买是一种耻辱的精神,用单片机做了个xyz轴步进信号发生器。应该相当于数控上的遥控手柄了吧,,不知道具体有什么意义,但至少可以不用手去拧平台了,
下图51系统+1602液晶点阵
(, 下载次数: 27)
下图装好后,因为没有手摇的那种滚轮,,所以调速只能靠按钮了。。
(, 下载次数: 12)
来张背面的
(, 下载次数: 13)
硬件已经搭建完毕,因为是旧洞洞板,不上锡,所以焊接的比较难看,但能用。下一步,软件编写
在编了N天之后,,终于小有成效,初步调试通过,下一步,焊接线端子,后面的裸露电路需要包扎一下
代码已经完成Xyz轴的运动处理,亲测能用。。等我的7016钻铣到了,上床调试速度.不多说了,先上个代码给感兴趣的坛友研究研究
以下是代码
// 1 xyz轴默认速度选择按钮
// 2 默认速度减
// 3 默认速度加
// 4 X+
// 5 X-
// 6 Y+
// 7 Y-
// 8 Z+
// 9 Z-   随着代码一点点的完成 还发现很多不足的地方,代码里还没留限位开关呢,可是芯片的管脚已经不够用了,还需要增加管脚。或者把指示灯去掉节省几个管脚?。。。
// 双击4或5 x轴对应加减0.1mm距离 (需上机调试后确定)
// 双击6或7 y轴对应加减0.1mm距离 (需上机调试后确定)
// 双击8或9 z轴对应加减0.1mm距离 (需上机调试后确定)
//
//
/*******************************************************************************
*  描述: 晶振11.0592  30p起振电容 DC5V                                         *
********************************************************************************/
#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
/************* 1602引脚定义 *************/
#define LCD_data  P0      //数据口
sbit LCD_RS  =  P1^6;     //寄存器选择输入
sbit LCD_RW  =  P1^3;     //液晶读写控制
sbit LCD_EN  =  P1^4;     //液晶使能控制
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
sbit  KXA   = P3^5;       //7 X+
sbit  KXB   = P3^6;       //6 X-
sbit  KYA   = P3^3;       //4 Y+
sbit  KYB   = P3^7;       //5 Y-
sbit  KZA   = P3^2;       //8 Z+
sbit  KZB   = P3^4;       //9 Z-
sbit  XLED    =   P1^0;  //X轴调速选择指示灯LED
sbit  YLED    =   P1^1;  //Y轴调速选择指示灯LED
sbit  ZLED    =   P1^2;  //Z轴调速选择指示灯LED
sbit  Kslow   =   P3^1;  //减速
sbit  Kfast   =   P3^0;  //加速
sbit  Kchice  =   P1^5;  //选择
sbit  Xmaichong = P2^0;  //X轴脉冲输出
sbit  Xzhishi   = P2^1;  //X轴脉冲指示灯
sbit  Xfanzheng = P2^2;  //X轴方向控制
sbit  Ymaichong = P2^3;  //Y轴脉冲输出
sbit  Yzhishi   = P2^4;  //Y轴脉冲指示灯
sbit  Yfanzheng = P2^5;  //Y轴方向控制
sbit  Zmaichong = P2^6;  //Z轴脉冲输出
sbit  Zzhishi   = P2^7;  //Z轴脉冲指示灯
sbit  Zfanzheng = P1^7;  //Z轴方向控制
bit  flag1=1;            //程序标志
bit  flagKXA=1;          //程序标志
bit  flagKXB=1;          //程序标志
bit  flagKYA=1;          //程序标志
bit  flagKYB=1;          //程序标志
bit  flagKZA=1;          //程序标志
bit  flagKZB=1;          //程序标志
uchar  o=0;      //计数变量
uchar  p=0;      //计数变量
uchar  q=0;      //计数变量
uchar  z=0;      //计数变量
uchar  Xr=0;     //计数变量
uchar  Yr=0;     //计数变量
uchar  Zr=0;     //计数变量
int   Xrate=10;          //预设定速率
int   Yrate=10;          //预设定速率
int   Zrate=10;          //预设定速率
/*********************************************************/
uchar code  DIS1[] = {"F: X10 Y10 Z10"};
uchar code   num[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
/*******************************************************************/
/*  延时函数                                                       */
/*******************************************************************/
void delay(int ms)
{
    while(ms--)
{
      uchar i;
   for(i=0;i<150;i++)  
    {
    }
}
}      
void Zdelay(int ms)
{
    while(ms--)
{
    uchar i;
}
}   
/*******************************************************************/
/*检查LCD忙状态                                                    */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。      */
/*******************************************************************/
bit lcd_busy()
{                          
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    delayNOP();
    result = (bit)(P0&0x80);
    LCD_EN = 0;
    return(result);
}
/*******************************************************************/
/*写指令数据到LCD                                                  */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。                             */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{                          
   while(lcd_busy());
    LCD_RS = 0;
    LCD_RW = 0;
    LCD_EN = 0;
    _nop_();
    _nop_();
    P0 = cmd;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;  
}
/*******************************************************************/
/*写显示数据到LCD                                                  */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。                               */
/*******************************************************************/
void lcd_wdat(uchar dat)
{                          
   while(lcd_busy());
    LCD_RS = 1;
    LCD_RW = 0;
    LCD_EN = 0;
    P0 = dat;
    delayNOP();
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;
}
/*******************************************************************/
/*  LCD初始化设定                                                  */
/*******************************************************************/
void lcd_init()
{   
    lcd_wcmd(0x34);      //扩充指令操作
    delay(5);
    lcd_wcmd(0x30);      //基本指令操作
    delay(5);
    lcd_wcmd(0x0C);      //显示开,关光标
    delay(5);
    lcd_wcmd(0x01);      //清除LCD的显示内容
    delay(5);
}
/*********************************************************/
/* 设定显示位置                                          */
/*********************************************************/
void lcd_pos(uchar X,uchar Y)
{                          
   uchar  pos;
   if (X==1)
     {X=0x80;}
   else if (X==2)
     {X=0x90;}
   else if (X==3)
     {X=0x88;}
   else if (X==4)
     {X=0x98;}
   pos = X+Y ;

   lcd_wcmd(pos);     //显示地址
}
/*********************************************************
* 闪烁函数                                               *
*********************************************************/
void lcdflag()
{
   lcd_wcmd(0x08);   
   delay(400);
   lcd_wcmd(0x0c);   
   delay(400);
   lcd_wcmd(0x08);   
   delay(400);
   lcd_wcmd(0x0c);   
   delay(400);
   lcd_wcmd(0x08);   
   delay(200);
   lcd_wcmd(0x0c);   
   delay(5);
   lcd_wcmd(0x01);   
   delay(5);
}
/*********************************************************
* 清屏函数                                               *
*********************************************************/
void  clr_screen()
{
   lcd_wcmd(0x34);      //扩充指令操作
   delay(5);   
   lcd_wcmd(0x30);      //基本指令操作
   delay(5);
   lcd_wcmd(0x01);      //清屏
   delay(5);     
}
/*********************************************************
* 初始化定时器                                           *
*********************************************************/
void Timer_Init(void)              //-------T0初始化函数
{
  TMOD = 0x11;        //--设置T1 T0工作方式
  TH0  = 0xff;TL0  = 0xf6;
  TH1  = 0xff;TL1  = 0xfa;
  IE   = 0x9a;        //-------------开中断
  ES   = 0;
  TR0  = 1;         //----------Timmer0开
  TR1  = 1;         //----------Timmer1开
}
/********************************************************
/*  定时器 0 中断           *
/********************************************************/
void  Xmotor()  interrupt  1   using 1
{     
    TH0  = 0xff;                 //重新给TH0赋值
    TF0  = 0 ;         //定时溢出清0
    p++;
//=======================================================================
//=======================================================================
///////////////////////////////////////////////////////处理X轴运动///////
    if(p > (20-Xrate) && flagKXA==0)
            {
       p=0;
    Xr=Xr+1;
    Xmaichong=~Xmaichong;
    if(Xr>50)
    {
    Xzhishi  =  ~Xzhishi;
    Xr=0;
    }
      }
     if(p > (20-Xrate) && flagKXB==0)
            {
       p=0;
    Xr=Xr+1;
    Xmaichong=~Xmaichong;
    if(Xr>50)
    {
    Xzhishi  =  ~Xzhishi;
    Xr=0;
    }
      }
}
///////////////////////////////////////////////////////处理X轴运动///////
//=======================================================================
///////////////////////////////////////////////////////处理Y轴运动///////
void Ymotor(void) interrupt 3 using 2
{
TH1  = 0xff;  //重新给TH1赋值
//TL0  = 0x00;     //不对TL1赋值,让其继续计数
TF1  = 0 ;      //定时溢出清0
   q++;
       if(q > (20-Yrate) && flagKYA==0)
            {
       q=0;
    Yr=Yr+1;
    Ymaichong=~Ymaichong;
    if(Yr>50)
    {
    Yzhishi  =  ~Yzhishi;
    Yr=0;
    }
      }
     if(q > (20-Yrate) && flagKYB==0)
            {
       q=0;
    Yr=Yr+1;
    Ymaichong=~Ymaichong;
    if(Yr>50)
    {
    Yzhishi  =  ~Yzhishi;
    Yr=0;
    }
      }
}
///////////////////////////////////////////////////////处理Y轴运动///////
//=======================================================================
//代码过长,帖子有字数限制,,代码分两部分发
注:19楼的代码是半成品,可是无法删掉了。。调试好的后半部分代码在24楼!!!!!





作者: 1zmit    时间: 2014-2-9 21:21
DIY 能自己做的东西花钱买是一种耻辱的精神

作者: 夜行侠    时间: 2014-2-9 21:24
电子强人

作者: mzral    时间: 2014-2-9 21:26
1zmit 发表于 2014-2-9 21:21
DIY 能自己做的东西花钱买是一种耻辱的精神

yes

作者: mzral    时间: 2014-2-9 21:32
夜行侠 发表于 2014-2-9 21:24
电子强人

没这么强,,床子这方面我可是个超级新手。。正在纠结,滕州20钻铣和西菱ZX7016,打算2000左右入个小钻铣哪个好呢。。。。


作者: 老撅杆    时间: 2014-2-9 21:59
没明白楼主的宗旨是什么。但是在性能方面能达到一致。我想应该是成功地。

作者: mzral    时间: 2014-2-9 22:49
老撅杆 发表于 2014-2-9 21:59
没明白楼主的宗旨是什么。但是在性能方面能达到一致。我想应该是成功地。

就是一个可以控制xyz轴步进电机的手柄。为以后的DIY数控小铣 做准备

作者: 疯狂芹菜    时间: 2014-2-9 23:50
两年半不换水是怎么做到的


作者: mzral    时间: 2014-2-10 09:37
疯狂芹菜 发表于 2014-2-9 23:50
两年半不换水是怎么做到的

1,鱼缸长150cm 宽28cm ,底沙是土质的陶沙,可供植物生长.
2,有几条彩霞,不经常喂 每3天喂一次,饿的时候鱼偶尔吃点水草,防止水草过多。
3,彩霞经常下崽,定期清理多余的彩霞,,保留8条之内,2条公的,6条母的,多余的,直接扔掉,为了维持平衡,,没办法
4,有种大胡子鱼,,吃水底脏东西的,主要彩霞的便便。植物生长也会用到鱼便便。
5,有三四条清洁工,清理缸壁
6,偶尔水质不好偏黄的时候加入少量硝化细菌
7,每周开2小时过滤。
8,由于水分蒸发,定期补入新水,,坛子快变成养鱼的了,哈哈


作者: 老撅杆    时间: 2014-2-10 12:39



甲类两声道啊。电源变压器有点小哦。

作者: mzral    时间: 2014-2-10 16:16
灯丝是独立供电,所以省了十瓦左右的功率,

作者: zhou792008    时间: 2014-2-10 20:20
支持原创

作者: myisdk    时间: 2014-2-10 21:46
呵呵,一直想玩玩胆机.但是器材不好找啊,你这个用来推5寸书架箱爽啊

作者: mzral    时间: 2014-2-10 22:10
没专业的音箱,,不过有个aiwa的老磁带CD机520,,音箱效果还维持、、

作者: 机械人家    时间: 2014-2-11 10:39



用6P14好些吧,费用差不多。


作者: mzral    时间: 2014-2-11 12:04
机械人家 发表于 2014-2-11 10:39
用6P14好些吧,费用差不多。

手头有好几斤6P1,6N1,6N2.。。所以就这么做了,,,够用一辈子的了。。

作者: wangcaidepy    时间: 2014-2-11 12:11
楼主买个单片机实验箱吧,用里面的成品电路,组合调试好之后,再画pcb板,然后开始焊接,其实多费不了多少事情的。洞洞板实在是看着晕。

作者: mzral    时间: 2014-2-11 20:54
wangcaidepy 发表于 2014-2-11 12:11
楼主买个单片机实验箱吧,用里面的成品电路,组合调试好之后,再画pcb板,然后开始焊接,其实多费不了多少 ...

单片机的试验箱有很多,但是按钮不是这么摆放的按着不顺手,这个做出来就直接使用了,用左手操作正好(有点左撇子)。。还有试验箱要连的线太多,而且杜邦线插接也不稳定。为这一块手柄 开个版不太划算、、

作者: mzral    时间: 2014-2-12 23:49
本帖最后由 mzral 于 2014-2-15 19:01 编辑


1

作者: lq13066    时间: 2014-2-13 12:56
努力就有希望!

作者: 油鬼子    时间: 2014-2-13 17:12
感谢

作者: silk2    时间: 2014-2-13 18:07
if else编写的代码可维护性差
用工用有限状态机的写法 用switch/case

作者: rick_hou    时间: 2014-2-13 23:18
我去年底也做了一个,不过搞了一半就放下了,向你学习。争取今年搞完。

作者: mzral    时间: 2014-2-13 23:50
/*********************************************************
*                                                        *
* 主函数                                                 *
*                                                        *
*********************************************************/
void main()
{
   uchar i;
   uchar j;
   delay(100);                 //上电,等待稳定
   lcd_init();                             //初始化LCD
   Timer_Init();                  //初始化定时器
   lcd_pos(1,0);
        while(DIS1[i] != '\0')
        {
                lcd_wdat(DIS1[i]);        //显示字符F:X10Y10Z10
                i++;
        }
   
   while(1)
   {
//=======================================================================
///////////////////////////////////////////////////////选择XYZ轴部分///11
   if(Kchice==0)
           {
                   delay(60);
                   if(Kchice==0)
                                           {
                                           i=0;
                                           j=j+1;
                                           if(j==1)
                                                   {
                                                           XLED=0;
                                                        YLED=1;
                                                        ZLED=1;
                                                   }
                                           if(j==2)
                                                   {
                                                           XLED=1;
                                                        YLED=0;
                                                        ZLED=1;
                                                   }
                                           if(j==3)
                                                   {
                                                           XLED=1;
                                                        YLED=1;
                                                        ZLED=0;
                                                   }
                                           if(j==4)
                                                   {
                                                           XLED=1;
                                                        YLED=1;
                                                        ZLED=1;
                                                        j=0;
                                                   }
                                           }
           }
///////////////////////////////////////////////////////选择XYZ轴部分///11
//=======================================================================
///////////////////////////////////////////////////////速度加快////////22
   if(Kfast==0)
           {
                   delay(60);
                   if(Kfast==0)
                                           {
                                                if(XLED==0)
                                                                {
                                                                Xrate=Xrate+1;
                                                                lcd_pos(1,4);
                                        lcd_wdat(num[Xrate/10]);
                                lcd_wdat(num[Xrate%10]);
                                                                if(Xrate==20)
                                                                                {
                                                                                  Xrate=19;       
                                                                                }                                          
                                                                }
                                                if(YLED==0)
                                                                {
                                                                Yrate=Yrate+1;   
                                                                lcd_pos(1,8);
                                        lcd_wdat(num[Yrate/10]);
                                lcd_wdat(num[Yrate%10]);
                                                                if(Yrate==20)
                                                                                {
                                                                                  Yrate=19;       
                                                                                }                                          
                                                                }
                                                if(ZLED==0)
                                                                {
                                                                Zrate=Zrate+1;
                                                                lcd_pos(1,12);
                                        lcd_wdat(num[Zrate/10]);
                                lcd_wdat(num[Zrate%10]);
                                                                if(Zrate==20)
                                                                                {
                                                                                  Zrate=19;       
                                                                                }                                          
                                                                }
                                           }
           }
///////////////////////////////////////////////////////速度加快////////22   
//=======================================================================
///////////////////////////////////////////////////////速度减慢////////33
   if(Kslow==0)
           {
                   delay(60);
                   if(Kslow==0)
                                           {
                                                if(XLED==0)
                                                                {
                                                                Xrate=Xrate-1;
                                                                lcd_pos(1,4);
                                        lcd_wdat(num[Xrate/10]);
                                        lcd_wdat(num[Xrate%10]);
                                                                if(Xrate==0)
                                                                                {
                                                                                  Xrate=1;       
                                                                                }       
                                                                }
                                                if(YLED==0)
                                                                {
                                                                Yrate=Yrate-1;
                                                                lcd_pos(1,8);
                                        lcd_wdat(num[Yrate/10]);
                                        lcd_wdat(num[Yrate%10]);
                                                                if(Yrate==0)
                                                                                {
                                                                                  Yrate=1;       
                                                                                }       
                                                                }
                                                if(ZLED==0)
                                                                {
                                                                Zrate=Zrate-1;
                                                                lcd_pos(1,12);
                                        lcd_wdat(num[Zrate/10]);
                                        lcd_wdat(num[Zrate%10]);
                                                                if(Zrate==0)
                                                                                {
                                                                                  Zrate=1;       
                                                                                }       
                                                                }
                                                }
                        }
///////////////////////////////////////////////////////速度减慢////////33
//=======================================================================
///////////////////////////////////////////////////////X轴加///////////44
if(KXA==0)
           {
           flagKXA=0;
           flagKXB=1;
           Xfanzheng=0;                                  
           }
if(KXA==1)
           {
           flagKXA=1;
           if(KXB==1)
                           {
                                   Xzhishi=1;
                           }                                          
           }
///////////////////////////////////////////////////////X轴加///////////44
///////////////////////////////////////////////////////X轴减///////////55
if(KXB==0)
                {
                flagKXA=1;
                flagKXB=0;
                Xfanzheng=1;
                }
if(KXB==1)
                {
                flagKXB=1;
            if(KXA==1)
                           {
                                   Xzhishi=1;
                           }                                          
                }
///////////////////////////////////////////////////////X轴减///////////55
//=======================================================================
///////////////////////////////////////////////////////Y轴加///////////66
if(KYA==0)
           {
           flagKYA=0;
           flagKYB=1;
           Yfanzheng=0;                                  
           }
if(KYA==1)
           {
           flagKYA=1;
           if(KYB==1)
                           {
                                   Yzhishi=1;
                           }                                          
           }
///////////////////////////////////////////////////////Y轴加///////////66
///////////////////////////////////////////////////////Y轴减///////////77
if(KYB==0)
                {
                flagKYA=1;
                flagKYB=0;
                Yfanzheng=1;
                }
if(KYB==1)
                {
                flagKYB=1;
            if(KYA==1)
                           {
                                   Yzhishi=1;
                           }                                          
                }
///////////////////////////////////////////////////////Y轴减///////////77
//=======================================================================
///////////////////////////////////////////////////////Z轴加///////////88
if(KZA==0)
           {
                Zdelay(20-Zrate);
                z=z+1;
                if(z>100)
                                {
                                Zzhishi=~Zzhishi;       
                                }
                Zmaichong=~Zmaichong;       
                Zfanzheng=0;                  
           }
if(KZA==1)
           {
                       if(KZB==1)
                           {
                                   Zzhishi=1;
                           }                                          
           }
///////////////////////////////////////////////////////Z轴加///////////88
//=======================================================================
///////////////////////////////////////////////////////Z轴减///////////99
if(KZB==0)
                {
                Zdelay(20-Zrate);
                z=z+1;
                if(z>150)
                                {
                                Zzhishi=~Zzhishi;
                                z=0;       
                                }
                Zmaichong=~Zmaichong;
                Zfanzheng=1;                  
                }
if(KZB==1)
                {
            if(KZA==1)
                           {
                                   Zzhishi=1;
                                z=0;
                           }                          
                }
///////////////////////////////////////////////////////Z轴减///////////99
//=======================================================================
    }
}
/*****************************程序模拟完成,xyz默认速度调节可用,等待上机调试步进速度****************************/

作者: mzral    时间: 2014-2-13 23:58
rick_hou 发表于 2014-2-13 23:18
我去年底也做了一个,不过搞了一半就放下了,向你学习。争取今年搞完。

坚持就是胜利,预祝你的也早点完工,,,我这个代码因为xy轴常用,考虑到xy轴时间信号的精准度,所以用的单片机系统里面的中断功能,所以代码多了点,如果用delay()延时,代码量可减少很多。。


作者: mzral    时间: 2014-2-14 00:09
夜行侠 发表于 2014-2-9 21:24
电子强人

代码还没完工,上机还没测试。。不敢称强人,只是个爱好者,等完全调试好了,再上传程序的附件,机械方面还要多多跟坛友请教,不知不觉过凌晨了。睡觉白白。

作者: crazycow    时间: 2014-2-14 00:17
挺好的学习帖子,楼主的精神也很可贵


作者: rick_hou    时间: 2014-2-14 02:14
mzral 发表于 2014-2-13 23:58
坚持就是胜利,预祝你的也早点完工,,,我这个代码因为xy轴常用,考虑到xy轴时间信号的精准度,所以用的 ...

呵呵,我当时是用arduino的定时中断产生脉冲的,程序写的有点乱,现在已经都看不明白了。电子手轮是100脉冲的,还用了摇杆,可以切换,还有自动走刀的功能。

作者: mzral    时间: 2014-2-14 08:28
rick_hou 发表于 2014-2-14 02:14
呵呵,我当时是用arduino的定时中断产生脉冲的,程序写的有点乱,现在已经都看不明白了。电子手轮是100脉 ...

你说的倒是提醒我了...可以整个上下左右的那种摇杆.比按钮好多了..然后再加个小键盘,再整个usb转串口通讯,,功能就全了...



作者: 78683612    时间: 2014-2-14 12:11
用雕刻机刻板不更快?

作者: bd2bo    时间: 2014-2-14 18:48
mzral实名认证

作者: mzral    时间: 2014-2-14 19:17
78683612 发表于 2014-2-14 12:11
用雕刻机刻板不更快?

米有雕刻机、、、只有20W黄花电烙铁 和 焊锡。。

作者: 夜行侠    时间: 2014-2-14 20:22
mzral 发表于 2014-2-14 00:09
代码还没完工,上机还没测试。。不敢称强人,只是个爱好者,等完全调试好了,再上传程序的附件, ...

互相指教

作者: xxdz12345    时间: 2014-2-15 10:54
我也用89S52单片机做了个功能差不多,只是我不会单片机语言。用的是梯形图转Pwm再转HEX.只是梯形图用的定时器太大了。步进电机转的太慢。换24M晶振还是慢。你的不错啊功能多。哈哈做好了我仿造个啊。


作者: lisui    时间: 2014-2-15 16:07
这样搭桥看的头大,画个电路图,雕刻机上雕个电路板美观又稳定,我就雕了块音调板,音质相当好。

作者: mzral    时间: 2014-2-15 18:46
本帖最后由 mzral 于 2014-2-15 18:53 编辑
xxdz12345 发表于 2014-2-15 10:54
我也用89S52单片机做了个功能差不多,只是我不会单片机语言。用的是梯形图转Pwm再转HEX.只是梯形图用的定时 ...


11.0592M感觉应该够用,调到脉冲最快的时候 驱动器用16细分以下,电机直接启动不起来,如果细分再增加可以直接启动,但怕速度慢。只能等同步轮 和钻铣床到了再研究这些了,如果速度不够晶振再换个高频率的,如果用汇编编写速度还能更快,只可惜汇编没学好。只能用C了,浪费了很多硬件的周期



作者: mzral    时间: 2014-2-15 18:48
lisui 发表于 2014-2-15 16:07
这样搭桥看的头大,画个电路图,雕刻机上雕个电路板美观又稳定,我就雕了块音调板,音质相当好。

没雕刻机,,在想如果钻铣床精度调高了,连上电脑,看看能不能雕刻个板。。






欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://5imx.com/) Powered by Discuz! X3.3