资源简介
镜头变焦步进电机芯片MP6507驱动芯片简单代码实现,基于STM32F30x
代码片段和文件信息
#include
#include “cam.h“
#include “stm32f30x.h“
#if ((defined(USING_LENS_STEP_MOTOR)))
#define MP_A1_Port GPIOB
#define MP_A1_Pin GPIO_Pin_12
#define MP_A2_Port GPIOB
#define MP_A2_Pin GPIO_Pin_13
#define MP_B1_Port GPIOB
#define MP_B1_Pin GPIO_Pin_14
#define MP_B2_Port GPIOB
#define MP_B2_Pin GPIO_Pin_15
#define MP_A1_SET() do{MP_A1_Port->BSRR = MP_A1_Pin;}while(0)
#define MP_A1_CLR() do{MP_A1_Port->BRR = MP_A1_Pin;}while(0)
#define MP_A2_SET() do{MP_A2_Port->BSRR = MP_A2_Pin;}while(0)
#define MP_A2_CLR() do{MP_A2_Port->BRR = MP_A2_Pin;}while(0)
#define MP_B1_SET() do{MP_B1_Port->BSRR = MP_B1_Pin;}while(0)
#define MP_B1_CLR() do{MP_B1_Port->BRR = MP_B1_Pin;}while(0)
#define MP_B2_SET() do{MP_B2_Port->BSRR = MP_B2_Pin;}while(0)
#define MP_B2_CLR() do{MP_B2_Port->BRR = MP_B2_Pin;}while(0)
#define MP_RCC (RCC_AHBPeriph_GPIOB)
#define MP_IDLE 0
#define MP_STOP 1
#define MP_RUNNING 2
#define MP_SPD_MIN 1
#define MP_SPD_MAX 8
#define MP_POS_MIN (0)
#define MP_POS_MIN_RE (268)
#define MP_POS_MIN_RE1 (396)//视场角70度
#define MP_POS_MIN_RE2 (298)//视场角75度
#define MP_POS_MAX (1120)
static int _mp_act = MP_IDLE;
int *_mp_act_init_stop = &_mp_act;
static int _mp_cnt = 0;
static int _mp_spd = 8;
static int _mp_pos = MP_POS_MIN;
static int _mp_tgt = MP_POS_MIN;
static struct timer _mp_timer;
static const uint8_t _mp_wave_tbl[] = {0x050x040x060x020x0A0x080x090x01};
/********************************************************
*
********************************************************/
static inline void mp_hw_pwm_set(int val)
{
if (val & 0x01)
MP_A1_SET();
else
MP_A1_CLR();
if (val & 0x02)
MP_A2_SET();
else
MP_A2_CLR();
if (val & 0x04)
MP_B1_SET();
else
MP_B1_CLR();
if (val & 0x08)
MP_B2_SET();
else
MP_B2_CLR();
}
/********************************************************
*
********************************************************/
static void _mp_hw_timeout_handler(void *parameter)
{
int idx;
switch (_mp_act)
{
case MP_IDLE:
break;
case MP_STOP:
mp_hw_pwm_set(0x00);
_mp_act = MP_IDLE;
break;
case MP_RUNNING:
if (_mp_cnt++ != (MP_SPD_MAX - _mp_spd))
break;
_mp_cnt = 0;
idx = _mp_pos & (sizeof(_mp_wave_tbl) - 1);
mp_hw_pwm_set(_mp_wave_tbl[idx]);
if (_mp_pos != _mp_tgt)
{
if (_mp_pos > _mp_tgt)
_mp_pos --;
else
_mp_pos ++;
}
else
{
_mp_act = MP_STOP;
}
break;
相关资源
- L298N直流电机驱动模块
- L298N.SchDoc
- PMSM电机驱动器设计原理
- proteus仿真 电机驱动电路
- IR2104_+_IRF540_MOS电机驱动全桥
- mc33886封装压缩包,希望能对你有帮助
- 三相步进电机驱动电路设计
- 电机驱动电路之H桥
- L298N+TLP521-4电机驱动电路
- PIC16F887 四相五线步进电机驱动程序
- 基于verilog的步进电机驱动
- 有感无刷电机驱动程序 已调试通过
- BTN,BTS电机驱动芯片PCB库
- IR2104+IRF540电机驱动电路原理图
- 电机驱动模块 altium designer 文件.SchD
- 电机控制中MOSFET和IGBT基础知识
- 反馈式步进电机驱动原理图
- 基于L298N的步进电机驱动程序
- 全桥mos管电机驱动仿真电路
- 霍尔传感器应用于无刷电机驱动控制
- 智能车电机驱动模块
- 步进电机驱动代码TB6600+57BYG250B+51单片
- 步进电机驱动程序
- 智能寻迹小车c程序和驱动
- A4988步进电机驱动器使用手册
- 智能小车电机驱动模块
- L298N电机驱动模块的相关资料
- 三相直流无刷电机驱动电路
- 基于IR2136的无刷直流电机驱动电路的
- 86步进电机驱动51程序
评论
共有 条评论