智能家居电机控制

sMotorHandle gs_MotorHandle =

{

0,

};

void Moto_Init( void )

{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(ULN2003_SYSCTL_PERIPH_CLK, ENABLE);

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Pin = A_PHASE_PIN;

GPIO_Init(A_PHASE_PORT, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = B_PHASE_PIN;

GPIO_Init(B_PHASE_PORT, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = C_PHASE_PIN;

GPIO_Init(C_PHASE_PORT, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = D_PHASE_PIN;

GPIO_Init(D_PHASE_PORT, &GPIO_InitStructure);

ULN2003_ResetAllPhase( );

}

/**

* @name ULN2003_ResetAllPhase

* @brief 复位A、B、C、D(相位)

* @param[in] void

* @return void

*/

void ULN2003_ResetAllPhase ( void )

{

A_PHASE_RESET;

B_PHASE_RESET;

C_PHASE_RESET;

D_PHASE_RESET;

}

static u8 i = 0;

/**

* @name Motorcw

* @brief 电机正转

* @param[in] void

* @return void

*/

void Motorcw( void )

{

switch ( i++ )

{

case 0: //A

A_PHASE_SET;B_PHASE_RESET;C_PHASE_RESET;D_PHASE_RESET;

break;

case 1: //AB

A_PHASE_SET;B_PHASE_SET;C_PHASE_RESET;D_PHASE_RESET;

break;

case 2: //

A_PHASE_RESET;B_PHASE_SET;C_PHASE_RESET;D_PHASE_RESET;

break;

case 3: //B

A_PHASE_RESET;B_PHASE_SET;C_PHASE_SET;D_PHASE_RESET;

break;

case 4: //C

A_PHASE_RESET;B_PHASE_RESET;C_PHASE_SET;D_PHASE_RESET;

break;

case 5: //CD

A_PHASE_RESET;B_PHASE_RESET;C_PHASE_SET;D_PHASE_SET;

break;

case 6: //

A_PHASE_RESET;B_PHASE_RESET;C_PHASE_RESET;D_PHASE_SET;

break;

case 7: //D

i=0;

A_PHASE_SET;B_PHASE_RESET;C_PHASE_RESET;D_PHASE_SET;

break;

default:

break;

}

delay_ms(2);

}

void Motorccw( void )

{

switch ( i-- )

{

case 0: //A

i=7;

A_PHASE_SET;B_PHASE_RESET;C_PHASE_RESET;D_PHASE_RESET;

break;

case 1: //AB

A_PHASE_SET;B_PHASE_SET;C_PHASE_RESET;D_PHASE_RESET;

break;

case 2: //

A_PHASE_RESET;B_PHASE_SET;C_PHASE_RESET;D_PHASE_RESET;

break;

case 3: //B

A_PHASE_RESET;B_PHASE_SET;C_PHASE_SET;D_PHASE_RESET;

break;

case 4: //C

A_PHASE_RESET;B_PHASE_RESET;C_PHASE_SET;D_PHASE_RESET;

break;

case 5: //CD

A_PHASE_RESET;B_PHASE_RESET;C_PHASE_SET;D_PHASE_SET;

break;

case 6: //

A_PHASE_RESET;B_PHASE_RESET;C_PHASE_RESET;D_PHASE_SET;

break;

case 7: //D

A_PHASE_SET;B_PHASE_RESET;C_PHASE_RESET;D_PHASE_SET;

break;

default:

break;

}

}

void MotorStop( void )

{

ULN2003_ResetAllPhase( );

}

//由于 *一个脉冲* *输出轴* 转0.08789度(电机实转0.08789*64=5.625度),即步进角为5.625度。则转完A-B-C-D为 *8个脉冲* ,即0.08789*8=0.70312度。若称A-B-C-D为一个周期,则j为需要的转完angle角度所需的周期数。

void Motor_PreSet(eMotorDutyCycle eM, u32 tim, u32 speed)

{

gs_MotorHandle.eStatus = eM;

gs_MotorHandle.u32Time = tim;

gs_MotorHandle.u32Speed = speed;

}

void Motor_Millisecond( void )

{

if (gs_MotorHandle.u32Time > 0)

{

gs_MotorHandle.u32Time--;

if (gs_MotorHandle.u32Time == 0)

{

gs_MotorHandle.eStatus = Staus_None;

MotorStop( );

}

}

gs_MotorHandle.u32Cnt++;

if (gs_MotorHandle.u32Cnt % gs_MotorHandle.u32Speed == 0)

{

switch (gs_MotorHandle.eStatus)

{

case Status_CW:

Motorcw( );

break;

case Status_CCW:

Motorccw( );

break;

case Staus_None:

default:

break;

}

}

if (gs_MotorHandle.u32Cnt % 1000 == 0)

{

gs_MotorHandle.u32Cnt = 0;

}

}

相关推荐
v先v关v住v获v取14 分钟前
天然气管道内检测机器人检测节设计14张cad+三维图+设计说明书
科技·单片机·51单片机
无垠的广袤23 分钟前
【上海晶珩睿莓 1 单板计算机】物联网环境监测终端
linux·python·嵌入式硬件·物联网·mqtt·home assistant
先知后行。31 分钟前
ModBus协议
嵌入式硬件
IT阳晨。9 小时前
【STM32】天气预报项目
stm32·单片机·嵌入式硬件
IT阳晨。11 小时前
【STM32】智能台灯项目
stm32·单片机·嵌入式硬件
炸膛坦客12 小时前
Cortex-M3-STM32F1 开发:(三十九)DMA详细介绍(3):相关寄存器、库函数介绍,配置步骤,以及内存到内存和内存到外设的实例
stm32·单片机·嵌入式硬件
BMS小旭13 小时前
CubeMx-GPIO学习
单片机·学习
清风66666615 小时前
基于单片机的PID调节脉动真空灭菌器上位机远程监控设计
数据库·单片机·毕业设计·nosql·课程设计·期末大作业
polarislove021416 小时前
9.6 [定时器]超声波测距实验-嵌入式铁头山羊STM32笔记
笔记·stm32·嵌入式硬件
一路往蓝-Anbo18 小时前
C语言从句柄到对象 (六) —— 继承与 HAL:父类指针访问子类数据
c语言·开发语言·stm32·嵌入式硬件·物联网