极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: hi55234

菜鸟玩步进电机 与 TB6560 驱动频率的测试

[复制链接]
 楼主| 发表于 2015-2-18 12:51:19 | 显示全部楼层
为了控制的迁移,串口控制是必须的:

当然,还是有待完善的地方,那就是对于串口字符串的检验


捕获1.PNG



  1. /*
  2. djc3 无极调速 + 串口控制
  3. 规定Pin4口为一个判断点,
  4. 低电平则为串口控制,高电平为按键控制


  5. */


  6. //电机的高电平持续时间 us
  7. int maichongjiangeMax=1260;
  8. int maichongjiangeMin=120;
  9. long maichongjiangeSet;

  10. //电机的高电平持续时间的初始值 0us
  11. int maichongjiange=250;

  12. //脉冲的占空比为1/maichongzhankongbi
  13. int maichongzhankongbi=4;

  14. //加减速时速度每隔300us变化一次
  15. int jiajiansubianhuashijian=300;


  16. ////////////////////////////////////////////
  17. int kongzhifangshi;//控制方式,低电平则为串口控制,高电平为按键控制
  18. int jsq1=0;
  19. char kongzhimingling[4];
  20. boolean testxinxi=0;

  21. int Pinval;//存储IO口(Pin5、Pin6)高低电平的值

  22. boolean fangxiang=0;//电机转动方向标识
  23. int maichongjsq=0;//脉冲计数器


  24. unsigned long time1=micros();
  25. unsigned long time2=micros();


  26. void setup(){

  27. Serial.begin(9600);

  28. //pin5(High pin8 输出 LOW 默认)、pin6(High pin8 输出 High 方向) 输入状态,就读取值来确定电机的转动方向
  29. pinMode(5, INPUT);  
  30. pinMode(6, INPUT);  

  31. /*
  32. 暂定A0 analogRead(0)的值来确定转速
  33. 为方便演示,此处为使用1K 多圈精密可调电阻,A0就接在中间脚上
  34. 那么可见,其电压大致为0-5v之间,现在就电压区间进行分级
  35. 如果粗分为10档,就意味着每100个返回单位对应10%的速度
  36. */

  37. pinMode(7, OUTPUT);// EN+,脱机,高电平有效
  38. pinMode(8, OUTPUT);// CW+,方向
  39. pinMode(9, OUTPUT);// CLK+,频率(转速)

  40. digitalWrite(7, LOW);//电机默认联机
  41. digitalWrite(8, LOW);//
  42. digitalWrite(9, LOW);
  43. }


  44. void loop(){

  45. kongzhifangshi = digitalRead(4);

  46. if(kongzhifangshi==1){

  47. //转速调节,通过可变电阻实现无极调速

  48.   //可能是读取过于频繁,导致夹杂着无效数值,所以此处做个循环
  49.   do
  50.   {
  51. maichongjiangeSet = analogRead(0);//0-1023
  52. }while(maichongjiangeSet >1024);

  53. // 25% us =1000,000/(圈/每秒*400*4)=625/(0.5【min】+4.5×analogRead(0)/1024)
  54. //即把电压线性到转速上
  55.   maichongjiangeSet = 625/(0.5+4.5*maichongjiangeSet/1024);//0-1023

  56. fangxiangchange(); //转动方向的切换

  57. }else{

  58.        
  59.           while (Serial.available() > 0) {
  60.                   
  61.                   //格式:方向(1位),速度百分比(2位) 如012
  62.         kongzhimingling[jsq1]= Serial.read();
  63.        
  64.        
  65. delayMicroseconds(1200);
  66. jsq1++;
  67. if(jsq1==3) jsq1=0;

  68. testxinxi=1;
  69.   }
  70.   
  71.   if(testxinxi){
  72.           testxinxi=0;
  73.           jsq1=0;
  74.           Serial.print("get:");
  75.       Serial.println(kongzhimingling);  
  76.           //速度调节

  77.           
  78.           maichongjiangeSet = 625/(0.5+4.5*((kongzhimingling[1]-48)*10+kongzhimingling[2]-48)/100);//0-1023
  79.           
  80.           Serial.print("maichongjiangeSet:");
  81.       Serial.println(maichongjiangeSet);  
  82.           
  83.           //方向调节
  84.           
  85.                 if(kongzhimingling[0]-48 != fangxiang){ //有效高电平且现在电机转速与设置相反

  86.                           Serial.print("bian");

  87.           
  88.                 //1、把速度降到最低
  89.                 while(maichongjiange<maichongjiangeMax){
  90.                 jiansu();
  91.                 maichongqudong();
  92.                 }
  93.                
  94.                 Serial.println("jiansuOK");
  95.                
  96.                 //2、记录新的方向
  97.                 fangxiang=!fangxiang;
  98.                
  99.                 //3、反方向
  100.                 digitalWrite(8, fangxiang);

  101.                 //4、在把速度加到原来值
  102.                 while(maichongjiange<maichongjiangeSet){
  103.                 jiasu();
  104.                 maichongqudong();
  105.                 }
  106.                
  107.                 Serial.println("jiasuOK");

  108.                 }else  Serial.print("baochi");

  109.   
  110.         }


  111.        
  112.        
  113. }



  114. //加速过程
  115. while(maichongjiange>maichongjiangeSet){
  116.   jiasu();
  117.   maichongqudong();
  118.   }

  119.   //加减过程
  120. while(maichongjiange<maichongjiangeSet){
  121.   jiansu();
  122.   maichongqudong();
  123.   }

  124. //在脉冲频率无变化的时候驱动电机正常运行
  125. maichongqudong();





  126. }






  127. void jiasu() //脉冲加速过程
  128. {

  129. if(micros()-time1>jiajiansubianhuashijian && maichongjiange>maichongjiangeMin){//加速过程,xxx us加速一次,加速到 yyy为止
  130. maichongjiange--;
  131. time1=micros();
  132. }

  133. }

  134. void jiansu()//脉冲减速过程
  135. {

  136. if(micros()-time1>jiajiansubianhuashijian && maichongjiange<maichongjiangeMax){
  137. maichongjiange++;
  138. time1=micros();
  139. }

  140. }


  141. void maichongqudong()//脉冲驱动
  142. {



  143. //步进电机控制脉冲
  144. if (micros()-time2 > maichongjiange){

  145.         maichongjsq++;//每过一个“脉冲间隔”时间段,则“脉冲计数器”自增1
  146.         maichongjsq=maichongjsq%maichongzhankongbi;//对“脉冲计数器”取模,这个取摸结果实质就是对占空比的调节(占空比为1/模),以4为例,则“脉冲计数器”的变化为:0——1——2——3——0

  147.         if(maichongjsq==0)digitalWrite(9, HIGH);//输出控制步进电机的电平
  148.         else digitalWrite(9, LOW);

  149.      time2= micros();
  150. }

  151. }


  152. void fangxiangchange() //转动方向的切换
  153. {



  154.   //关于反向,虽然直接对引脚进行控制也是可以的,但加入一个,减速——取反——加速的过程应该更好
  155. /*本例中,
  156. pin7, EN+,脱机,高电平有效
  157. pin8, CW+,方向
  158. pin9, CLK+,频率(转速)
  159. 已经用掉了,假设加减速、方向都由外部控制,那么很显然,就会出现2种控制方式:
  160. A、模拟方式,即通过测量2个点电阻变化所导致的分压变化,即可实现强弱、方向的调节,具体类似于ACS712的读取,此方式可以类似于“无级变速”
  161. B、数字方式,即通过摇杆或4个微动开关,来分别实现加减速、方向的切换

  162. 就实际操作而言,速度上测电阻分压,方向上用微动开关比较合适,即用2个数字口+1个PWM口实现具体控制
  163. */

  164. Pinval = digitalRead(5);  //pin5(High pin8 输出 LOW 默认)、pin6(High pin8 输出 High 方向)

  165. if(Pinval==1 && fangxiang){ //有效高电平且现在电机转速与设置相反

  166. //1、把速度降到最低
  167. while(maichongjiange<maichongjiangeMax){
  168. jiansu();
  169. maichongqudong();
  170.     }
  171. //2、反方向
  172. digitalWrite(8, LOW);
  173. //3、记录新的方向
  174. fangxiang=0;
  175. //4、在把速度加到原来值
  176. while(maichongjiange<maichongjiangeSet){
  177. jiasu();
  178. maichongqudong();
  179.     }

  180. }

  181. Pinval = digitalRead(6);  //pin5(High pin8 输出 LOW 默认)、pin6(High pin8 输出 High 方向)

  182. if(Pinval==1 && !fangxiang){ //有效高电平且现在电机转速与设置相反

  183. //1、把速度降到最低
  184. while(maichongjiange<maichongjiangeMax){
  185. jiansu();
  186. maichongqudong();
  187.     }
  188. //2、反方向
  189. digitalWrite(8, HIGH);
  190. //3、记录新的方向
  191. fangxiang=1;
  192. //4、在把速度加到原来值
  193. while(maichongjiange<maichongjiangeSet){
  194. jiasu();
  195. maichongqudong();
  196.     }

  197. }




  198. }

复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-18 14:06:09 | 显示全部楼层
  1. /*
  2. djc3 无极调速 + 串口控制
  3. 规定Pin4口为一个判断点,
  4. 低电平则为串口控制,高电平为按键控制
  5. 对串口的输入做限制,必须为数字

  6. */


  7. //电机的高电平持续时间 us
  8. int maichongjiangeMax=1260;
  9. int maichongjiangeMin=120;
  10. long maichongjiangeSet;

  11. //电机的高电平持续时间的初始值 0us
  12. int maichongjiange=0;

  13. //脉冲的占空比为1/maichongzhankongbi
  14. int maichongzhankongbi=4;

  15. //加减速时速度每隔300us变化一次
  16. int jiajiansubianhuashijian=300;


  17. ////////////////////////////////////////////
  18. int kongzhifangshi;//控制方式,低电平则为串口控制,高电平为按键控制
  19. int jsq1=0;
  20. int tempint;
  21. char kongzhimingling[4];
  22. boolean testxinxi=0;

  23. int Pinval;//存储IO口(Pin5、Pin6)高低电平的值

  24. boolean fangxiang=0;//电机转动方向标识
  25. int maichongjsq=0;//脉冲计数器


  26. unsigned long time1=micros();
  27. unsigned long time2=micros();


  28. void setup(){

  29. Serial.begin(9600);

  30. //pin5(High pin8 输出 LOW 默认)、pin6(High pin8 输出 High 方向) 输入状态,就读取值来确定电机的转动方向
  31. pinMode(5, INPUT);  
  32. pinMode(6, INPUT);  

  33. /*
  34. 暂定A0 analogRead(0)的值来确定转速
  35. 为方便演示,此处为使用1K 多圈精密可调电阻,A0就接在中间脚上
  36. 那么可见,其电压大致为0-5v之间,现在就电压区间进行分级
  37. 如果粗分为10档,就意味着每100个返回单位对应10%的速度
  38. */

  39. pinMode(7, OUTPUT);// EN+,脱机,高电平有效
  40. pinMode(8, OUTPUT);// CW+,方向
  41. pinMode(9, OUTPUT);// CLK+,频率(转速)

  42. digitalWrite(7, LOW);//电机默认联机
  43. digitalWrite(8, LOW);//
  44. digitalWrite(9, LOW);
  45. }


  46. void loop(){

  47. kongzhifangshi = digitalRead(4);

  48. if(kongzhifangshi==1){

  49. //转速调节,通过可变电阻实现无极调速

  50.   //可能是读取过于频繁,导致夹杂着无效数值,所以此处做个循环
  51.   do
  52.   {
  53. maichongjiangeSet = analogRead(0);//0-1023
  54. }while(maichongjiangeSet >1024);

  55. // 25% us =1000,000/(圈/每秒*400*4)=625/(0.5【min】+4.5×analogRead(0)/1024)
  56. //即把电压线性到转速上
  57.   maichongjiangeSet = 625/(0.5+4.5*maichongjiangeSet/1024);//0-1023

  58. fangxiangchange(); //转动方向的切换

  59. }else{


  60.    while (Serial.available() > 0) {
  61.    
  62.     //格式:方向(1位),速度百分比(2位) 如012
  63. //kongzhimingling[jsq1]= Serial.read();
  64. if(jsq1==0){         
  65.   tempint=Serial.read();
  66.   if(tempint==48 || tempint==49)kongzhimingling[0]= tempint;         
  67. }else{
  68.   tempint=Serial.read();
  69.   if(tempint>47 && tempint<58)kongzhimingling[jsq1]= tempint;       
  70.   
  71. }

  72. delayMicroseconds(1200);
  73. jsq1++;
  74. if(jsq1==3) jsq1=0;

  75. testxinxi=1;
  76.   }
  77.   
  78.   if(testxinxi){
  79.    testxinxi=0;
  80.    jsq1=0;
  81.    Serial.print("get:");
  82.       Serial.println(kongzhimingling);  
  83.    //速度调节

  84.    
  85.    maichongjiangeSet = 625/(0.5+4.5*((kongzhimingling[1]-48)*10+kongzhimingling[2]-48)/100);//0-1023
  86.    
  87.    Serial.print("maichongjiangeSet:");
  88.       Serial.println(maichongjiangeSet);  
  89.    
  90.    //方向调节
  91.    
  92.   if(kongzhimingling[0]-48 != fangxiang){ //有效高电平且现在电机转速与设置相反

  93.      Serial.print("bian");

  94.    
  95.   //1、把速度降到最低
  96.   while(maichongjiange<maichongjiangeMax){
  97.   jiansu();
  98.   maichongqudong();
  99.   }
  100.   
  101.   Serial.println("jiansuOK");
  102.   
  103.   //2、记录新的方向
  104.   fangxiang=!fangxiang;
  105.   
  106.   //3、反方向
  107.   digitalWrite(8, fangxiang);

  108.   //4、在把速度加到原来值
  109.   while(maichongjiange<maichongjiangeSet){
  110.   jiasu();
  111.   maichongqudong();
  112.   }
  113.   
  114.   Serial.println("jiasuOK");

  115.   }else  Serial.print("baochi");

  116.   
  117. }




  118. }



  119. //加速过程
  120. while(maichongjiange>maichongjiangeSet){
  121.   jiasu();
  122.   maichongqudong();
  123.   }

  124.   //加减过程
  125. while(maichongjiange<maichongjiangeSet){
  126.   jiansu();
  127.   maichongqudong();
  128.   }

  129. //在脉冲频率无变化的时候驱动电机正常运行
  130. maichongqudong();





  131. }






  132. void jiasu() //脉冲加速过程
  133. {

  134. if(micros()-time1>jiajiansubianhuashijian && maichongjiange>maichongjiangeMin){//加速过程,xxx us加速一次,加速到 yyy为止
  135. maichongjiange--;
  136. time1=micros();
  137. }

  138. }

  139. void jiansu()//脉冲减速过程
  140. {

  141. if(micros()-time1>jiajiansubianhuashijian && maichongjiange<maichongjiangeMax){
  142. maichongjiange++;
  143. time1=micros();
  144. }

  145. }


  146. void maichongqudong()//脉冲驱动
  147. {



  148. //步进电机控制脉冲
  149. if (micros()-time2 > maichongjiange){

  150.         maichongjsq++;//每过一个“脉冲间隔”时间段,则“脉冲计数器”自增1
  151.         maichongjsq=maichongjsq%maichongzhankongbi;//对“脉冲计数器”取模,这个取摸结果实质就是对占空比的调节(占空比为1/模),以4为例,则“脉冲计数器”的变化为:0——1——2——3——0

  152.         if(maichongjsq==0)digitalWrite(9, HIGH);//输出控制步进电机的电平
  153.         else digitalWrite(9, LOW);

  154.      time2= micros();
  155. }

  156. }


  157. void fangxiangchange() //转动方向的切换
  158. {



  159.   //关于反向,虽然直接对引脚进行控制也是可以的,但加入一个,减速——取反——加速的过程应该更好
  160. /*本例中,
  161. pin7, EN+,脱机,高电平有效
  162. pin8, CW+,方向
  163. pin9, CLK+,频率(转速)
  164. 已经用掉了,假设加减速、方向都由外部控制,那么很显然,就会出现2种控制方式:
  165. A、模拟方式,即通过测量2个点电阻变化所导致的分压变化,即可实现强弱、方向的调节,具体类似于ACS712的读取,此方式可以类似于“无级变速”
  166. B、数字方式,即通过摇杆或4个微动开关,来分别实现加减速、方向的切换

  167. 就实际操作而言,速度上测电阻分压,方向上用微动开关比较合适,即用2个数字口+1个PWM口实现具体控制
  168. */

  169. Pinval = digitalRead(5);  //pin5(High pin8 输出 LOW 默认)、pin6(High pin8 输出 High 方向)

  170. if(Pinval==1 && fangxiang){ //有效高电平且现在电机转速与设置相反

  171. //1、把速度降到最低
  172. while(maichongjiange<maichongjiangeMax){
  173. jiansu();
  174. maichongqudong();
  175.     }
  176. //2、反方向
  177. digitalWrite(8, LOW);
  178. //3、记录新的方向
  179. fangxiang=0;
  180. //4、在把速度加到原来值
  181. while(maichongjiange<maichongjiangeSet){
  182. jiasu();
  183. maichongqudong();
  184.     }

  185. }

  186. Pinval = digitalRead(6);  //pin5(High pin8 输出 LOW 默认)、pin6(High pin8 输出 High 方向)

  187. if(Pinval==1 && !fangxiang){ //有效高电平且现在电机转速与设置相反

  188. //1、把速度降到最低
  189. while(maichongjiange<maichongjiangeMax){
  190. jiansu();
  191. maichongqudong();
  192.     }
  193. //2、反方向
  194. digitalWrite(8, HIGH);
  195. //3、记录新的方向
  196. fangxiang=1;
  197. //4、在把速度加到原来值
  198. while(maichongjiange<maichongjiangeSet){
  199. jiasu();
  200. maichongqudong();
  201.     }

  202. }




  203. }

复制代码
回复 支持 反对

使用道具 举报

发表于 2015-2-19 12:35:55 | 显示全部楼层
好多代码..........
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-19 14:41:26 | 显示全部楼层
本帖最后由 hi55234 于 2015-2-19 14:49 编辑



TNND 土豆的流畅完全不能看,算了@百度盘,原始视频

http://pan.baidu.com/s/1kTHv6T5


步进电机的控制   蓝牙.3gp_20150219_144830.757.jpg
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-25 15:12:26 | 显示全部楼层

丧心病狂的单字节控制,0延迟,纯ASCII分拆

  1. /*
  2. 纯串口控制
  3.   加入脱机控制
  4. */


  5. //电机的高电平持续时间 us
  6. int maichongjiangeMax=1260;
  7. int maichongjiangeMin=120;
  8. long maichongjiangeSet=600;

  9. //电机的高电平持续时间的初始值 120us
  10. int maichongjiange=120;

  11. //脉冲的占空比为1/maichongzhankongbi
  12. int maichongzhankongbi=4;

  13. //加减速时速度每隔300us变化一次
  14. int jiajiansubianhuashijian=300;


  15. ////////////////////////////////////////////

  16. int tempint;

  17. boolean fangxiang=0;//电机转动方向标识
  18. int maichongjsq=0;//脉冲计数器


  19. unsigned long time1=micros();
  20. unsigned long time2=micros();


  21. void setup(){

  22. Serial.begin(9600);
  23.   
  24. pinMode(7, OUTPUT);// EN+,脱机,高电平有效
  25. pinMode(8, OUTPUT);// CW+,方向
  26. pinMode(9, OUTPUT);// CLK+,频率(转速)

  27. digitalWrite(7, HIGH);//电机默认脱机
  28. digitalWrite(8, LOW);//
  29. digitalWrite(9, LOW);

  30. }


  31. void loop(){




  32.    while (Serial.available() > 0) {

  33.     //丧心病狂的单字节控制,0延迟,纯ASCII分拆
  34.         //定义1 0-9表示转速,每一个表示10%
  35.         //定义2 A正转、B反转
  36.         //定义3 C联机、D脱机
  37.         
  38.    tempint=Serial.read();
  39.    
  40.    //调速度
  41.    if(tempint>47 && tempint< 58) maichongjiangeSet = 625/(0.5+4.5*(tempint-48)/10);//0-1023
  42.    //调方向
  43.    if(tempint==65)digitalWrite(8, 0);
  44.    if(tempint==66)digitalWrite(8, 1);
  45.     //脱机
  46.    if(tempint==67)digitalWrite(7, 0);
  47.    if(tempint==68)digitalWrite(7, 1);
  48.    
  49.    tempint=0;

  50. }






  51. //加速过程
  52. while(maichongjiange>maichongjiangeSet){
  53.   jiasu();
  54.   maichongqudong();
  55.   }

  56.   //加减过程
  57. while(maichongjiange<maichongjiangeSet){
  58.   jiansu();
  59.   maichongqudong();
  60.   }

  61. //在脉冲频率无变化的时候驱动电机正常运行
  62. maichongqudong();





  63. }






  64. void jiasu() //脉冲加速过程
  65. {

  66. if(micros()-time1>jiajiansubianhuashijian && maichongjiange>maichongjiangeMin){//加速过程,xxx us加速一次,加速到 yyy为止
  67. maichongjiange--;
  68. time1=micros();
  69. }

  70. }

  71. void jiansu()//脉冲减速过程
  72. {

  73. if(micros()-time1>jiajiansubianhuashijian && maichongjiange<maichongjiangeMax){
  74. maichongjiange++;
  75. time1=micros();
  76. }

  77. }


  78. void maichongqudong()//脉冲驱动
  79. {



  80. //步进电机控制脉冲
  81. if (micros()-time2 > maichongjiange){

  82.         maichongjsq++;//每过一个“脉冲间隔”时间段,则“脉冲计数器”自增1
  83.         maichongjsq=maichongjsq%maichongzhankongbi;//对“脉冲计数器”取模,这个取摸结果实质就是对占空比的调节(占空比为1/模),以4为例,则“脉冲计数器”的变化为:0——1——2——3——0

  84.         if(maichongjsq==0)digitalWrite(9, HIGH);//输出控制步进电机的电平
  85.         else digitalWrite(9, LOW);

  86.      time2= micros();
  87. }

  88. }


复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-25 19:04:08 | 显示全部楼层
  1. /*
  2. 纯串口控制
  3.   加入脱机控制
  4. */


  5. //电机的高电平持续时间 us
  6. int maichongjiangeMax=357;
  7. int maichongjiangeMin=120;

  8. //电机的高电平持续时间的初始值 357us,1.75圈/S

  9. int maichongjiange=357;

  10. //脉冲的占空比为1/maichongzhankongbi
  11. int maichongzhankongbi=4;

  12. ////////////////////////////////////////////

  13. int tempint;
  14. int maichongjsq=0;//脉冲计数器


  15. unsigned long time2=micros();


  16. void setup(){

  17. Serial.begin(9600);

  18. pinMode(7, OUTPUT);// EN+,脱机,高电平有效
  19. pinMode(8, OUTPUT);// CW+,方向
  20. pinMode(9, OUTPUT);// CLK+,频率(转速)

  21. digitalWrite(7, HIGH);//电机默认脱机
  22. digitalWrite(8, LOW);//
  23. digitalWrite(9, LOW);

  24. }


  25. void loop(){




  26.    while (Serial.available() > 0) {

  27.     //丧心病狂的单字节控制,0延迟,纯ASCII分拆
  28.         //定义1 0-9表示转速,每一个表示10%
  29.         //定义2 A正转、B反转
  30.         //定义3 C联机、D脱机

  31.    tempint=Serial.read();

  32.    //调速度
  33.    if(tempint>47 && tempint< 58) maichongjiange = 625/(1.75+3.25*(tempint-48)/10);//0-1023
  34.    //调方向
  35.    else if(tempint==65)digitalWrite(8, 0);
  36.    else if(tempint==66)digitalWrite(8, 1);
  37.     //脱机
  38.    else if(tempint==67)digitalWrite(7, 0);
  39.    else if(tempint==68)digitalWrite(7, 1);

  40. //E jiansu   F jiasu
  41.    else if(tempint==69){
  42.            maichongjiange=maichongjiange+10;
  43.            if(maichongjiange>maichongjiangeMax)maichongjiange=maichongjiangeMax;
  44.    }
  45.    else if(tempint==70){
  46.            maichongjiange=maichongjiange-10;
  47.            if(maichongjiange<maichongjiangeMin)maichongjiange=maichongjiangeMin;
  48.    }
  49.    
  50.    
  51.   
  52.   
  53.   
  54.    //Serial.println(maichongjiange);
  55.    
  56.    tempint=0;

  57. }

  58.   
  59. //在脉冲频率无变化的时候驱动电机正常运行
  60. maichongqudong();


  61. }



  62. void maichongqudong()//脉冲驱动
  63. {



  64. //步进电机控制脉冲
  65. if (micros()-time2 > maichongjiange){

  66.         maichongjsq++;//每过一个“脉冲间隔”时间段,则“脉冲计数器”自增1
  67.         maichongjsq=maichongjsq%maichongzhankongbi;//对“脉冲计数器”取模,这个取摸结果实质就是对占空比的调节(占空比为1/模),以4为例,则“脉冲计数器”的变化为:0——1——2——3——0

  68.         if(maichongjsq==0)digitalWrite(9, HIGH);//输出控制步进电机的电平
  69.         else digitalWrite(9, LOW);

  70.      time2= micros();
  71. }

  72. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2015-3-2 14:56:10 | 显示全部楼层
TB6560和L298有什么区别吗?
回复 支持 反对

使用道具 举报

发表于 2015-5-9 20:04:57 | 显示全部楼层
说好的6560最后怎么变了。
回复 支持 反对

使用道具 举报

发表于 2015-6-16 11:10:35 | 显示全部楼层
请教6560衰减设置如何设定,看了英文资料没有看懂。
回复 支持 反对

使用道具 举报

发表于 2015-8-1 16:00:07 | 显示全部楼层
请问占空比大小会影响步进电机什么?
周期是影响他的速度对吧??
回复 支持 反对

使用道具 举报

发表于 2015-9-2 13:43:53 | 显示全部楼层
楼主研究的太细致了,留着学习了
回复 支持 反对

使用道具 举报

发表于 2015-10-19 20:43:05 | 显示全部楼层
楼主  能不能写51单片机程序呢  
回复 支持 反对

使用道具 举报

发表于 2015-11-8 22:57:57 | 显示全部楼层
感觉很牛,步进电机我还不是很会。。。
回复 支持 反对

使用道具 举报

发表于 2016-4-4 11:22:18 | 显示全部楼层
hi55234 发表于 2015-2-25 15:12
/*
纯串口控制
  加入脱机控制

你好,可以把你演示视频的程序和接线图详细资料分享一下吗?邮箱:376624279@qq.com
回复 支持 反对

使用道具 举报

发表于 2016-6-28 16:55:27 | 显示全部楼层
我学搞同步电机,可以把你演示视频的程序和接线图详细资料分享一下吗?谢谢!邮箱:xuenyi0513@163.com
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

GMT+8, 2018-6-21 03:03 , Processed in 0.075770 second(s), 8 queries , File On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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