自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 低侧采样,高侧采样,在线采样的区别以及FOC电流环电流解算错误的排查方法

/PWM占空比设置函数,最后//一个参数表示CCR的值。

2025-11-01 16:31:28 883

原创 如何使用STM32高级定时器互补通道输出与刹车,更高效的控制无刷电机?

比如我想要死区1us,那么就令DT=1。这个怎么配置等一下在下面细说,注意看示波器波形,中间的确是有1us左右的死区时间,原本黄线就是低电平状态,而与它互补的蓝线是高电平状态的,到了PWM周期将要结束的时候,也就是两路电平即将切换的时候,就会进入死区时间。而如果是用那种只需要输入3路PWM就可以控制BLDC的电驱,由于它的死区是自动生成的,死区时间就一定是固定的,而为了保证这颗芯片的质量,这颗芯片的死区时间一定设置的是保守的,也就是说死区时间会偏长从而保证不出错,这其实在一定程度上影响了电机效率。

2025-07-13 22:19:43 1337 1

原创 利用CAN总线控制关节电机

电机向主控发送反馈帧,反馈点击状态,电机位置,速度,力矩以及电机温度和电机参数。那我的代码举例,比如我关节电机向我发送的数据的ID是0x000,我向电机发送的ID是0x001,那么我只要把数据帧的内容规定和采集好,就可以实现双方的交流了。我的理解是,FOC程序本身非常复杂且消耗算力(我有亲自写过FOC的算法程序,想了解的可以看看我发布的前几篇博客),如果用一块单片机同时控制多个内部没有集成FOC主控的关节电机,意味着一块单片机要同时控制多路FOC,这样会导致单片机算不过来,每个电机的控制都差强人意。

2025-07-03 21:00:35 2817

原创 轮足机器人的原理介绍以及代码实现逻辑

这么做的目的,是因为我的FOC电流环频率是10khz,也就是100us内要执行一轮FOC所需执行的任务,而如果把后续变腿高里的运动学逆解公式以及控制舵机的任务都交给F407的话,会导致407CPU超载,并且实时性也很难有所保证,所以其他的任务交给第二颗芯片,同时利用板间通信,将数据及时传给407以进行无刷电机的控制。我目前学的轮足机器人是桌面级别的,也就是它不是所有的地方都用的是无刷电机,所以实现难度没有那么高,主要难在轮腿如何连续地变腿高,如何在变腿高的同时还能保持机器人稳定,以及复杂地形自适应上。

2025-06-09 19:58:15 2247 1

原创 基于FOC的项目----力反馈旋钮

第二行中的roundf就是一个四舍五入函数,对当前从AS5600获取的角度/45°对应的弧度值就可以得到一个小数,对这一个小数做四舍五入(大于0.5进一,小于0.5的保持原来的整数),再将得到的这一个数乘以45°的弧度值,就可以得到目标角度了。这个就是只有单独一个电流环函数,只要你旋转旋钮,由于产生了电流,由于有电流环的PID作用(我的目标电流值是0),你会感到一丝阻力,而当旋转超过我设定的边界后,马上就会切换成角度,速度,电流的串级PID环,会强制纠正到指定的角度的,这就是这个有界旋钮的实现思路。

2025-05-27 13:33:15 1121

原创 FOC的PWM的重新配置以及svpwm的移植

因为中心对齐模式是,CNT从0计数记到ARR的值,然后再从ARR的值直接递减到0,这样才算一个PWM的一个完整的周期,所以现在的周期是原来的两倍。这两张图就很直观了,注意一下,我一开始设置的目标电流是0A,前面一个图是没配置之前的,后面一个图是配置好以后的,在同等的图形比例下,配置好的波形明显稳定多了,都是0.0005以内波动的,而上面那张图波动就很大,信号毛刺很多,尽管我两种配置都加了一阶低通滤波器,但一张图不管我怎么调参,他的毛刺一直都很多,很不稳定,第二张就不一样,还没开始调参就已经很稳定了。

2025-05-24 22:19:18 1816 1

原创 创建FOC电流闭环工程遇到的问题

就单单是这一句话,就困扰了我4到5天,我在这期间一直不断地在检查代码,不断地调整PID参数,结果现象还是,我给输入目标电流值为0.2A,电机空载的情况下永远达不到0.2A,最大只能到0.17,我输入100也是这样的情况。两路ADC采样所需要花的时间大概是47us,也就是差不多21.28KHZ,对于电流环的频率来说绰绰有余,再算上帕克变换,克拉克变换和其他一些运算所需的时间,电流环执行下来的一套时间,肯定是小于100us的,这样就能确保电流环不会滞后,同时也使ADC电容充电的时间更久,采样值更精确。

2025-05-21 11:55:45 1037 1

原创 创建foc的PID文件与低通滤波器的注意事项(stm32)

因为当电流也需要滤波,速度也需要滤波,两个滤波函数是一起共用timestamp_prev和y_prev这两个变量的,如果这两个滤波器的函数不是同时执行的话,比如速度滤波函数刚执行完后,更新了timestamp_prev,而过了一会,又要用到电流滤波器的函数,这个函数就会调用刚更新的timestamp_prev,而不是之前的timestamp_prev,这样程序不就崩溃了吗?,这样就会导致下一次进入这个函数时,y_prev还是初始值,因为上一次的值在上一轮函数执行完后就失效了,所以必须采用指针赋值。

2025-05-14 16:52:09 669 1

原创 我在创建foc开环速度工程时遇到的问题

首先,把定时器PSC设置为167,使得CNT的值每微秒就增加一次,这样就算我while(1)函数执行的再快,velocityOpenloop函数里的TS也就能被正确运算,其次,我们要在while(1)中设置一个计时函数,使得程序每ms执行一次velocityOpenloop函数,这样所经历的时间TS测量得更精确,因为Ts = (micros() - open_loop_timestamp) * 1e-6f;其实问题的关键就在于我不清楚放在while(1)里面执行的函数,执行的频率到底有多快。

2025-05-08 16:38:49 1340 1

原创 基于STM32的foc代码的cubemx配置

本文的目的意在梳理一些STM32最基础的一些底层知识,主要是作者之前第一次学STM32单片机时,对于江科大讲的单片机根本没有深刻理解,而现在由于想要把foc代码由arduino平台给一直到STM32上,于是相当于是重新回顾了一遍STM32,发现现在开始能真正理解底层配置了。下文将介绍一些我对于底层配置的重新认识。作者的提醒:如果真心想把foc学深,学好并且还得灵活运用,个人认为还是要从底层配置开始,将foc代码从底层开始写起,毕竟我现在就是停留在能看懂foc代码,并且清楚原理的地步,但我感觉这样有种只懂理论

2025-04-25 22:14:08 1611

原创 碰到keil烧录时,出现No target connected解决方法

想解决这个方法,你首先要想想你是不是你一次用这个芯片,如果你是第一次用这个芯片的话,那么大概率是因为你没有安装该芯片对应的安装包,要从pack-install中下载。如果SW Device里的SWDIO 有出现类似这一串数据的话,说明是已经成功识别上stlink了,如果没出现,你需要考虑一下是不是你stlink接线接错了,比如SWDIO和SWCLK接反了,也有可能是stlink驱动的版本太老导致的。1.出现这样的弹窗警告,先打开魔术棒里的debug,看看烧录器型号有没有选对。

2025-04-24 12:25:46 2451

原创 foc中的spwm与svpwm的区别

接着需要用到帕克变换,把ua,ub的值给算出来,然后带到每个扇区特有的公式中,就可以算出在一个pwm波形的周期内,每一个磁场矢量(一个扇区由两个磁场矢量决定的)所需高电平的持续时间,而空载时间t0也是随着Uq的增大而减小,而两种Mos管的状态(即两种磁场矢量的做工时间成一定的比例,这个比例由夹角决定,与tan有关),算出来的tx,ty是代表该适量状态所对应的做工时间,还需要再进行一定的运算才能算出占空比。Mos其实有八种状态,其中两种状态很特殊,是三相的上下两管同时关闭与同时导通,这样电路才不会短路。

2025-04-08 22:11:47 1419

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除