掌上单片机实验室 - 实现运动功能(10)

使用ArduinoIDE进行STM32开发(STM32duino)环境配置方法 本文是使用Arduino IDE进行STM32开发的环境配置教程 ,使用了串口下载的方式,这样相对而言配置起来会简单一些,加快开发进度。 阅读详情

一、背景

        前面已完成了硬件激活、编程环境选择、软件框架构建,并且基于软件框架尝试了基于 RTOS 编程,为在此软硬件环境下学习单片机编程做了充分的准备。

        从本篇开始,开始以其为载体,一步步完善其功能、性能,并基于其具备的能力去完成一些有趣的任务,在这个过程中,逐步掌握用单片机解决实际问题的技能。

        掌上单片机实验室实质是一个小车,小车可以衍生出丰富的学习素材。

        首先,让其按照需要运动就涉及到很多内容,如:直流电机驱动、运动反馈、PID调速、堵转保护等,以及两轮差分驱动方式下的直线行走,需要用到很多单片机知识。

        在这些完成后,还可以基于其可动性,去设计、完成一些有趣的任务,如按特定轨迹行走、避障、“搬运”物体等,这些又将蕴含很多学习素材,可以外延到更多的知识范畴。

        可以说,小车是一道有丰富发挥空间的单片机学习应用题。

        既然是小车,第一步就要使其按需运动,本篇就着手实现此功能。

二、需求

        因小车是作为学习平台,考虑到学习成本,使用的是最便宜的130直流电机,性能较低,用 PWM 调功方式很难得到期望的转速,阻力稍有变化将会改变转速。为使小车能按需要行走,控制车轮转速是必须的。

        而控制转速首先需要测速!同样由于成本原因,小车码盘是在轮毂上直接做的,只有60齿,分辨率太低,尤其是用于PID调速时,计算周期如果设计为20ms,最快时才几个脉冲,无法满足计算需求,因此需要通过算法提高测速分辨率。

        综合而言,驱动小车运动的需求如下:

        1、可以方便的驱动电机

        2、可实现满足调速要求的测速

        3、可控制车轮转速

        4、可控制车轮行走距离

三、设计

3.1 驱动任务构思

        前面虽然实现了电机的驱动,能让小车动起来,但那个只是为了硬件测试,功能设计比较简单。

        此处要实现的驱动是为了满足后续小车的行为可控,能根据需要完成相应的轨迹运动,速度、距离可控,能完善、可靠的执行相应的操作命令,且易于和其它任务交互,协同实现期望的功能。

        按面向对象的思路,拟将两个车轮的驱动作为对象,将小车运动的相关功能均纳入,以其为基础构建一个任务:驱动任务。

        驱动任务应包含:

        1)电机驱动

        2)测速

        3)调速

        4)距离控制

        5)左、右轮配合实现运动轨迹控制

        6)电机驱动保护

        7)当前电机工作状态反馈

        上述功能的罗列顺序是基于相互依存关系的,按上述顺序实现各个功能,驱动任务应能满足需求。

        因为要驱动两个电机,功能一样,故考虑使用类方式实现电机驱动相关功能,以简化编程。

3.2 电机驱动

        电机驱动在前面做测试任务时已经完成,此处从实际使用角度再优化一下即可。

        电机驱动电路支持电机的4个工作状态:前进、后退、惰行、刹车。

        前进、后退不难理解,惰行和刹车需要说明一下:

        惰行 —— 是指在停止 PWM 信号后,电机驱动H桥使电机线圈处于开路状态,电机转子会由于惯性,继续转动到机械阻力使其停止。

        刹车 —— 是指在停止 PWM 信号后,电机驱动H桥使电机线圈处于短路状态,电机转子由于惯性转动产生的感应电势形成电流,产生阻力,和机械阻力共同作用使其停止。

        在精确控制行走距离时,应运用刹车功能,降低惯性产生的误差。

        平时待命状态,可以使其处于惰行状态,可以轻松的用手转动轮子。

        测试任务中设计的电机驱动函数,使用PWM百分比作为驱动信号,范围为 -100 ~ 100,负数对应后退,正对应前进,0 对应停止。

        补充定义:

        127 ——  对应刹车

        0 —— 对应惰行

        此外,增加对PWM频率的初始化,因为STM32Duino支持改变PWM频率,不过是哪些IO有效,有待测试确定。

        同时,STM32Duino的 PWM 输出在内部要和 PWM 引脚对应的硬件定时器关联,所以在选择两个电机的 PWM 引脚时,需要考虑用哪个定时器,最好使用一个定时器的两个通道,这样可以少占用硬件定时器。

        根据STM32F103C8 资料,目前电机驱动用引脚需要调整为:

        左侧 CT1、2、3 使用 PB6、PB5、PB4;右侧不变。

        这样PWM驱动使用 PB6、PB7, 对应 TIM4 的CH1、CH2。原来的驱动函数略作修改即可。

3.3 测速

        测速是调速的基础,通常使用合适分辨率的编码器即可方便实现。但此小车在设计时,主要考虑到降低成本,以减轻学生负担,故只是在轮毂上设计了遮光齿,用光电检测实现简易的转动反馈。

        目前的一圈是 60 齿,如果测速周期为10 ~ 20ms,对应最高转速(电机空载转速9800转/分,减速比1:48)3.4转/秒,每个测速周期才计数 2 ~ 4 个脉冲;如果用计数方式测速,明显速度分辨率太低。而周期方式测速由于周期随速度变化,不方便作为调速信息,故一般不采用。

        因此,如果要使用此信号作为调速的反馈信号,实现PID转速控制,必须采用倍频技术,将脉冲分辨率至少提高100倍。

        基于正常转动的特征:相邻两个脉冲的周期不会突变(排除干扰造成的脉冲丢失、抖动等异常状况)。

        拟用计数和测周期两种方式组合,实现倍频,以提高分辨率。具体处理方式为:

        在测速周期内,一方面对脉冲计数,得到完整脉冲的计数值。同时测量每个脉冲的周期,保存上一个脉冲的周期值(也可以保留前几个脉冲的平均值,以提高可靠性),为计算非完整脉冲做准备。

        当测速周期到时,读取当前脉冲周期测量“已计量的时间“,除保存的“前一脉冲周期值”,即可得到非完整脉冲值 0. XX ,从而提高分辨率。

        图示如下:

        注意:下一测速周期开始后的第一个脉冲计数不应该加1,而是加(1- 0. XX)。

        用此方法理论上可以提高到很高分辨率,但由于转动部分的阻力不均匀,导致脉冲周期会有波动,所以过高倍频没有实际意义,尤其是在速度变化过程中。在速度稳定时可以适当提高倍数,以提高控制的精度。

        在编程处理中,要避免非完整脉冲计算时产生大于 1 的结果。

        为减少浮点运算,简化算法,将脉冲计数单位扩大,每个完整脉冲计数值为256,相当于256倍频,这样用左移一个字节即可实现完整脉冲数的变换。

        在目前程序框架中,转动脉冲计数仍用中断完成,脉冲周期测量尝试直接在中断中读取当前系统计时值计算得到,利用Arduino 的 micros()函数实现,取代通常读取硬件计时器,尝试一下,看看是否可行,这样可以弱化程序对硬件的依赖。

        测速周期通过设计为 5ms 的倍数,故非完整脉冲的测量在 Tick 中断中实现,同样利用 micros()函数。使用中注意 micro()返回值溢出处理,按 4 字节应该约 71 分钟溢出。

        注意:因为Tick从 1ms 修改为 5ms,Arduino 的系统时间均因此而改变,micros()、millis() 函数单位因此扩大了 5 倍,变为 5us、5ms,delay() 函数也一样。

3.4 调速

        调速通常使用 PID 算法, Arduino 资源中有很多分享的库,此处尝试 PID_V2,这是在原来Arduino推荐的 PID 库基础上完善的库。

3.5 距离控制

        这个比较简单,基于轮毂上的码盘即可,但由于码盘精度较低,故距离控制精度也不高,大约是3.5mm(轮子直径65mm,一圈脉冲60个)。

        运动轨迹等功能后一步再实施,这一步先完成这些。

        为了能操作上述功能,必须有相应的控制协议,才能通过串口命令操作。

3.6 控制命令定义

        取消原来的测试命令,改为:

        1) 命令3:读工作状态命令(Key = 3,Len = 0)

                0x03 0x00 0x00

        应答内容:

        0x03 0x0E 0x00 左侧电机工作参数(2字节) 右侧电机工作参数(2字节)左侧剩余运行参数(2字节)右侧剩余运行参数(2字节) 左侧供电电压(1字节)右侧供电电压(1字节)左侧供电电流(2字节)右侧供电电流(2字节)

        2)命令4:PWM方式定时运行(Key = 4,Len = 8,Val:2字节左侧 PWM,2字节右侧 PWM,2字节左侧时间,2字节右侧时间)  

                0x04 0x08 0x00  左侧电机PWM(2字节) 右侧电机PWM(2字节)2字节左侧时间 2字节右侧时间

        PWM 为 2 字节有符号数,-100 ~ 100,正数前进,负数倒退,0 - 惰行,127 - 刹车,-128 - 无效PWM,不操作

        时间单位:秒

        应答内容:

        0x04 0x0E 0x00 左侧电机PWM(2字节) 右侧电机PWM(2字节)左侧剩余运行时间(2字节)右侧剩余运行时间(2字节) 左侧供电电压(1字节)右侧供电电压(1字节)左侧供电电流(2字节)右侧供电电流(2字节)

        3)命令5:PWM方式定距离运行(Key = 5,Len = 8,Val:2字节左侧 PWM,2字节右侧 PWM,2字节左侧距离,2字节右侧距离)  

                0x05 0x08 0x00 左侧电机PWM(2字节) 右侧电机PWM(2字节)2字节左侧距离 2字节右侧距离

        PWM 为 2 字节有符号数,-100 ~ 100,正数前进,负数倒退,0 - 惰行,127 - 刹车,-128 - 无效PWM,不操作

        距离单位:mm

        应答内容:

         0x05 0x0E 0x00  左侧电机PWM(2字节) 右侧电机PWM(2字节)左侧剩余运行时间(2字节)右侧剩余运行时间(2字节) 左侧供电电压(1字节)右侧供电电压(1字节)左侧供电电流(2字节)右侧供电电流(2字节)

        4)命令6:速度方式定时运行(Key = 6,Len = 8,Val:2字节左侧速度,2字节右侧速度,2字节左侧时间,2字节右侧时间)  

                0x06 0x08 0x00  左侧电机速度(2字节) 右侧电机速度(2字节)2字节左侧时间 2字节右侧时间

        速度为 2 字节有符号数,单位:mm/s,正数前进,负数倒退,0 - 惰行,32767 - 刹车,-32768 - 无效速度,不操作

        时间单位:秒

        应答内容:

        0x06 0x0E 0x00  左侧电机速度(2字节) 右侧电机速度(2字节)左侧剩余运行时间(2字节)右侧剩余运行时间(2字节) 左侧供电电压(1字节)右侧供电电压(1字节)左侧供电电流(2字节)右侧供电电流(2字节)

        5)命令7:速度方式定距离运行(Key = 7,Len = 8,Val:2字节左侧速度,2字节右侧速度,2字节左侧距离,2字节右侧时间距离)  

                0x07 0x08 0x00  左侧电机速度(2字节) 右侧电机速度(2字节)2字节左侧距离 2字节右侧距离

        速度为 2 字节有符号数,单位:mm/s,正数前进,负数倒退,0 - 惰行,32767 - 刹车,-32768 - 无效速度,不操作

        距离单位:mm

        应答内容:

        0x07 0x0E 0x00 左侧电机速度(2字节) 右侧电机速度(2字节)左侧剩余运行距离(2字节)右侧剩余运行距离(2字节) 左侧供电电压(1字节)右侧供电电压(1字节)左侧供电电流(2字节)右侧供电电流(2字节)

四、实施

        两侧电机的驱动是一样的,利用 Arduino 支持 C++ 的特性,定义一个电机驱动类,将电机驱动相关的操作封装在一起。

        因 PID 调速使用的是库,它也是定义为类,故未纳入到自己定义的电机驱动类中。

        驱动类定义如下:

        使用时实例化为左右两个电机驱动即可:

        驱动类需要完成:

        1)驱动电机:输入带符号的PWM,转换为电机驱动的信号。

 

        2)测速,包含两个部分,脉冲计数和转速计算:

        脉冲中断服务中调用脉冲计数函数,一是完成测速周期中的脉冲计数,二是测得脉冲周期:

 

        中断函数暂时放置在任务中,因为还有一些任务级的操作,如距离控制。

        转速计算是基于测速周期中的脉冲计数,以及脉冲周期,通过上述倍频算法得到转速值,此处是256倍频,是为了简化计算,用左移8位代替了乘法:

 

 3)为了实现堵转保护,先实现电机供电电压和电流的检测:

        用类的方式编写,感觉比函数逻辑更清晰。

        做上述修改后,任务间的信息交互重新定义:

        上述基础工作完成后,编写驱动任务。

        驱动任务框架和原来的测试任务类似,主要有三部分:

        1)接收主任务发来的消息,并根据操作命令启动相应的操作

        2)每个Tick 唤醒后执行相应的处理,在此包含:速度计算、电机电压电流采集、当前操作命令的执行(如定时运转的计时处理,以及PID调速处理)

        3)定时将驱动任务的工作状态发送给主任务。

        PID 调速使用第三方分享的库,实际上只是在定速运行状态下,每次将当前速度送给PID计算函数处理,得到后续电机驱动的 PWM 值。其余和正常运行没有区别,其核心是用于计算的三个系数。

        这一步只是将PID调速功能加入的到电机驱动过程中,但还未实现真正的调速,因为三个参数需要根据小车的实际特性调整,这个过程有相当的技巧。目前随意设置了几个数值,所以在定速运行时,转速呈震荡状态,下一步实现参数的整定(确定PID参数的过程称之为“整定”)。

        同前,单片机端程序修改后,配套的PC端辅助程序也需要相应修改。程序逻辑不变,只是根据修改后的协议,调整相应的参数处理及数据显示即可,修改后的PC程序界面如下:

        至此,以实用为目标的电机驱动任务基本完成,还差PID调速的完善以及堵转保护。

        PID 参数整定以往我是做了一个速度输出,并且 PC 端对应做了谱图功能,根据图形手工计算确定相应的参数。

        这次我想尝试一下“自整定”,Arduino 提供了相应的库,看看效果如何。下一步的练习就是它了。

五、结语

        因为这是学习编程,其核心是如何将现实世界的需求转化为程序代码;而构建代码的完整过程很难描述,最佳方式就是一步步地呈现代码的变化,通过前后比较,逐步悟出代码是如何从无到有的。

        基于程序框架编写使得这个变化过程更清晰。

        这一步重新编写测试任务,将其变为驱动任务;主任务只做了很少的改变,其余任务未变。

        对于学习者而言,这样就很容易比较程序前后的变化。

        这既是一个分享的过程,也是自身提高的过程;因为我是非科班出身,编程技巧是在工作中不断学习、摸索的,是随着技术的进步而提升的。在后续过程中,我会不断尝试新的方式,不一定都正确、合理,但可以供大家参考;一种方法是否好,至少要有人去尝试,就算是抛砖引玉吧。

——————————

文中程序下载:

链接:https://pan.baidu.com/s/1Mkh3xlxebdqSBJkT3ilzBA

提取码:xw82

 

STM32duino-bootloader:STM32的开源Bootloader深入解析 STM32duino-bootloader项目是一个实现了STM32微控制器的USB DFU bootloader的开源项目,它为STM32的固件远程更新提供了一种可行的解决方案。这个项目展示了如何在STM32平台上实现一个功能强大的bootloader,其中包含了如何使用STM32的硬件特性,如何处理USB通信,以及如何编程STM32的内部闪存。如果你需要为你的STM32项目开发一个bootloader,这个项目无疑是一个很好的参考。对于固件更新,重要的一步是将新的固件写入STM32的内部闪存。 阅读详情

相关推荐

掌上单片机实验室 – RT-Thread 下实现运动功能(19)

基于 RTT 应用框架,将电机驱动按实际应用需求编入程序中,尝试用 C++ 的类方式定义电机驱动功能,因为两侧电机的驱动功能相同,用一个类即可。

embedream的专栏 393

Arduino借助STM32Duino开发STM32教程-(2023年8月)

最详细的arduino开发Stm32配置教程

m0_46236949的博客 1万+

掌上单片机实验室 – 走出屏幕的 ROS 小海龟(27)

在上一步的基础上,完成了使用 turtle_teleop_key 节点控制虚拟和现实两个小海龟,将基于 micro_ros 软件包实现单片机和 ROS2 主机通讯的流程全部打通,后面就可以进一步尝试ROS2 的功能了。

embedream的专栏 975

STM32duino:【玩STM32】STM32Duino的引脚映射,ADC,PWM等介绍

基于迷你强的STM32duino文章,感觉非常有价值,这小单片机做Arduino实在太强了,甩AVR的几条街,结合Maple Mini研究了一下,总结下面基础资料: 0、编程语法参考 http://docs.leaflabs.com/static.leaflabs.com/pub/leaflabs/maple-docs/latest/language.html 1、引脚对应关...

Android/Linux的专栏 1万+

掌上单片机实验室 – RT-Thread + ROS2 初探(25)

得知 ROS 升级为 ROS2 后,将 rosserial 升级为可以在单片机上运行的 Micro_ROS,大大提升了性能。关键是 RT-Thread 中包含了 Micro_ROS 软件包,正好可以尝试一下,。于是有了文中的经历。

embedream的专栏 1614

STM32duino:使用Arduino框架玩转STM32——配置开发环境

本文将介绍如何通过在Arduino框架下使用STM32duino库,配置开发环境并开始使用STM32微控制器进行编程。我们将涵盖STM32duino的安装、开发板支持、库管理以及示例代码的编写。首先,我们需要安装Arduino IDE,它是一个开源的集成开发环境,用于编写和上传代码到STM32微控制器。在Arduino IDE中,我们需要安装STM32duino库以支持STM32微控制器。安装完STM32duino库后,我们需要选择正确的开发板。步骤2:安装STM32duino库。步骤4:编写示例代码。

2301_79326616的博客 1281

掌上单片机实验室 — 激活(4)

前面已经构建了掌上单片机实验室的硬件基础,并选择、安装了配套的编程环境,目前要做的工作就是将它激活,即基于所选择的 Arduino IDE,在构建的硬件上,编写相应程序,使所提供的硬件可以运转,成为一个可以用的实验平台。

embedream的专栏 1442

DW1000芯片实战:如何用UWB技术打造10厘米精度的室内定位系统(附Arduino代码)

本文是一份基于DW1000芯片和UWB技术的实战指南,详细介绍了如何从零构建一个精度可达10厘米的室内定位系统。内容涵盖硬件选型与连接、软件环境配置、核心的双向测距算法实现,并深入探讨了信号干扰抑制、功耗优化等实战挑战,为物联网开发者提供了完整的Arduino代码和部署思路。

root9的博客 497

掌上单片机实验室 – 构想(1)

一、背景 突如其来的疫情,打乱了大学生的正常学习氛围,传统的校园学习模式无法实施,虽说网上教学做了相应的弥补,但对于多数工科课程,只靠线上教学很难完成,单片机课程就是其中之一。 单片机这类工科课程有较强的实践需求,纸上谈兵很难达到预期的效果,所以开设这门课程的学校均建立有相应实验室。 而经典的实验室设备很难让学生个人拥有,在家独立完成实验,因为实验设备的设计及实验内容的编制均未考虑到这样的场景。 能否设计一款适合学生单独拥有,且可以自己完成实验的单片机学习实验装置呢? 本文尝试用我设计的第四.

embedream的专栏 395

[Unity Demo]从零开始制作空洞骑士Hollow Knight第四集:制作更多的敌人

大家好久不见,终于放完中秋假期可以回自己家里打代码了,上一期我介绍了为什么和如何导入2D toolkit以及制作一个完整的敌人(就是那只蚊子包括了精灵,动画,状态机行为以及脚本)现在不妨趁热打铁制作更多的敌人。

dangoxiba的博客 1974

STM32F411CEU6实战:用W25Q64存储多张图片,在240x240 LCD上轮播显示(附源码)

本文详细介绍了如何使用STM32F411CEU6通过SPI接口管理W25Q64 Flash中的多张图片,并在240x240 LCD上实现平滑轮播显示。内容涵盖硬件配置、图片存储方案设计、轮播系统实现及性能优化技巧,特别针对SPI传输优化和多图存储管理提供了实用解决方案。附源码,适合嵌入式开发者参考。

weixin_32025789的博客 308

掌上实验室V8系列教程(一)新建Keil项目

可以随身携带的实验室

lg28870983的博客 8342

[南大ICS-PA2]PA2 - 简单复杂的机器:冯诺依曼计算机系统

mips32和riscv32的指令长度只有32位, 因此它们不能像x86那样, 把C代码中的32位常数直接编码到一条指令中. 思考一下, mips32和riscv32应该如何解决这个问题?加载立即数到寄存器的高20位,然后便可以是哟给你标准的立即指令来创建32位常量。在程序分析领域中,静态指令是指程序代码中的指令,动态指令是指程序运行过程中的指令,例如对于一下指令序列。位域,在小端机器上,先定义的在每个字节的低位,后定义的在每个字节的高位。,这是处理非法指令的宏,其定义在。指令,而下一条动态指令则是。

qq_42474104的博客 928

掌上单片机实验室 – 实现PID自整定(11)

上一篇实现了小车运动控制,在程序框架下,基于FreeRTOS编写了驱动任务,包含电机控制、测速、PID调速、行走距离控制等和运动相关的功能。但 PID 调速只是完成了算法,并未真正实现调速,因为 PID 调速的核心是PID 参数的确定,即整定!而整定是 PID 最富挑战的内容,调速效果的好坏完全取决于参数。 本篇目的是尝试使用 Arduino 分享的自整定库实现 PID 参数自整定。

embedream的专栏 6807

手把手教你用STM32F103的IO口模拟XY2-100协议驱动数字振镜(附Keil O3优化代码)

本文详细介绍了如何使用STM32F103的IO口模拟XY2-100协议驱动数字振镜,包括协议解析、偶校验算法、寄存器级优化及Keil O3编译下的性能调优。通过硬件配置、核心代码实现和优化技巧,帮助开发者实现高速二维偏转控制,适用于工业激光雕刻和精密定位系统。

weixin_42527401的博客 261

VINS-Mono 时延估计论文翻译

Online Temporal Calibration for Monocular Visual-Inertial Systems 摘要 精确的状态估计是机器人导航、自主驾驶、虚拟现实和增强现实等各种智能应用的基础模块。视觉惯性融合是近年来流行的六自由度状态估计技术。记录不同传感器测量值的时刻对系统的鲁棒性和准确性至关重要。在实践中,每个传感器的时间戳通常会受到触发和传输延迟的影响,从而导致不同传感器之间的时间偏差(时间偏移)。这种时间偏移严重影响传感器融合的性能。为此,我们提出了一种标定视觉和

weixin_39061796的博客 1255

掌上单片机实验室 — 硬件基础(2)

一、背景 在“掌上单片机实验室-构思”一文中,探讨了基于四代圆梦小车实现掌上实验室的可能和益处。本文开始尝试具体设计一套基于此构思的掌上单片机实验室,先从硬件基础着手。 二、需求 硬件基础的核心需求为: 一个可以灵活运动的小车底盘 体积足够小,以便降低使用环境的要求 成本足够低,以适应学生个人拥有 便于使用单片机核心板驱动,小车行走无需增加额外增加器件。 可灵活替换控制用单片机,以适应不同的教学需求 便于根据扩充相应的模块,如:通讯、传感器 使用方便,如电源、充电。 三、设计..

embedream的专栏 407

FI 应计对象的创建和摊销

创建/修改:ACACTREE01/ACACTREE02 应计对象的过账:ACACPOSTING

nancyln9711的博客 903

掌上单片机实验室 - 程序框架设计(7)

单片机学习很大比例是编程的学习,即:如何将现实需求转换为程序语言,让单片机执行,从而解决现实世界的问题。 而编程的最佳方式是构建一个良好的程序框架,以此为基础,再根据具体要解决的问题,增加相应的处理部分即可,这样程序的构建和调试会很高效。 本文尝试基于 Free RTOS 构建掌上实验室的程序框架,以此为基础,展开后续的学习。

embedream的专栏 993

JAX/JAXlib GPU 加速版本安装教程(CUDA)

本文介绍了在Windows WSL2+Ubuntu22.04环境下配置JAX/JAXlib GPU加速版本的详细步骤。使用RTX 4060显卡,安装CUDA 12.4和cuDNN 8.9.7驱动,通过Miniconda创建Python 3.9虚拟环境。具体步骤包括:安装Miniconda、配置CUDA环境变量、安装cuDNN驱动、下载并安装JAX/JAXlib。最后通过测试代码验证GPU加速功能,成功检测到GPU并完成矩阵运算。整个过程配有详细命令和截图说明,适合需要搭建JAX GPU开发环境的用户参考。

猿小白的博客 626

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

掌上单片机实验室 – 用PC作为UI (8)

前面构建掌上实验室程序框架时,提出了用串口作为单片机人机交互界面的概念,并在框架中将串口命令接收、串口数据发送作为基础功能编写完成。 程序框架具备了串口作为 UI 的能力,就需要有相应的外设与其配合,以实现所需的人机交互功能。前面提过,PC是可选的设备之一。本篇就以 PC 为载体,配合前述程序框架的串口收发功能,实现初步的人机交互,即:UI。

embedream的专栏 724

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

掌上单片机实验室 – 尝试RT Thread(14)

前面介绍了掌上单片机实验室的构想,以及以 Arduino、Free RTOS为基础的学习过程,如果针对非计算机专业的学生而言,所述内容作为单片机或嵌入式的课程素材,应该够了,因为他们只有大约40~60学时,能把前述的学习内容消化实施,再在此基础上做些拓展,结合自己的兴趣,做些个性化的应用尝试,已经能初步掌握单片机的应用技能。RT-Thread是开源的,完全可以在实际应用中,遇到问题或想提高性能或代码效率时,用单步调试方式,跟踪到系统代码中,琢磨如何结合应用的需求去优化。期待国人自己的OS能做的更好。

embedream的专栏 284

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

基于雅特力AT32的 《掌上实验室》V8

掌上实验室V8是由中国计量大学现代科技学院和雅特力共同研发的一款ARM学习板,内置AT-Link-Ez仿真器。工业级设计,适合ARM深度学习以及产品的原型开发。 工业级设计,适合ARM深度学习以及产品的原型开发。有需要合作的可以站内留言。

lg28870983的博客 2562

掌上单片机实验室 — 编程环境(3)

一、背景 因为单片机学习是软硬结合的,离开软件,单片机无法工作。所以需要准备合适的编程环境。 二、需求 作为学习用的编程环境,我觉得应该满足: 上手容易;不需要花很多时间学习后才能正确使用。 环境参数设置方便,有些编程环境参数设置过于复杂,对于做实际项目是有价值的,但对于学习者而言,就是障碍了。 无版权问题(无需花钱购买,或盗版) 有完善、丰富的参考资料。 三、选择及准备 3.1 选择 因为目前硬件基础选择的是 STM32 系列单片机,可选择的编程环境有: 经典的IAR或MDK编程.

embedream的专栏 552

掌上单片机实验室 – 检验自整定适应性(12A)

在另一个不同的小车底盘上,验证 PID 参数自整定的适应性,从而确定 PID 自整定库是否实用。 检验的结果应该说相当满意!至少对于直流电机调速而言是可用的。

embedream的专栏 490

掌上单片机实验室 – RT-Thread 下实现PID自整定(20)

将基于 Arduino+FreeRTOS 实现的 PID 自整定功能移植到 RT-Thread 下,看看是否可行。实施结果:OK!基于 RT-Thread 完美实现了 PID 调速。顺带验证了基于 Serial V1 版本的发送阻塞验证,发送数据时并未阻塞,暂时可以不升级到 Serial V2.

embedream的专栏 1366
上一篇: 掌上单片机实验室 – 基于框架编写第一个程序(9)
下一篇: 掌上单片机实验室 – 实现PID自整定(11)
嵌入之梦
博客等级 码龄21年 134粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入之梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值