CC2530控制步进电机正反转,调试通过。
分别下载程序到任意一节点连接电机如图所示,观察电机运行情况,可以修改
ucSpeed 调整速度哦,代码分析请看程序中的注释。
单片机源程序如下:
- /****************************************************************************
- * 文 件 名: main.c
- * 作 者: Andy
- * 修 订: 2016-03-27
- * 版 本: 2.0
- * 描 述: 用P04 05 06 07控制步进电机
- ****************************************************************************/
- #include <ioCC2530.h>
- typedef unsigned char uchar;
- typedef unsigned int uint;
- #define A1 P0_4 //定义步进电机连接端口
- #define B1 P0_5
- #define C1 P0_6
- #define D1 P0_7
- //改变这个参数可以调整电机转速,数字越小,转速越快,力矩越小
- uchar ucSpeed = 2; //调整速度 建议在1-10范围内
- uchar FFW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xc0,0x80};//正转旋转相序表
- uchar REV[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};//反向旋转相序表
- void MotorData(uchar data)
- {
- A1 = 1&(data>>4);
- B1 = 1&(data>>5);
- C1 = 1&(data>>6);
- D1 = 1&(data>>7);
- }
- //ms延时函数
- void Delay_ms(uint x)
- {
- uint i,j;
- for(i=0;i<x;i++)
- for(j=0;j<535;j++);
- }
- //顺时针转动
- void MotorFFW(float n)
- {
- unsigned char i;
- unsigned int j;
- int movie_count=(int)(8*64*n);
- for (j=0; j<movie_count; j++)
- {
- for (i=0; i<8; i++)
- {
- MotorData( FFW[i]);//P0 = FFW[i];
- Delay_ms(ucSpeed);
- }
- }
- }
- //逆时针转动
- void MotorREV(float n)
- {
- unsigned char i;
- unsigned int j;
-
- int movie_count=(int)(8*64*n);
- for (j=0; j<movie_count; j++)
- {
- for (i=0; i<8; i++)
- {
- MotorData(REV[i]);
- Delay_ms(ucSpeed);
- }
- }
- }
- /****************************************************************************
- * 名 称: InitIO()
- * 功 能: 初始化IO口程序
- * 入口参数: state=0正转 1反转
- ****************************************************************************/
- void ContrlStepMotor(int state, float count)
- {
- if(state == 0)
- {
- MotorFFW(count);
- }
- else
- {
- MotorREV(count);
- }
- }
- /****************************************************************************
- * 名 称: InitIO()
- * 功 能: 初始化IO口程序
- * 入口参数: 无
- * 出口参数: 无
- ****************************************************************************/
- void InitIO(void)
- {
- P0SEL &= 0x0F; //P04 05 06 07定义为普通IO
- P0DIR |= 0xF0; //P04 05 06 07定义为输出
- }
- /****************************************************************************
- * 程序入口函数
- ****************************************************************************/
- void main(void)
- {
- InitIO();
-
- //改变这个参数可以调整电机转速,数字越小,转速越快,力矩越小
- ucSpeed = 1; //调整速度建议在1-10范围内,数字越小转速越快力矩越小
-
- while(1)
- {
- ContrlStepMotor(0, 1);//正转1圈
- Delay_ms(3000);
-
- ContrlStepMotor(1, 1);//反转1圈
- Delay_ms(3000);
- }
-
- }
复制代码
所有资料51hei提供下载:
30.控制步进电机正反转.rar
(577.05 KB, 下载次数: 51)
|