html5企业网站开发,网站的开发环境设计,射阳住房和建设局网站,企业设计网站公司排行榜【驱动程序】霍尔编码器电机_CubeMX_HAL库
电机型号#xff1a;MG310 霍尔编码器电机
驱动模块#xff1a;L298N
接线 注#xff1a;
L298N 12V接线柱位置可以接50V~5V当跳线帽接入时#xff0c;5V接线柱为5V输出#xff0c;可以给驱动板供电当跳线帽拔出时#xff0…【驱动程序】霍尔编码器电机_CubeMX_HAL库
电机型号MG310 霍尔编码器电机
驱动模块L298N
接线 注
L298N 12V接线柱位置可以接50V~5V当跳线帽接入时5V接线柱为5V输出可以给驱动板供电当跳线帽拔出时5V接线柱为5V输入
CubeMX 配置
PB4(TIM3-CH1) 和 PB5(TIM3-CH2) 为PWM输出模式PB3(TIM2-CH2) 和 PA15(TIM2-CH1) 为输入捕获模式 NVIC中断使能TIM4设为定时中断 NVIC中断使能
注芯片型号为stm32f103C8T6,根据芯片型号不同配置的时钟通道的管脚也不同
共两个代码文件
encoder_motor.cencoder_motor.h
encoder_motor.c
#include encoder_motor.h/*
PWM输出
PB5-TIM3-CH2
PB4-TIM3-CH1
*/
//占空比设定 最大值为重装载值
void Encoder_PWM_PB5(int n)
{TIM3-CCR2 n;
}
void Encoder_PWM_PB4(int n)
{TIM3-CCR1 n;
}/*
脉冲捕获
PB3-TIM2-CH2
PA15-TIM2-CH1
*/
int Encoder_Num_Pulse 0; // 脉冲记数值
int Encoder_Speed 0; // 速度值//脉冲捕获
void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{if(htim-Instance TIM2){Encoder_Num_Pulse;}
}//速度检测放在定时中断里
int Encoder_Chack(void)
{int a Encoder_Num_Pulse;Encoder_Num_Pulse 0;return a;
}encoder_motor.h
#ifndef _ENCODER_MOTOR_H_
#define _ENCODER_MOTOR_H_#include my_core.h
void Encoder_PWM_PB4(int n);
void Encoder_PWM_PB5(int n);extern int Encoder_Num_Pulse; // 脉冲记数值
extern int Encoder_Speed; // 速度值
int Encoder_Chack(void);
#endif代码使用说明
Encoder_Chack();放在定时中断里使用
stm32f1xx_it.c
/*** brief This function handles TIM4 global interrupt.*/
void TIM4_IRQHandler(void)
{/* USER CODE BEGIN TIM4_IRQn 0 */Encoder_Speed Encoder_Chack();/* USER CODE END TIM4_IRQn 0 */HAL_TIM_IRQHandler(htim4);/* USER CODE BEGIN TIM4_IRQn 1 *//* USER CODE END TIM4_IRQn 1 */
}开启PWM输出、捕获中断、定时中断
main.c
int main()
{//...HAL_TIM_PWM_Start(htim3,TIM_CHANNEL_1);//开启PWM通道HAL_TIM_PWM_Start(htim3,TIM_CHANNEL_2);//开启PWM通道HAL_TIM_IC_Start_IT(htim2,TIM_CHANNEL_1);//开启捕获中断HAL_TIM_IC_Start_IT(htim2,TIM_CHANNEL_2);//开启捕获中断HAL_TIM_Base_Start_IT(htim4);//开启定时中断while(1){//...}
}