当前位置:网站首页 > 编程语言 > 正文

max31855程序(max31865程序)



机器学习 stm32_单片机

在机器人控制中,单片机(Arduino/STM32)与上位机(Raspberry Pi/NVIDIA Jetson nano)之间的通信经常采用串口通信的方式,那应该如何使用STM32的串口通信以及根据自己定义的协议来完成数据的接收与发送呢?在本篇文章中将给你演示如何通过自定协议来完成对电机的控制以及获取编码器的值,跟着我们的配置步骤,你会发现一切如此的简单!

本篇文章依旧采用我们的机器人控制板进行开发,关于电机的相关配置以及驱动代码可以参考前面的文章,本文着重介绍串口通信部分!

'e' 反馈两个电机的编码器脉冲计数值,该计数值达到最大值或最小值时自动清零。

'm' l_speed r_speed 'm'为控制标志,l_speed为左轮的速度值,r_speed为右轮的速度值,该值单位为 cm/s

为了提高串口通信的效率,减少因为字节传输而不断引起中断导致资源的浪费,可以采用DMA+串口空闲中断的方式对数据进行接收。

DMA

DMA:Direct Memory Access,可以实现一个数据从一个地址空间拷贝到另一个地址空间,并且在数据拷贝过程中无需CPU的干预,在数据拷贝结束后才告知CPU进行处理。因此使用DMA功能可以释放CPU资源。

串口空闲中断

普通的串口处理数据方式为单字节接收,并且接收一帧数据时,需要自行判断帧头帧尾确定是否为一帧完整数据,并且当数据量大会导致频繁进入中断。而采用串口空闲中断,在串口空闲时(发送完一帧数据)产生中断,并且可以在中断服务函数中计算得到的数据长度,对整帧数据进行处理。

STM32CubeMX中的配置

在串口1配置中打开DMA功能,其余配置可参考之前的工程

机器学习 stm32_驱动开发_02

创建好工程后,打开工程文件中的stm32f1xx_it.c,找到串口1的中断服务函数,在中断服务函数中加入以下代码。

并且在main函数中的主循环开始前加入使能语句

主循环中的代码如下:

当发送"m 0 0"时,电机停止,并返回"OK"表示已经成功设置两轮速度

机器学习 stm32_单片机_03

当发送"m 10 10"时,左右轮以10cm/s的速度转动

机器学习 stm32_机器学习 stm32_04

机器学习 stm32_驱动开发_05

若要向反方向运动,则发送负的速度值,例如发送"m -10 -10"时,左右轮以10cm/s反向转动

机器学习 stm32_驱动开发_06

机器学习 stm32_单片机_07

当发送"e"时,可以得到当前编码器脉冲计数值。

机器学习 stm32_机器学习 stm32_08

这样控制板和上层设备之间的基本的串口控制和通信就建立好啦,快去试试效果吧!

到此这篇max31855程序(max31865程序)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 若依文件上传(若依文件上传加进度条)2025-09-02 18:09:09
  • gkjy是什么意思(gkq是什么意思)2025-09-02 18:09:09
  • msp432单片机(msp430f5529单片机)2025-09-02 18:09:09
  • vs怎么调试指定页面(vs2010怎么调试每一步)2025-09-02 18:09:09
  • j_flash(j_flash安装包)2025-09-02 18:09:09
  • 爱普生c7000(爱普生c7000打印机缺点)2025-09-02 18:09:09
  • msp432单片机简介(msp430g2553单片机)2025-09-02 18:09:09
  • 电池mha是什么意思(电池上标mwh和mah是什么意思)2025-09-02 18:09:09
  • 程序员知识精选(程序员知识精选app)2025-09-02 18:09:09
  • 换国内驾照都考什么科目(国内换国外驾照怎么换)2025-09-02 18:09:09
  • 全屏图片