内容主要是我自己的学习笔记,有些内容考虑了我个人的情况。
编码器介绍
这里介绍的是霍尔编码器,这个编码器一共由两个霍尔开关传感器+铁氧体磁环。霍尔开关传感器是霍尔效应制作的一个磁场检测开关。
Cubemx配置
忽略掉常规的配置,一共主要一共使用了3个定时器,一个串口,时钟频率设置为168M
定时器1 PWM输出 通道1及其互补通道
1
最好把速度设置为高
2 定时器3 编码输出
选择编码器模式,勾选中断,其他不用管
3定时器7 作为计时
在我的配置中,每隔一秒进入一次中断
配置中断
代码
初始化
HAL_TIM_Base_Start(&htim1);
/* 启动定时器通道和互补通道PWM输出 */
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1); //
HAL_TIMEx_PWMN_Start(&htim1,TIM_CHANNEL_1);//开启定时器Pwm通道1互补通道
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_1); //
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_2); //
HAL_TIM_Base_Start_IT(&htim7); //
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
start_flag=1;
/* 通用定时器初始化并配置输入捕获功能 */
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);//控制转速和方向
中断函数 重要代码
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint32_t count=0;
if(start_flag) //
{
time_count++; // ??1ms×??ˉ??ò?
if(time_count==1000) // 1s
{
/* Get the current direction */
uwDirection = __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);
CaptureNumber=__HAL_TIM_GET_COUNTER(&htim3);
printf("当前编码器定时器的计数方向:%d\n",uwDirection);
printf("输入捕获值:%d\n",CaptureNumber);
printf("1s内编码器的计数值:%d\n",CaptureNumber>=count?CaptureNumber-count:CaptureNumber+65535-count);
printf("电机的转动速度:%0.2f\n",(float)(CaptureNumber>=count?CaptureNumber-count:CaptureNumber+65535-count)/13/30/4);
count=CaptureNumber;
time_count=0;
}
}
}
其他
1 实现打印函数
usart.c中
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xffff);
return ch;
}
int fgetc(FILE * f)
{
uint8_t ch = 0;
while(HAL_UART_Receive(&huart1,&ch, 1, 0xffff)!=HAL_OK);
return ch;
}
usart.h
一定记得声明 #include <stdio.h>
重要原理
在之前配置的过程中,可以参考以下两篇文章。链接在末尾,我觉得我之前比较难懂的地方在于到底是如何进行计算的,一共有两种方法,我使用的是编码器接口。
编码器的A B相会输出像上面的信号,在一个周期内,他可以计数4个脉冲。他的真实含义是相对信号的电平计数模式。什么是相对信号?其实就是CHA相对CHB的的电平或者CHB相对CHA的电平。
我们来分析下这行代码,这是我之前不能理解的。
(float)(CaptureNumber>=count?CaptureNumber-count:CaptureNumber+65535-count)/13/30/4
前面一部分就是一圈的脉冲数,13和30,4为什么要除以这些,13表示铁氧气磁环上面有多少对极,30表示减速电机的比值,表示一个周期4个脉冲。
再记录最后一个
https://blog.csdn.net/QWQ_DIODA/article/details/116519580?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162813212516780255239475%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162813212516780255239475&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-18-116519580.first_rank_v2_pc_rank_v29&utm_term=+%E9%9C%8D%E5%B0%94%E7%BC%96%E7%A0%81%E6%B5%8B%E9%80%9F&spm=1018.2226.3001.4187
https://blog.csdn.net/weixin_44270218/article/details/114045057?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162813191116780271548067%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162813191116780271548067&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_v2~rank_v29-12-114045057.first_rank_v2_pc_rank_v29&utm_term=HAL+%E7%BC%96%E7%A0%81%E6%B5%8B%E9%80%9F&spm=1018.2226.3001.4187