找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 7453|回復(fù): 2
收起左側(cè)

CC2530控制步進(jìn)電機(jī)正反轉(zhuǎn)的源碼,調(diào)試通過

[復(fù)制鏈接]
ID:293181 發(fā)表于 2018-3-17 15:58 | 顯示全部樓層 |閱讀模式
CC2530控制步進(jìn)電機(jī)正反轉(zhuǎn),調(diào)試通過。
0.jpg
分別下載程序到任意一節(jié)點(diǎn)連接電機(jī)如圖所示,觀察電機(jī)運(yùn)行情況,可以修改
ucSpeed 調(diào)整速度哦,代碼分析請(qǐng)看程序中的注釋。

單片機(jī)源程序如下:
  1. /****************************************************************************
  2. * 文 件 名: main.c
  3. * 作    者: Andy
  4. * 修    訂: 2016-03-27
  5. * 版    本: 2.0
  6. * 描    述: 用P04 05 06 07控制步進(jìn)電機(jī)
  7. ****************************************************************************/
  8. #include <ioCC2530.h>

  9. typedef unsigned char uchar;
  10. typedef unsigned int  uint;


  11. #define A1 P0_4 //定義步進(jìn)電機(jī)連接端口
  12. #define B1 P0_5
  13. #define C1 P0_6
  14. #define D1 P0_7

  15. //改變這個(gè)參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速,數(shù)字越小,轉(zhuǎn)速越快,力矩越小
  16. uchar ucSpeed = 2; //調(diào)整速度 建議在1-10范圍內(nèi)
  17. uchar FFW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};//正轉(zhuǎn)旋轉(zhuǎn)相序表
  18. uchar REV[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};//反向旋轉(zhuǎn)相序表

  19. void MotorData(uchar data)
  20. {
  21.   A1 = 1&(data>>4);
  22.   B1 = 1&(data>>5);
  23.   C1 = 1&(data>>6);
  24.   D1 = 1&(data>>7);
  25. }

  26. //ms延時(shí)函數(shù)
  27. void Delay_ms(uint x)
  28. {
  29.   uint i,j;
  30.   for(i=0;i<x;i++)
  31.     for(j=0;j<535;j++);
  32. }

  33. //順時(shí)針轉(zhuǎn)動(dòng)
  34. void MotorFFW(float n)
  35. {
  36.   unsigned char i;
  37.   unsigned int j;
  38.   int movie_count=(int)(8*64*n);
  39.   for (j=0; j<movie_count; j++)
  40.   {
  41.     for (i=0; i<8; i++)
  42.     {
  43.       MotorData( FFW[i]);//P0 = FFW[i];
  44.       Delay_ms(ucSpeed);
  45.     }
  46.   }
  47. }

  48. //逆時(shí)針轉(zhuǎn)動(dòng)
  49. void MotorREV(float n)
  50. {
  51.   unsigned char i;
  52.   unsigned int j;
  53.   
  54.   int movie_count=(int)(8*64*n);
  55.   for (j=0; j<movie_count; j++)
  56.   {
  57.     for (i=0; i<8; i++)
  58.     {
  59.       MotorData(REV[i]);
  60.       Delay_ms(ucSpeed);
  61.     }
  62.   }
  63. }

  64. /****************************************************************************
  65. * 名    稱: InitIO()
  66. * 功    能: 初始化IO口程序
  67. * 入口參數(shù): state=0正轉(zhuǎn)    1反轉(zhuǎn)
  68. ****************************************************************************/
  69. void ContrlStepMotor(int state, float count)
  70. {
  71.   if(state == 0)
  72.   {
  73.     MotorFFW(count);
  74.   }
  75.   else
  76.   {
  77.     MotorREV(count);
  78.   }
  79. }

  80. /****************************************************************************
  81. * 名    稱: InitIO()
  82. * 功    能: 初始化IO口程序
  83. * 入口參數(shù): 無
  84. * 出口參數(shù): 無
  85. ****************************************************************************/
  86. void InitIO(void)
  87. {
  88.   P0SEL &= 0x0F;  //P04 05 06 07定義為普通IO
  89.   P0DIR |= 0xF0;  //P04 05 06 07定義為輸出
  90. }

  91. /****************************************************************************
  92. * 程序入口函數(shù)
  93. ****************************************************************************/
  94. void main(void)
  95. {
  96.   InitIO();
  97.   
  98.   //改變這個(gè)參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速,數(shù)字越小,轉(zhuǎn)速越快,力矩越小
  99.   ucSpeed = 1;    //調(diào)整速度建議在1-10范圍內(nèi),數(shù)字越小轉(zhuǎn)速越快力矩越小
  100.   
  101.   while(1)
  102.   {
  103.     ContrlStepMotor(0, 1);//正轉(zhuǎn)1圈
  104.     Delay_ms(3000);
  105.    
  106.     ContrlStepMotor(1, 1);//反轉(zhuǎn)1圈
  107.     Delay_ms(3000);  
  108.   }
  109.   
  110. }
復(fù)制代碼

所有資料51hei提供下載:
30.控制步進(jìn)電機(jī)正反轉(zhuǎn).rar (577.05 KB, 下載次數(shù): 51)


回復(fù)

使用道具 舉報(bào)

ID:293181 發(fā)表于 2018-3-17 15:58 | 顯示全部樓層
該例程調(diào)試覺得通過可用。
回復(fù)

使用道具 舉報(bào)

ID:796974 發(fā)表于 2021-7-19 16:09 | 顯示全部樓層
想問下樓主,步進(jìn)電機(jī)和驅(qū)動(dòng)在哪里獲取的?還有鏈接嗎?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表