初始版本
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,165 @@
|
||||
|
||||
#ifndef __DCMOTOR_H
|
||||
#define __DCMOTOR_H
|
||||
|
||||
#define ADC_CH_NUM 3 /* 需要转换的通道数目 */
|
||||
#define ADC_COLL 100 /* 单采集次数 */
|
||||
#define ADC_SUM ADC_CH_NUM * ADC_COLL /* 总采集次数 */
|
||||
|
||||
|
||||
|
||||
#define HC32F170 (0u) //HC32F170JATA
|
||||
#define HC32L170 (1u) //HC32L170JATA
|
||||
#define HC32F460JETA (2u) //HC32F460JETA
|
||||
|
||||
#define MCU HC32F460JETA
|
||||
|
||||
#if(MCU == HC32F460JETA)
|
||||
#include "hc32_ddl.h"
|
||||
|
||||
#define TIMER4 0
|
||||
#define TIMER6 1
|
||||
|
||||
#define TIMER TIMER4 //HC32F460单片机PWM输出控制定时器选择
|
||||
#endif
|
||||
|
||||
// 电机控制参数
|
||||
#define PWM_PERIOD TIM_PERIOD // PWM周期值 (ARR)
|
||||
#define MAX_SPEED 480 // 最大速度(PWM占空比)
|
||||
#define ACCEL_STEP 10 // 加速步进值
|
||||
#define DECEL_STEP 10 // 减速步进值
|
||||
#define ACCEL_INTERVAL 10 // 加减速间隔(ms)
|
||||
|
||||
|
||||
|
||||
// 电机控制命令
|
||||
typedef enum {
|
||||
MOTOR_CMD_STOP,
|
||||
MOTOR_CMD_FORWARD,
|
||||
MOTOR_CMD_REVERSE
|
||||
} MotorCommand;
|
||||
|
||||
// 电机运行状态机
|
||||
typedef enum {
|
||||
MOTOR_STOPPED,
|
||||
MOTOR_ACCELERATING,
|
||||
MOTOR_RUNNING,
|
||||
MOTOR_DECELERATING
|
||||
} MotorState;
|
||||
|
||||
|
||||
// 电机转动方向
|
||||
typedef enum {
|
||||
DIR_STOPPED,
|
||||
DIR_FORWARD,
|
||||
DIR_REVERSE
|
||||
} MotorDirection;
|
||||
|
||||
|
||||
|
||||
/************************************* 第一部分 电压电流温度采集 ******************************/
|
||||
|
||||
/* 电流计算公式:
|
||||
* I=(最终输出电压-初始参考电压)/(6*0.02)A
|
||||
* ADC值转换为电压值:电压=ADC值*3.3/4096,这里电压单位为V,我们换算成mV,4096/1000=4.096,后面就直接算出为mA
|
||||
* 整合公式可以得出电流 I= (当前ADC值-初始参考ADC值)* (3.3 / 4.096 / 0.12)
|
||||
*/
|
||||
#define ADC2CURT (float)(3.3f / 4.096f / 0.12f)
|
||||
|
||||
/* 电压计算公式:
|
||||
* V_POWER = V_BUS * 25
|
||||
* ADC值转换为电压值:电压=ADC值*3.3/4096
|
||||
* 整合公式可以得出电压V_POWER= ADC值 *(3.3f * 25 / 4096)
|
||||
*/
|
||||
#define ADC2VBUS (float)(3.3f * 25 / 4096)
|
||||
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************************************/
|
||||
|
||||
|
||||
|
||||
/* 停止引脚操作宏定义
|
||||
* 此引脚控制H桥是否生效以达到开启和关闭电机的效果
|
||||
*/
|
||||
#define SHUTDOWN1_Pin Pin07
|
||||
#define SHUTDOWN1_GPIO_Port PortB
|
||||
|
||||
//#define SHUTDOWN2_Pin GPIO_PIN_2
|
||||
//#define SHUTDOWN2_GPIO_Port GPIOF
|
||||
#define SHUTDOWN_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOF_CLK_ENABLE(); }while(0) /* PF口时钟使能 */
|
||||
|
||||
#if(MCU == HC32F460JETA)
|
||||
/* 电机停止引脚定义 这里默认是接口1 */
|
||||
#define ENABLE_MOTOR PORT_SetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin)
|
||||
#define DISABLE_MOTOR PORT_ResetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin)
|
||||
#endif
|
||||
/******************************************************************************************/
|
||||
|
||||
/* 编码器参数结构体 */
|
||||
typedef struct
|
||||
{
|
||||
int encode_old; /* 上一次计数值 */
|
||||
int encode_now; /* 当前计数值 */
|
||||
float speed; /* 编码器速度 */
|
||||
} ENCODE_TypeDef;
|
||||
|
||||
extern ENCODE_TypeDef g_encode; /* 编码器参数变量 */
|
||||
|
||||
|
||||
/************************************* 第三部分 编码器测速 ****************************************************/
|
||||
|
||||
#define ROTO_RATIO 44 /* 线数*倍频系数,即11*4=44 */
|
||||
#define REDUCTION_RATIO 30 /* 减速比30:1 */
|
||||
|
||||
/* 电机参数结构体 */
|
||||
typedef struct
|
||||
{
|
||||
uint8_t state; /*电机状态*/
|
||||
float current; /*电机电流*/
|
||||
float volatage; /*电机电压*/
|
||||
float power; /*电机功率*/
|
||||
float speed; /*电机实际速度*/
|
||||
float location; /*电机位置*/
|
||||
int32_t motor_pwm; /*设置比较值大小 */
|
||||
} Motor_TypeDef;
|
||||
|
||||
extern Motor_TypeDef g_motor_data; /*电机参数变量*/
|
||||
|
||||
/*********************************************************************************************************************/
|
||||
|
||||
|
||||
|
||||
void dcmotor_init(void); /* 直流有刷电机初始化 */
|
||||
void dcmotor_start(void); /* 开启电机 */
|
||||
void dcmotor_stop(void); /* 关闭电机 */
|
||||
void dcmotor_dir(uint8_t para); /* 设置电机方向 */
|
||||
void dcmotor_speed(uint16_t para); /* 设置电机速度 */
|
||||
void motor_pwm_set(float para); /* 电机控制 */
|
||||
|
||||
|
||||
float get_temp(uint16_t para);
|
||||
void AdcLoopHander(void);
|
||||
void Adc1mSRoutine(void);
|
||||
void Adc_Init(void);
|
||||
void calc_adc_val(uint16_t * p);
|
||||
|
||||
void Encoder (void);
|
||||
|
||||
//外部调用接口函数
|
||||
MotorDirection Motor_GetDirection(void);/* 获取电机转动方向 */
|
||||
void Motor_Control(MotorCommand cmd); /* 电机控制 */
|
||||
void Dcmotor1msRoutine(void);
|
||||
void DcmotorLoopHandler(void);
|
||||
|
||||
float get_current(void); /* 获取工作电流 */
|
||||
float get_volatage(void); /* 获取工作电压 */
|
||||
float get_Temperature(void); /* 获取工作温度 */
|
||||
float get_speed(void); /* 获取电机转速 */
|
||||
float get_location(void); /* 获取电机位置 */
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
Reference in New Issue
Block a user