0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

第七章-编码器测速 STM32pwm输出 STM32f103c8t6引脚功能

dfhjgfg 来源:dfhjgfg 作者:dfhjgfg 2024-08-21 16:44 次阅读

[]()功能介绍放开头, 使用便捷无需愁。

这是全网最详细、性价比最高的STM32实战项目入门教程,通过合理的硬件设计和详细的视频笔记介绍,硬件使用STM32F103主控资料多方便学习,通过3万字笔记、12多个小时视频、20多章节代码手把手教会你如何开发和调试。让你更快掌握嵌入式系统开发。

V3.3.0-STM32智能小车

视频:
https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click

V3:HAL库开发、功能:PID速度控制、PID循迹、PID跟随、遥控、避障、PID角度控制、视觉控制、电磁循迹、RTOS等功能。

标题第七章-编码器测速

7.1-认识编码器

编码器:一般按照电机尾部、用于测量电机转速、方向、位置。
在这里插入图片描述
那么编码器的输出信号具体是什么?我们如何根据输出信号测量转速 和方向?

转速: 单位时间测量到的脉冲数量(比如根据每秒测量到多少个脉冲来计算转速)

旋转方向: 两通道信号的相对电平关系
在这里插入图片描述

7.2单片机定时器的编码器功能

那么我们已经知道编码器输出的波形,我们如何通过单片机读取波形,然后计算出速度那?

这里STM32单片机的定时器和通用定时器具有****编码器接口模式 、在STM32中文参考手册13章中有详细介绍

STM32中文参考手册-第200页
在这里插入图片描述
STM32中文参考手册-第267页
在这里插入图片描述
STM32中文参考手册-第226页
在这里插入图片描述
这个是计数方向与编码器信号的关系、我们拆开来看

仅在TI1计数、电机正转、对原始数据二倍频
在这里插入图片描述
仅在TI1计数、电机反转、对原始数据二倍频
在这里插入图片描述
在TI1和TI2都计数

可以看到这样就对原始数据四倍频了

在这里插入图片描述
计数方向
在这里插入图片描述

7.3-获得单位时间计数器值变化量

在这里插入图片描述
上一次说的方法:

这次编码器计数值 = 计数器值+计数溢出次数 * 计数最大器计数最大值

计数器两次变化值 = 这次编码器计数值 - 上次编码器计数值

然后根据这个单位变化量计算速度

还有一种方法:

计数器变化量 = 当前计数器值

每次计数值清空

然后根据这个变化量 计算速度

然后我们再看具体到哪一款电机和编码器上如何测速
在这里插入图片描述
在STM32中文参考手册-第119页
在这里插入图片描述
在这里插入图片描述
设置TIM2

在这里插入图片描述
设置ITM2滤波器
在这里插入图片描述
在这里插入图片描述
同理设置TIM4
在这里插入图片描述
设置TIM4滤波器
在这里插入图片描述
在这里插入图片描述
设置引脚上拉
在这里插入图片描述
生成代码
开启定时器和定时中断
在这里插入图片描述

HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_ALL);//开启定时器2
  HAL_TIM_Encoder_Start(&htim4,TIM_CHANNEL_ALL);//开启定时器4
  HAL_TIM_Base_Start_IT(&htim2);//开启定时器2 中断
  HAL_TIM_Base_Start_IT(&htim4);                //开启定时器4 中断

在定义两个变量保存计数器值
在这里插入图片描述

short Encoder1Count = 0;//编码器计数器值
short Encoder2Count = 0;

每2ms读取计数器值->清零计数器
在这里插入图片描述

Motor_Set(0,0);
//1.保存计数器值
Encoder1Count =(short)__HAL_TIM_GET_COUNTER(&htim4);
Encoder2Count =(short)__HAL_TIM_GET_COUNTER(&htim2);
//2.清零计数器值
__HAL_TIM_SET_COUNTER(&htim4,0);
__HAL_TIM_SET_COUNTER(&htim2,0);

printf("Encoder1Count:%drn",Encoder1Count);
printf("Encoder2Count:%drn",Encoder2Count);

HAL_Delay(2);

接好电池、烧录代码、串口一连接电脑

用手转动电机1或者电机2 、串口助手可以看到输出信息
在这里插入图片描述

7.4-主函数周期测量转速

上面我们测量出来了溢出值,我们再根据当前计数器值就可以测量出计数器变化量,我们通过单位时间变量就可以计算出转速

下面是电机和编码器的参数
在这里插入图片描述
我们先测试的结论是否有问题?

  1. 编码器计数器会不会在计数时间内溢出?
  2. 车轮旋转一周,单片机编码器计数器计数多少?9.6乘11乘4
  3. 根据计算方法计算电机转速

定义两个float变量
在这里插入图片描述

float Motor1Speed = 0.00;
float Motor2Speed = 0.00;

下面是代码(一定要把主函数没有用的删除掉)
在这里插入图片描述

//计算速度
Motor1Speed = (float)Encode1Count*100/9.6/11/4;
Motor2Speed = (float)Encode2Count*100/9.6/11/4;

printf("Motor1Speed:%.2frn",Motor1Speed);
printf("Motor2Speed:%.2frn",Motor2Speed);

编译烧录代码就会输出结果
在这里插入图片描述

7.5-定时器中断定时测量速度

上面我们实现:在主函数周期,读取计数器值然后计算速度,但是如果函数加入其他内容这个周期时间就很难保证。

所以这节我们通过定时器,周期读取计数器,计算速度。复制一份工程开始搞!
在这里插入图片描述
我们先开启定时器、2ms进入一次定时器中断,中断回调函数执行咱们的代码即可。

为什么充分利用单片机 我们使用TIM1

  1. 设置内部时钟
  2. 使能自动重装载
    在这里插入图片描述
    开启定义更新中断
    在这里插入图片描述
    代码开启定时器1 中断

在这里插入图片描述

HAL_TIM_Base_Start_IT(&htim1);                //开启定时器1 中断

定时器回调函数中添加 速度计算内容
在这里插入图片描述

/*******************
*  @brief  定时器回调函数
*  @param  
*  @return  
*
*******************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim1)//htim1 500HZ  2ms 中断一次
{
TimerCount++;
if(TimerCount %5 == 0)//每10ms执行一次
{
Encode1Count = (short)__HAL_TIM_GET_COUNTER(&htim4);
Encode2Count = (short)__HAL_TIM_GET_COUNTER(&htim2);
__HAL_TIM_SET_COUNTER(&htim4,0);
__HAL_TIM_SET_COUNTER(&htim2,0);

Motor1Speed = (float)Encode1Count*100/9.6/11/4;
Motor2Speed = (float)Encode2Count*100/9.6/11/4;
​
TimerCount=0;
}
}
}

把之前的变量定义放这里
在这里插入图片描述

short Encode1Count = 0;
short Encode2Count = 0;
float Motor1Speed = 0.00;
float Motor2Speed = 0.00;
uint16_t TimerCount=0;

主函数就输出速度大小就可以了
在这里插入图片描述

printf("Motor1Speed:%.2frn",Motor1Speed);
	printf("Motor2Speed:%.2frn",Motor2Speed);

把变量需要声明一下
在这里插入图片描述

extern float Motor1Speed ;
extern float Motor2Speed ;

然后打开串口助手
在这里插入图片描述
注:

根据电机和实际小车调整速度测量与占空比设置函数
在这里插入图片描述
在这里插入图片描述
我们第七章这样就完成了 ,把程序烧录电机就可以完成测速了。
下篇第八章我们讲解 PID速度控制

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码器
    +关注

    关注

    44

    文章

    3524

    浏览量

    133178
  • 测速
    +关注

    关注

    0

    文章

    37

    浏览量

    14035
  • STM32F103C8T6
    +关注

    关注

    105

    文章

    160

    浏览量

    82379
收藏 人收藏

    评论

    相关推荐

    有关AB相磁编码器STM32F103C8T6之间脉冲计数问题

    AB相磁编码器STM32F103C8T6引脚应该怎么连接?我看手册通用定时四个通道都可以实现输入捕获功能,那是否能实现
    发表于 09-17 12:29

    如何实现STM32F103C8T6编码器测速

    如何实现STM32F103C8T6编码器测速
    发表于 12-13 07:21

    STM32F103C8T6引脚

    本文介绍STM32F103C8T6引脚图、STM32F103C8T6开发板电路图及各部分引脚功能图介绍,
    发表于 08-03 15:53 43.7w次阅读
    <b class='flag-5'>STM32F103C8T6</b><b class='flag-5'>引脚</b>图

    STM32F051C8T6引脚图及功能定义

    本文为你简述STM32F051C8T6芯片参数、STM32F051C8T6引脚图及封装。
    发表于 08-03 19:02 3.1w次阅读
    <b class='flag-5'>STM32F051C8T6</b><b class='flag-5'>引脚</b>图及<b class='flag-5'>功能</b>定义

    stm32f103c8t6封装及最小系统原理图

    系统原理图。 STM32F103C8T6封装 STM32F103C8T6封装为LQFP48-48引脚小外形四方扁平封装外形,如下图: STM32F103C8T6最小系统原理图 单片机的
    发表于 11-23 15:50 34.8w次阅读

    STM32F103C8T6核心板的资料合集免费下载

    本文档的主要内容详细介绍的是STM32F103C8T6核心板的资料合集免费下载包括了:STM32F103C8T6核心板测试程序(PC13闪烁),STM32F103C8T6核心板测试程序(RTC
    发表于 06-04 08:00 519次下载
    <b class='flag-5'>STM32F103C8T6</b>核心板的资料合集免费下载

    STM32F103C8T6原理图

    STM32F103C8T6原理图免费下载。
    发表于 06-02 10:01 173次下载

    stm32f103c8t6引脚图及功能

    STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制,程序存储容量是64KB,需要电压2V~3.6V,工作温度为-40°
    的头像 发表于 06-29 17:05 14.5w次阅读
    <b class='flag-5'>stm32f103c8t6</b><b class='flag-5'>引脚</b>图及<b class='flag-5'>功能</b>

    利用STM32F103C8T6最小系统板点亮流水灯

    ;STM8产品型号命名规则(参考:STM32单片机最小系统详解)可知: STM32F103C8T6这个命名中:STM32代表STM32家族,
    发表于 11-17 17:06 58次下载
    利用<b class='flag-5'>STM32F103C8T6</b>最小系统板点亮流水灯

    利用STM32F103C8T6最小系统板点亮流水灯

    ;STM8产品型号命名规则(参考:STM32单片机最小系统详解)可知: STM32F103C8T6这个命名中:STM32代表STM32家族,
    发表于 11-17 18:06 97次下载
    利用<b class='flag-5'>STM32F103C8T6</b>最小系统板点亮流水灯

    STM32F103C8t6程序下载

    STM32F103C8t6程序下载
    发表于 11-24 18:21 229次下载
    <b class='flag-5'>STM32F103C8t6</b>程序下载

    STM32F103C8T6定时TIM4通道1、2输出PWM

    STM32F103C8T6定时TIM4通道1、2输出PWM这美妙的波形,真好,我他喵的终于把你弄出来了。STM32F103C8T6使用定时
    发表于 12-02 18:21 72次下载
    <b class='flag-5'>STM32F103C8T6</b>定时<b class='flag-5'>器</b>TIM4通道1、2<b class='flag-5'>输出</b><b class='flag-5'>PWM</b>

    stm32f103c8t6引脚功能图以及在arduino IDE编程环境下引脚调用

    stm32f103c8t6引脚功能图以及在arduino IDE编程环境下引脚调用例如:pinMode(PB1, INPUT);
    发表于 12-28 20:05 127次下载
    <b class='flag-5'>stm32f103c8t6</b><b class='flag-5'>引脚</b><b class='flag-5'>功能</b>图以及在arduino IDE编程环境下<b class='flag-5'>引脚</b>调用

    使用stm32f103c8t6设计的蓝牙小车

    使用stm32f103c8t6设计的蓝牙小车,具有前进后退,左转右转等功能
    发表于 08-07 16:08 22次下载

    stm32f103c8t6怎么连接噪声传感

    连接噪声传感STM32F103C8T6需要以下步骤: 确定传感STM32F103C8T6之间的连接接口。噪声传感通常使用模拟信号
    的头像 发表于 12-21 16:10 1052次阅读