菲律賓的賭場好嗎: [UNO] 当TB5128遇上Arduino UNO,第一次亲密接触

永利游戏开户直营
241|4
楼主
本帖最后由 NickyGrout 于 2019-9-24 03:59 编辑

      几年前了解到Arduino时,没想过自己有一天也会开始折腾。一直以为基于Arduino的程序,占空间,速度慢……最近回头深入了解时,其实用Arduino模板来开发,也可以像普通用AVR方式一样编程,差别不大。用Arduino的库只是更省事而已……在折腾中发现Arduino其实也挺好用的,刚好最近在测试步进驱动芯片TB5128,所以设计了一个匹配UNO的TB5128扩展模板,两者配合一起折腾,第一版先考虑在程序中使用Arduino库函数,先测试TB5128的最基本测试

      本次测试目的,是Arduino UNOTB5128扩展板的基本操作。实时自动循环正反转,根据脉冲数量来控制电机转动的角度。每次填充的脉冲数量计数完毕,程序中会自动切换方向,然后再次填充同样数量的脉冲。程序中,细分和衰减都有相应的函数去设置,方便调用。脉冲是通过软件定时,取反IO实现。脉冲频率的调整,可以在宏(CLK_F)中修改对应的数值。注意,因为没有加减速,所以在低细分数时,频率不要太高了。一般转速在1/秒左右,基本可以正常转动。再快的就要看电机的高频特性、驱动电压和负载情况了。另外TB5128的报警输出和Mo的端口还没在程序中实现检测……


Arduino UNO +TB5128实物图片,测试中
                              

功能设置说明:
    拔码开关SW设置功能:(默认设置成全低)
1.      GAIN_SEL(放大比例选择,可以选择5或10,对应电流计算公式:IO=VREF / GAIN / RS采样电阻)
2.      EDG_SEL(触发边沿选择,CLK是上升沿触发或者选择双边沿触发)
3.      IF_SEL(设置控制模式,本测试中是CLK模式,就是脉冲和方向直接控制,另外还有串行控制模式,待续)

    其它设置:图1标记有VREF字样处的插针(SEL4),是用来选择外部电阻分压生成VREF或者是UNO板输出PWM通过RC滤波生成VREF电压。 RS_SEL(板背面,用来设置采样模式)是通过短路焊点设置为外部采样模式。其它如:SEL2SEL3都由UNO板控制。TE1(对应SEL1,设置TB5128RESET)也是在板上短路为UNO控制。
    其中UNO5128.c文件完全与UNO5128.ino文件一样,复制成C文件格式,方便没有装Arduino软件的网友也能直接打开查看。HC595.h并不是单纯的头文件,包括595控制的相关函数都在里面      

           连接42的步进电机电机,额定电流2.5A的。TB5128扩展板设计在没考虑外部5V稳压电路,只能从UNO板引入……


只是基本的操作,项目使用了 1634 字节,占用了 (5%) 程序存储空间。最大为 32256 字节。                                                    全局变量使用了13字节,(0%)的动态内存,余留2035字节局部变量。最大为2048字节。

全部程序文件打包:
      UNO5128.zip (8.15 KB, 下载次数: 5)

      其中有一个C文件,与ino文件是完全一样的,方便没有装Arduino软件的网友也可以直接查看。程序中基本是完全注释了。没办法,AVR和Arduino都是第一次用,为了方便自己后续修改,都加了备注作说明,有可能描述不当的地方,请自动忽略。74HC595相关的控制程序都在其头文件中,一般不太复杂的程序,习惯放在基头文件中。另外关于电路板资料请看2楼,TB5128的资料:TB5128芯片资料


        题外话,有没有网友对第一亲密接触这个小说有印象吗当年在学校,都听着电台版入睡的,那主持的声音好迷人


评论

dirtwillfly 2019-9-26 08:14 回复TA
感谢分享 
沙发
 楼主 | 2019-9-23 16:23 | 只看该作者
本帖最后由 NickyGrout 于 2019-9-23 16:37 编辑

部分程序说明:

/*
* 控制主板: Arduino UNO
* 驱动板 : TB5128 步进驱动芯片(匹配UNO的驱动模块)  NO.1 (2019-09-11)
*
* 部分函数和端口功能控制说明(函数在HC595.h 文件)
*
* microStep(step):
*     设置TB5128细分数的函数, step=细分数, 需要用到什么细分就写入对应的数字, 函数中自动设置对应状态输出
*     
* smdmode(fdt):  
*     设置衰减的函数, fdt有4档 // 1=37.5% 快衰减 // 2=50% 快衰减 // 3=100% 快衰减 // 4 = ADMD(智能衰减)
*     
*     TQ_HIGH; 对应TORQE = HIGH;   // TQ_LOW; 对应TORQE = LOW   // 宏定义中已对应
*     ST_HIGH; 对应STANDBY = HIGH; // ST_LOW; 对应STANDBY = LOW // 宏定义中已对应
*     
*     1.8度的电机,整步转一圈需要的脉冲数= 360/1.8 = 200个脉冲
*     8细分时转一圈需要的脉冲数= 200 * 8=1600个脉冲,当脉冲频率=1.6KHZ时,速度=每秒转一圈
*     
*     RES5128 控制TB5128的RESET引脚 , 由UNO板直接控制   
*     
*     PWMVREF 用来调整VREF,用到定时器1的PWM ,通过RC滤波生成直流电压,从而设定TB5128的输出电流
*     TCCR1B=TCCR1B & B11111000 | 0x01 ; //修改定时器1分频比,PWM模块默认64分频 //提高PWMVREF的频率
*     
*     输出电流IO= VREF / GAIN / RS(采样电阻的阻值) // GAIN可以在板上通过拔码开关设定为10或者5,外部设定
*/


74HC595部分的函数:
  1. void hc595Write(unsigned char data)           // 刷新HC595的数据
  2. {
  3.     for (unsigned char i = 0; i < 8; i++)
  4.     {
  5.         digitalWrite(TCP, LOW);               // 将ST_CP口上加低电平让芯片准备好接收数据
  6.         shiftOut(DS, HCP, MSBFIRST, data);    // shiftOut() 串行移位函数  MSBFIRST(数据高位在前)、LSBFIRST(数据低位在前)
  7.         digitalWrite(TCP, HIGH);              // 将ST_CP这个针脚恢复到高电平
  8.         delayMicroseconds(1);                 //  
  9.     }   
  10. }

  11. void microStep(unsigned char M)     //  设置细分数
  12. {                                   
  13.     data_595 = data_595 | 0x1C;     //  把设置细分的位全部置1 // B000 111 00; // =0x1C;

  14.     switch(M)      //  micro_step = 0b111 SSS 11; 其中 S S S 位是设置细分数, 0b111 M0 M1 M2 11; // 2,3,4设置细分数
  15.     {
  16.         case   1:  data_595 &= 0xE3; break;    // B11100011;  break;  // 1   细分      B111 000 11;  // 0xE3
  17.         case   2:  data_595 &= 0xF3; break;    // B11110011;  break;  // 2   细分      B111 100 11;  // 0xF3
  18.         case   4:  data_595 &= 0xEB; break;    // B11101011;  break;  // 4   细分      B111 010 11;  // 0xEB
  19.         case   8:  data_595 &= 0xFB; break;    // B11111011;  break;  // 8   细分      B111 110 11;  // 0xFB
  20.         case  16:  data_595 &= 0xE7; break;    // B11100111;  break;  // 16  细分      B111 001 11;  // 0xE7
  21.         case  32:  data_595 &= 0xF7; break;    // B11110111;  break;  // 32  细分      B111 101 11;  // 0xF7
  22.         case  64:  data_595 &= 0xEF; break;    // B11101111;  break;  // 64  细分      B111 011 11;  // 0xEF
  23.         case 128:  data_595 &= 0xFF; break;    // B11111111;  break;  // 128 细分      B111 111 11;  // 0xFF
  24.         default:                     break;
  25.     }
  26. }
复制代码


TB5128扩展电路板相关资料:
UNO-TB5128.SCH.pdf (50.52 KB, 下载次数: 3)
UNO-TB5128应用说明.pdf (158.38 KB, 下载次数: 4)

完整资料包: UNO5128资料包.zip (283.7 KB, 下载次数: 4)

测试视频容量超过文件限制,正在编辑中……

板凳
 楼主 | 2019-9-24 16:25 | 只看该作者
附带测试视频:
UNO5128驱动步进电机正反转测试视频.zip (4.52 MB, 下载次数: 3)

视频中看到电机正反转和指示灯的变化。

另外,在程序看到TQ端也会相应操作,这个可以改变输出电流。选择输出100%设定的电流,或者输出50%设定的电流


主循环中的代码:


  1. void loop()    // put your main code here, to run repeatedly:
  2. {  
  3.     if(c>0)                        // 通过软件延时来取反端口电平,实现脉冲输出
  4.     {        
  5.         digitalWrite(RUN_ON,LOW);  // 开启LED指示灯                         // 2a
  6.         digitalWrite(CLK,HIGH);
  7.         delayMicroseconds(CLK_F);  // 适合8细分或更高细分 转动 // 参考宏定义说明
  8.         digitalWrite(CLK,LOW);
  9.         delayMicroseconds(CLK_F);  // CLK_F 延时值的大于影响输出脉冲的频率
  10.         c--;                       // 每次计数,CLK端输出一个完整的脉冲
  11.         digitalWrite(RUN_ON,HIGH); // 关闭LED指示灯                         // 2a
  12.     }
  13.     else  // c = 20480;              // 输出脉冲数量达到设定值后,重新设定脉冲数量,并改变电机方向
  14.     {
  15.         c = 32000;                 // C=(200*M)*N; M为设定的细分数,括号内是每圈的脉冲数量。 N=转动的圈数
  16.         if(a>0)
  17.         {
  18.             a=0x00;
  19.             digitalWrite(EN,LOW);     // 非必要操作 // EN端清零,关闭TB5128功率级 //会影响电机锁相,进入脱机状态
  20.             digitalWrite(DIR,HIGH);   // 切换电机转动方向
  21.             delayMicroseconds(5);     // 改变方向后,延时一段时间再发脉冲
  22.             digitalWrite(EN,HIGH);    // Set Enable HIGH  // 开启TB5128功率输出 // *
  23.         //digitalWrite(RUN_ON,HIGH); //  关闭LED指示灯                         // 1a
  24.             TQ_HIGH;                  //  50% 的设定电流
  25.             hc595Write(data_595);     // 把数据写入到HC595 // 数据更改后,菲律賓的賭場好嗎:必须要调用hc595Write(data_595)来刷新输出
  26.             delay(2000);              // 半流锁相2秒左右 // 方便观察电源端电流的变化
  27.             TQ_LOW;                   // 输出电流为设定值的 100%  // 恢复设定电流输出
  28.             hc595Write(data_595);     // 把数据写入到HC595
  29.         //digitalWrite(RUN_ON,LOW); //  开启LED指示灯                         // 1a
  30.         }
  31.         else
  32.         {
  33.             a=0x01;
  34.             digitalWrite(EN,LOW);     // 非必要操作 // EN端清零,关闭TB5128功率级 //会影响电机锁相,进入脱机状态
  35.             digitalWrite(DIR,LOW);    // 切换电机转动方向
  36.             delayMicroseconds(5);     // 改变方向后,延时一段时间再发脉冲
  37.             digitalWrite(EN,HIGH);    // Set Enable HIGH  // 开启TB5128功率输出  // *   
  38.         //digitalWrite(RUN_ON,HIGH); // 关闭LED指示灯                          // 1a  
  39.             TQ_HIGH;                  // 50% 的设定电流
  40.             hc595Write(data_595);     // 把数据写入到HC595
  41.             delay(2000);              // 半流锁相2秒左右 // 方便观察电源端电流的变化
  42.             TQ_LOW;                   // 输出电流为设定值的 100%  // 恢复设定电流输出
  43.             hc595Write(data_595);     // 把数据写入到HC595   
  44.         //digitalWrite(RUN_ON,LOW); //  开启LED指示灯                          // 1a
  45.         }
  46.     }   
  47. }
复制代码


地板
| 2019-10-8 00:02 | 只看该作者
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

关闭

菲律賓的賭場好嗎: 热门推荐

永利游戏开户直营 快速回复 返回顶部 返回列表
澳门八佰伴免税吗网上娱乐场 ttVR赛车走势 永利游戏开户直营 如意棋牌优惠 澳门威尼斯网投
洗钱到新锦海娱乐网上娱乐场 乐发国际娱乐 浙江地下赌场 马会英雄联盟论坛 2015新黄金城
www.msc88.com网上娱乐场 菲律宾申博2900.cc手机客户端下载网上娱乐场 澳门大赌场图片 菲律宾申博太阳城总代理现金网 澳门 旅行攻略
ag环亚娱乐 菲律宾申博太阳城现场游戏 银河娱乐官网备用网址登入 沙龙sa36好瘦 菲律宾申博太阳城返水手机客户端下载网上娱乐场