<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[loop222的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/loop222</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; loop222]]></copyright><item><title><![CDATA[JC系列串口通信说明]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/151021035</link><guid>https://blog.youkuaiyun.com/loop222/article/details/151021035</guid><author>loop222</author><pubDate>Sat, 30 Aug 2025 16:46:16 +0800</pubDate><description><![CDATA[ 发送端：

第1个字节：ADR为驱动器地址（1-127），
第2个字节：0x06为功能码，表示写单个寄存器数据，
第 3、4 字节：要写的寄存器地址，
第 5、6 字节：要写的数据，
第 7、8 字节：从字节 1 到 6 的 CRC16 校验和。驱动器回复：
当驱动器接收数据错误时，回复：

异常码：0x01表示功能码错误，0x02表示寄存器地址错误。
 发送端：

第1个字节：ADR为驱动器地址（1-127），
第2个字节：0x10为功能码，表示写多个寄存器数据，
第 3、4 字节：要写的寄存器起始地址]]></description><category></category></item><item><title><![CDATA[JC系列CAN通信说明]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/142717058</link><guid>https://blog.youkuaiyun.com/loop222/article/details/142717058</guid><author>loop222</author><pubDate>Sat, 05 Oct 2024 18:21:39 +0800</pubDate><description><![CDATA[①、错误信息②、串口波特率③、CAN波特率④、电机类型：0=HighCurrent，1=Gimbal。⑤、编码器类型：⑥、控制模式⑦、保护使能⑧、校准结果。]]></description><category></category></item><item><title><![CDATA[JC4805快速入门]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/142716105</link><guid>https://blog.youkuaiyun.com/loop222/article/details/142716105</guid><author>loop222</author><pubDate>Sat, 05 Oct 2024 17:32:45 +0800</pubDate><description><![CDATA[JC4805快速入门]]></description><category></category></item><item><title><![CDATA[JC2804/JC4010/JC4310 快速入门]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/142715259</link><guid>https://blog.youkuaiyun.com/loop222/article/details/142715259</guid><author>loop222</author><pubDate>Sat, 05 Oct 2024 16:10:01 +0800</pubDate><description><![CDATA[JC2804机电一体，快速入门]]></description><category></category></item><item><title><![CDATA[ODrive移植keil（九）—— 抗齿槽效应算法]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/134847403</link><guid>https://blog.youkuaiyun.com/loop222/article/details/134847403</guid><author>loop222</author><pubDate>Fri, 08 Dec 2023 09:00:23 +0800</pubDate><description><![CDATA[在永磁电机中，即使定子中没有电流通过，也会存在一个电磁转矩，这个转矩叫齿槽力矩（Cogging Torque）。用手转动电机，会感觉到它从当前点“跳跃”并“稳定”在另一个点，电机有“一格一格”的顿挫感（俗称颗粒感）。当电机低速转动时，表现为“一顿一顿”，当电机高速转动时，电机的振动和噪声会更大。某疆早期的2312电机齿槽效应非常大，后来的电机齿槽效应明显变小了。5008电机的齿槽效应小，改善效果不明显，用齿槽效应大的电机测试，改善效果还是很明显的。]]></description><category></category></item><item><title><![CDATA[ODrive移植keil（八）—— 闭环控制]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/133888495</link><guid>https://blog.youkuaiyun.com/loop222/article/details/133888495</guid><author>loop222</author><pubDate>Thu, 19 Oct 2023 17:28:23 +0800</pubDate><description><![CDATA[定点运算早就存在，但是ST采用定点运算配合它的电机库，极大的推广了这一技术，我觉得目前市面上只要是定点运算的电机驱动器，应该都会受到ST的影响，或者直接就师承ST。发送指令“C”，3秒钟后电机“嘀”一声，然后正转8个电角度，反转8个电角度，同时串口打印校准参数。如果限速，电机只能达到限制转速。发送指令“C”，3秒钟后电机“嘀”一声，然后正转8个电角度，反转8个电角度，同时串口打印校准参数。发送指令“C”，3秒钟后电机“嘀”一声，然后正转8个电角度，反转8个电角度，同时串口打印校准参数。]]></description><category></category></item><item><title><![CDATA[ODrive移植keil（七）—— 插值算法和偏置校准]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/133788966</link><guid>https://blog.youkuaiyun.com/loop222/article/details/133788966</guid><author>loop222</author><pubDate>Sat, 14 Oct 2023 18:10:02 +0800</pubDate><description><![CDATA[ENCODER_cpr 为接口对应的cpr，比如AS5047P的ABZ接口cpr=4000，SPI接口的cpr=16384，注意区分。读取后的角度为原始数据，再在encoder_update() 中处理，数据处理包含了两部分：锁相环和插值，目前支持四种编码器：ABZ、AS5047P、MT6701、MA730，本例以ABZ信号为例，发送指令“P”（不需要回车换行），同时用手转动电机，查看角度打印，使用SPI接口，SPI读出角度为绝对值，更容易找到规律，]]></description><category></category></item><item><title><![CDATA[ODrive移植keil（六）—— 测量电阻电感和电流环PI参数整定]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/133763407</link><guid>https://blog.youkuaiyun.com/loop222/article/details/133763407</guid><author>loop222</author><pubDate>Thu, 12 Oct 2023 10:31:43 +0800</pubDate><description><![CDATA[最初移植的时候，我也用函数指针实现中断中的函数运行，但是发现函数指针太不直观了，非常容易被忽视和忘记更改指针，所以用了标志位的方法，不高级但却实用。发送指令“C”（不需要回车换行），3秒钟后电机“嘀”一声，校准完毕，打印测量结果，同时打印整定后的电流环PI参数。在ODrive代码中，设定了测量电流 I，根据检测到的电流不断调整 U，大概3秒钟，最终稳定电流到设定值，电阻电感测量的相关代码在motor.c文件中，可自行查看，上面也讲过了原理，所以就不再细说，]]></description><category></category></item><item><title><![CDATA[ODrive移植keil（五）—— 开环控制和电流变换]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/133031210</link><guid>https://blog.youkuaiyun.com/loop222/article/details/133031210</guid><author>loop222</author><pubDate>Wed, 11 Oct 2023 10:57:06 +0800</pubDate><description><![CDATA[如果转速设置太大，电机会振动，可以调高 target_voltage_ 以达到更大的转速，但是注意电机电流，注意发热。ODrive的程序架构，也是我在基本移植完代码后才焕然大悟的，如果事先有架构意识，不至于看代码的时候那么痛苦。Park变换的θ是当前读出的角度，而Park逆变换是下次FOC计算时的角度（当前角度+估算的下次转过的角度），3、Uq设置太大，电机发热严重，Uq设置太小，电机没劲转不动或者转不快，所以一定要根据电机相电阻设置大小，4、θ不是当前的角度，是目标角度，就是下次计算时的角度。]]></description><category></category></item><item><title><![CDATA[ODrive移植keil（四）—— PWM触发ADC采样]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/132908466</link><guid>https://blog.youkuaiyun.com/loop222/article/details/132908466</guid><author>loop222</author><pubDate>Sat, 16 Sep 2023 18:08:18 +0800</pubDate><description><![CDATA[ADC以DMA的方式转换，代码单独执行这个操作是没问题，但在初始化阶段随着片内外设配置的增加，或者代码执行顺序的变换，就会发生错位。网上找到过很多解释错位原因以及改正办法，但从来都没有彻底解决过这个问题，此次移植又遇到了这个问题，曾经的解决办法测试一遍后都失效了，最后发现用TIM2更新触发的方式不再错位。ADC1多通道规则转换时，如果使用DMA方式，经常会发生AD值错位的现象，比如第一个AD值的高字节放入的是低字节的数据，而低字节是第二个AD值的高字节数据，以此类推，转换值全部失效。]]></description><category></category></item><item><title><![CDATA[ODrive移植keil（三）—— USB虚拟串口和快速正弦余弦运算]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/132897516</link><guid>https://blog.youkuaiyun.com/loop222/article/details/132897516</guid><author>loop222</author><pubDate>Fri, 15 Sep 2023 17:07:40 +0800</pubDate><description><![CDATA[但是我实际的测试，从软件中断退出后仍然会执行第二个更新中断，并且我觉得在软件中断中等待第二次更新中断，很浪费时间，所以就没有使用这个方案。以上测试证明了USB虚拟串口移植成功，但在实际应用中，只需要USB收发数据，不需要USART2，所以屏蔽掉相关配置。单片机的USB通信，一般都是以虚拟串口的方式实现，ODrive使用自定义的接口，所以才需要用zadig驱动。DSP库优化后的运算，运算时间大约261520 us，精度在0.000001f，我本来是打算描述下移植的细节的，但是隔的时间太久了，已经记不清细节，]]></description><category></category></item><item><title><![CDATA[ODrive移植keil（二）—— ODrive的程序架构]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/132641290</link><guid>https://blog.youkuaiyun.com/loop222/article/details/132641290</guid><author>loop222</author><pubDate>Thu, 07 Sep 2023 11:16:30 +0800</pubDate><description><![CDATA[本节及之后的教程将把odrive移植到keil环境下，为了降低移植难度，同时也为了让大家更容易学习掌握移植后的代码，本次移植，只移植电机的核心控制功能，实现常用的一些功能。这部分代码会让人看得很无助，因为所有的代码都在此时执行，比如最下面的开环控制，都已经闭环了难道它还在运行，它运行的意义是什么？ADC1的规则通道转换所有闲杂的ADC，比如温度检测，不需要时效，软件触发后将一直在后台转换；国外的电机驱动技术领先国内这是不争的事实，“洋务运动”一直都在，只是在不同的领域不同的范围，]]></description><category></category></item><item><title><![CDATA[ODrive移植（一）—— 国产替代方案（VScode版移植）]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/132623366</link><guid>https://blog.youkuaiyun.com/loop222/article/details/132623366</guid><author>loop222</author><pubDate>Fri, 01 Sep 2023 17:51:00 +0800</pubDate><description><![CDATA[官方网站：https://odriverobotics.com/github网站：https://github.com/odriverobotics/ODrive官方使用说明：https://docs.odriverobotics.com/v/latest/guides/getting-started.html，在左下角选择对应的版本，比如ODrive-V3.6的当前最新版本是0.5.6，]]></description><category></category></item><item><title><![CDATA[VESC操作入门（三）——PPM输入控制和ADC输入控制]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/130993616</link><guid>https://blog.youkuaiyun.com/loop222/article/details/130993616</guid><author>loop222</author><pubDate>Fri, 02 Jun 2023 18:01:12 +0800</pubDate><description><![CDATA[注意操作时动作要慢，不要快速的上下划动摇杆，电机转速突变容易产生高压反电动势，本人的12V小功率开关电源就这样被击穿了。因为上面测试PPM时使用了带AS5047P编码器的电机，固件中默认使能了SPI接口，所以需要重新烧写不支持SPI接口的固件，本人测试用的10K和20K电位器接入ADC引脚后都不起作用，直到使用4.7K电位器，引脚电压才可以被改变，vesc可用于电动滑板车，所以AD引脚应该接的是一个转把，本人查找资料，发现电动车转把不是电位器，此时操作摇杆就可以控制电机转动，向上电机正转，向下电机反转。]]></description><category></category></item><item><title><![CDATA[SmartKnob移植ESP32和STM32——棘轮手感]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/130653623</link><guid>https://blog.youkuaiyun.com/loop222/article/details/130653623</guid><author>loop222</author><pubDate>Wed, 17 May 2023 14:01:02 +0800</pubDate><description><![CDATA[SmartKnob 利用电机模拟机械旋钮的效果，且模式灵活多变，自带高级感，据说宝马的车内旋钮就是这样的。github网址：https://github.com/scottbez1/smartknob。]]></description><category></category></item><item><title><![CDATA[VESC操作入门（二）——双轮毂电机控制和CAN通信]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/130488280</link><guid>https://blog.youkuaiyun.com/loop222/article/details/130488280</guid><author>loop222</author><pubDate>Thu, 04 May 2023 18:30:58 +0800</pubDate><description><![CDATA[要想让两个电机同时转动，需要在1000ms内连续发送两个指令，手工操作CAN盒的方式肯定达不到。只能通过代码的方式，而能够在最短的时间内实现这个功能的代码，非arduino莫属。VESC中会限制电机的最小速度，修改了限制后，虽然可以设置更小的速度，但是电机有抖动，尝试修改了PID，作用不大，电机齿槽效应导致的抖动，PID无能为力。VESC和ODrive的CAN通信类似，都只有简单的指令，大部分操作都需要通过USB事先配置好。VESC的CAN波特率默认500K，默认使能，接线既可使用，不需要任何配置。]]></description><category></category></item><item><title><![CDATA[ODrive的梯形轨迹]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/130249536</link><guid>https://blog.youkuaiyun.com/loop222/article/details/130249536</guid><author>loop222</author><pubDate>Thu, 20 Apr 2023 16:55:23 +0800</pubDate><description><![CDATA[实际应用中，需要电机又快又稳的转到指定位置，梯形轨迹（INPUT_MODE_TRAP_TRAJ）本质上是一个分段函数的轨迹规划，是一个先加速，再匀速，再减速的三段函数的过程。2804电机100kv，12V电源，最高速度为1200RPM = 20 转/秒。AS5047P_SPI接口，电源电压12V，24V都可以。1.1.2、位置模式，梯形轨迹。1.1.1、速度模式。]]></description><category></category></item><item><title><![CDATA[ODrive的CAN通信]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/130265325</link><guid>https://blog.youkuaiyun.com/loop222/article/details/130265325</guid><author>loop222</author><pubDate>Thu, 20 Apr 2023 16:21:45 +0800</pubDate><description><![CDATA[读取当前电压值（MSG_GET_VBUS_VOLTAGE）cmd_ID=0x17，msgID = node_ID | cmd_ID = 0x057，发送后没有反应，看代码需要rtr为1，打勾。设置Axis请求状态（MSG_SET_AXIS_REQUESTED_STATE）cmd_ID = 0x07，Adress=（node_ID]]></description><category></category></item><item><title><![CDATA[ODrive运放电路的分析和替代方案]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/130078971</link><guid>https://blog.youkuaiyun.com/loop222/article/details/130078971</guid><author>loop222</author><pubDate>Tue, 18 Apr 2023 16:45:55 +0800</pubDate><description><![CDATA[下图第80行，max_unity_gain_current = 边缘 x 波动 x 采样电阻导数 = 0.9 x 1.35 x 2000 = 2430，下图第81行，requested_gain = 2430 / 电流采样范围，代码通过设置的电流采样范围，计算出需要的放大倍数。如果电流采样范围设置120A，放大倍数为20倍，如果电流采样范围设置240A，放大倍数为10倍，如果电流采样范围设置30A，放大倍数为80倍，如果电流采样范围设置60A，放大倍数为40倍，ODrive的采样电阻为0.5mΩ，]]></description><category></category></item><item><title><![CDATA[SimpleFOC移植STM32（九）—— ABZ编码器电机]]></title><link>https://blog.youkuaiyun.com/loop222/article/details/129819585</link><guid>https://blog.youkuaiyun.com/loop222/article/details/129819585</guid><author>loop222</author><pubDate>Mon, 10 Apr 2023 18:06:49 +0800</pubDate><description><![CDATA[ABZ或者ABI，叫法不同但指的都是同一种编码器，也叫增量式编码器。ABZ编码器最大的优点就是接口统一，兼容性好。不像SPI接口的磁编码器，不同厂家的芯片甚至同一厂家的不同型号，通信协议各不相同，换个编码器就要重新写代码。光电编码器的信号输出有开漏和推挽多种形式，不确定信号类型情况下，在单片机接口上最好能接 上拉电阻，光电编码器的工作电压一般为5V，接3.3V后不工作。驱动板103没有5V电源输出。磁编码器输出的ABZ信号一般为推挽输出，有一定的驱动能力，所以有没有上拉电阻不重要。]]></description><category></category></item></channel></rss>