搜索
bottom↓
回复: 90
打印 上一主题 下一主题

一款成本极低的FOC驱动

  [复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2021-9-7 20:04:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 LaoZhu123 于 2021-9-8 13:44 编辑

由于我们比赛所使用的工程机器人采用了机械臂的结构,而RM官方提供的3508、6020、2006电机无法满足某些关节的输出需求。所以我们于2019年底选择了使用MIT Mini Cheetah的关节电机FOC驱动方案。但是在实际测试环境中,发现该FOC驱动器并不稳定(在当时的测试条件下),所以我们重新从头开始研发了一套不同于现有开源方案如simpleFOC、ODrive的FOC驱动方案,具有成本低、体积小等优势,作为技术储备提供给摩擦轮电机、关节电机等场景使用。
FOC在控制BLDC (Brushless Direct Current)电机上有诸多的好处,主要有如下几点优势(注意是FOC的优势,不代表本项目都具备):
   1. FOC则完全没有转速的限制,不论在什么转速下都可以实现精确的控制。
   2. FOC的换向性能极其优秀,最高转速下正反转切换可以非常顺畅。
   3. FOC还可以以能量回收的形式进行刹车控制。
   4. FOC可以实现力矩、速度、位置三个闭环控制。
   5. FOC驱动器的噪音会比电调小很多,效率也比电调高很多。
  但是由于FOC的计算量大、原理复杂,所以需要很高成本的控制器,这也使得FOC在很多场景下都没有得到推广和使用。在经过了半年的研究和迭代之后,本人将FOC涉及大量计算的代码进行了部分加速,也重新根据国内的供应链进行了选型,希望本开源项目能够帮助国内的广大开发者们用上有优秀性能的BLDC电机,为开源社区贡献一份力量。本项目剥离自我们为工程机器人盘式电机研发的FOC_STD项目,对供应链重新进行选型,目前项目还正在移植过程中,请期待九月底实现基本功能移植。
开源项目Github地址: https://github.com/ZhuYanzhen1/miniFOC
希望大家能多多关注,给一个小星星鼓励一下呀。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出90入372汤圆

2
发表于 2021-9-7 20:07:39 | 只看该作者
点赞,楼主好人,精神可嘉!

出0入10汤圆

3
发表于 2021-9-7 20:45:43 | 只看该作者
给楼主点赞。支持开源。

出20入186汤圆

4
发表于 2021-9-7 20:47:12 来自手机 | 只看该作者
点赞,有空看看     

出30入16汤圆

5
发表于 2021-9-7 20:52:55 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-7 20:55 编辑

必须赞一下

我觉得用stspin32f0a就可以满足低成本的要求了,用rs485就行了,没必要搞can。

出100入312汤圆

6
发表于 2021-9-7 21:00:35 | 只看该作者
将FOC涉及大量计算的代码进行了深度优化,牛!

出0入0汤圆

7
发表于 2021-9-7 21:01:41 | 只看该作者
GD32F130, mark!

出0入0汤圆

8
发表于 2021-9-7 21:15:42 来自手机 | 只看该作者
你的四点优势是哪来的?除了静音与力矩控制,哪个方波做不了,无转速限制?做个50万转试试

出615入1076汤圆

9
发表于 2021-9-7 22:37:44 | 只看该作者
本帖最后由 dukelec 于 2021-9-7 23:53 编辑

這個項目,foc 核心部分準確的說不是優化,而是簡化
順便一說,mcu 建議換成 stm32g0

看了下,foc_calculate_dutycycle 函數,算法有問題,你通過 if else 判斷 VecSector 是哪個分區,這個是有問題的(就算能用也不優雅),
通過 inverse park 一步就算出來了,可以參考 Ti 的文檔中的公式,文檔編號:Clarke & Park Transforms - BPRA048

我的 foc 相關代碼,你可以參考一下:
  1.         int16_t out_pwm_u = lroundf(i_alpha);
  2.         int16_t out_pwm_v = lroundf(-i_alpha / 2 + i_beta * 0.866025404f); // (√3÷2)
  3.         int16_t out_pwm_w = -out_pwm_u - out_pwm_v;

  4.         __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, DRV_PWM_HALF - out_pwm_u); // TIM1_CH3: A
  5.         __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, DRV_PWM_HALF - out_pwm_v); // TIM1_CH2: B
  6.         __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, DRV_PWM_HALF - out_pwm_w); // TIM1_CH1: C
复制代码


不行的話,可能是方向有問題,調整一下編碼器方向(數據取反與否)、電機線序,遵守電機正轉方向的行業規範(參考石英鐘錶的微型電機的輸出軸帶動秒針旋轉的方向)
順序都沒問題,還不行的話,就是編碼器 offset 算的不對,用於 calibration 的拖動模式的控制或計算有問題

你的硬件沒有電流檢測,力矩算是開環控制,速度環和位置環目前也還沒加
通訊也幾乎沒加,uart 建議轉成 485 電平

通訊建議兼容這個開源工具,看了你的 CDTP,雖然名子相同了一半,但我還是覺得 CDBUS 更好 ;-)
开源串口图形界面工具 CDBUS GUI 支持读写数据表、串口打印、IAP、波形显示…
https://www.amobbs.com/thread-5746055-1-1.html

整體看起來比較簡潔清爽,還不錯,用 linux 環境開發很贊

出0入0汤圆

10
 楼主| 发表于 2021-9-8 00:03:07 | 只看该作者
dukelec 发表于 2021-9-7 22:37
這個項目,foc 核心部分準確的說不是優化,而是簡化
順便一說,mcu 建議換成 stm32g0

感谢大佬的回复
1. 本人是刚入大三的学生,项目中有很多部分还不成熟的地方,还请大佬多多指正。
2. 此项目目前还在开发阶段,预计9月中旬才会完成基本的速度闭环和角度闭环控制,9月下旬完成通信部分的接口。
3. if判断部分是一个异形的六扇区SVPW调制,会考虑将您提供的优秀代码替换掉这一部分的代码。
4. 通信部分在后期我们会考虑将您的协议加入到项目中去,并使用宏进行协议的管理。
5. 目前使用的这颗GD32F130G6在淘宝上可以三块钱买到,对于学生党的我来说简直是福音,所以暂时不会考虑更换。
6. 由于GD32F130G6具备ADC外设,所以电流环会在基本功能完善后加入到开发计划中去。

出0入618汤圆

11
发表于 2021-9-8 03:13:46 | 只看该作者
列出的5点优势只是FOC“可能”具有的优势,并不是你这个方案能够做到的优势。
至少半桥上下臂接到一路PWM,没办法做到能量回收刹车吧。

出0入4汤圆

12
发表于 2021-9-8 08:21:15 | 只看该作者
本帖最后由 carefree1986 于 2021-9-8 08:23 编辑

楼主,大概看了下你的代码,用了这么多得浮点运行,这会大大拖慢单片机,ODrive 和 本杰明 用浮点是因为他们用的M4内核支持硬件单浮点运算

出0入0汤圆

13
发表于 2021-9-8 09:11:25 | 只看该作者
这种必须点赞

出0入0汤圆

14
发表于 2021-9-8 09:15:41 | 只看该作者
mark      

出140入158汤圆

15
发表于 2021-9-8 09:33:49 | 只看该作者
MIT Mini Cheetah FOC虽然代码写的比较烂,但不至于楼主说的这么不堪,您测试的是国内的仿品吧,哈哈。
还有,东西尚未成型,过于“大言不惭”的说“可能”存在的优势,并不断强调您代码“颠覆性”的比其它开源代码有优势,除了非常符合国内科研立项特色外,多数情况下只能沦为笑话。
比较出名的几个开源foc,从性能能、功能完备性、代码质量来排序,是oDrive>VESC>MIT>Simple,等您真正吃透了再来说“深度优化”吧,现在连个电流环都没有,妄谈性能只能是扯淡。做过电机的谁都知道电流相位一定会落后于电压相位,FOC本质就是建立模型提供三相电流环的前馈,没有电流环,一切性能都是扯谈。
看回复您是大三学生,大三能到这个份上其实已经很优秀,您现在的年龄和人生阶段是您的优势,您可以有充足的时间和精力去深入钻研某些东西,不过建议真要做技术的话还是要少些浮夸浮躁,踏踏实实撸实好基础,假以时日和天赋,定能成才。

出0入0汤圆

16
发表于 2021-9-8 09:45:54 | 只看该作者
我大三还在打游戏呢

出0入420汤圆

17
发表于 2021-9-8 09:53:40 | 只看该作者
我大三还在折腾51呢

出30入16汤圆

18
发表于 2021-9-8 09:54:10 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-9 06:46 编辑

现阶段还是要把基础打好

出0入85汤圆

19
发表于 2021-9-8 10:17:15 | 只看该作者
满大街大学在玩的行业预示着已经烂大街,留下的只能深挖

出0入0汤圆

20
发表于 2021-9-8 10:51:32 | 只看该作者
开源还是要支持一下

出30入16汤圆

21
发表于 2021-9-8 12:37:26 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-9 06:46 编辑
CK345 发表于 2021-9-8 10:17
满大街大学在玩的行业预示着已经烂大街,留下的只能深挖


高性能产品级电机控制器绝对不是小朋友可以轻易搞定的,就是华为天才智慧君也搞不定。

出0入0汤圆

22
发表于 2021-9-8 12:41:00 来自手机 | 只看该作者
foc没研究过,路过看看

出0入0汤圆

23
发表于 2021-9-8 13:23:03 来自手机 | 只看该作者
洞洞幺 发表于 2021-9-8 12:37
现在靠的就是深入研究,这个难度不是一般的,也只有高手才搞得定。

烂大街的有刷模型舵机,卖了20多年的 ...

也没你说那么神乎,做成熟需要积累、时间与产业链支持,国内做不好有多方面原因,不是单单是技术问题

出0入0汤圆

24
 楼主| 发表于 2021-9-8 13:30:29 | 只看该作者
不是很清楚为什么楼中有那么多对这个项目抱着嗤之以鼻态度的人。也许是我前面的描述没有写清楚,在这里重新做出一下声明:
1. 在描述中提到的五点是FOC的优势,我没有说过是我这个项目能够达到的优势。上面这一段描述是从我的README简介中复制出来的,为的是简单介绍FOC可以具有的一些优点从而使还没有怎么了解过FOC的人能够知道有这么一个好东西。
2. 这个项目是从盘式电机研发的FOC_STD项目里面剥离出来的。在原项目中我们用的也是STM32F4系列,且实现了50k的电流闭环速度及超前角弱磁扩速。但是大家都清楚目前单片机市场是个什么样的情况,现在国外很多开源FOC项目在国内的制造成本也不低。所以这个项目的根本目的不是再做一个simpleFOC或是怎样,而是要大幅压缩FOC成本,有得必有失。
3. 本项目目前1.0.1版还在移植过程中。国产的IC和原项目还是有很大的出入,所以还请大家耐心等待,等完全完成之后再评价也不迟。目前没有电流环也是因为还不确定能不能在这样的单片机上实现,所以在目前的开发计划中并没有加入。
4. 对于文中所说的“深度优化”一词确实欠妥,我会重新措辞编辑描述文本。但是对于在我使用的这颗GD32F130单片机中我后续会通过汇编进行有关计算的加速,也算是一种“优化”了,不知大家是否认可。
5. 希望各位仔细阅读说明再评价,本项目现在还没有开发完成,所以不要以目前的状况就下定论。这是我在阿莫发的第一篇帖子,深感自己与大佬们之间的差距巨大。也请大佬多多点出问题及改进方法,真的非常感谢。

出0入0汤圆

25
发表于 2021-9-8 13:38:58 | 只看该作者
支持开源

出0入0汤圆

26
 楼主| 发表于 2021-9-8 13:41:50 | 只看该作者
本帖最后由 LaoZhu123 于 2021-9-8 13:47 编辑
amigenius 发表于 2021-9-8 09:33
MIT Mini Cheetah FOC虽然代码写的比较烂,但不至于楼主说的这么不堪,您测试的是国内的仿品吧,哈哈。
还 ...


Mini Cheetah FOC是我们根据本杰明的论文和他开源的电路做的。今年本杰明已经重构了代码,您可以看一下本杰明在大概2019年时候写的:https://github.com/bgkatz/motorcontrol。那时候的代码他是把mbed、F3的库(不知道从哪里搞来的)、F4 HAL库、以及一大堆东西揉在一起。c和cpp混用、寄存器操作和库函数操作混用、mbed初始化函数和HAL初始化函数混用,可读性基本上为0。而在我们测试的时候由于上述种种问题始终没办法定位到它初始化各路时钟的准确位置,索性后来就直接买现成的FOC了。
另外您说的这几个开源项目我都有了解,确实非常的优秀。在控制代码和性能方面我这个项目目前是难以望其项背的。但是他们的缺点也就是本项目想极力推广的一点就是成本。在学校,我看到绝大部分的同学还在用很低效且高噪声的那种AB相码盘直流电机,我认为这个项目的进一步推动和完善有可能可以改变这一现状,能让不少人在同样的开销下用上更优秀的电机。

出0入0汤圆

27
发表于 2021-9-8 13:42:27 | 只看该作者
很不错了,在校学生能搞FOC驱动控制本身就已经很厉害了

出0入0汤圆

28
 楼主| 发表于 2021-9-8 13:50:25 | 只看该作者
carefree1986 发表于 2021-9-8 08:21
楼主,大概看了下你的代码,用了这么多得浮点运行,这会大大拖慢单片机,ODrive 和 本杰明 用浮点是因为他 ...

用汇编加速浮点运算的代码还在移植&测试中,移植完成后可以快很多。虽然也赶不上F4的FPU,但是比编译器转成定点指令还是要快不少的。

出0入4汤圆

29
发表于 2021-9-8 14:34:26 | 只看该作者
不错,应该鼓励

出140入158汤圆

30
发表于 2021-9-8 14:49:13 | 只看该作者
LaoZhu123 发表于 2021-9-8 13:41
Mini Cheetah FOC是我们根据本杰明的论文和他开源的电路做的。今年本杰明已经重构了代码,您可以看一下本 ...

哥,您链接的是MIT的foc,之前在MIT Mini Cheetah项目的关节电机上重构出来的,与本杰明什么关系,本杰明的是VESC。之前MIT Mini Cheetah FOC的代码我之前回帖已经说了,比较烂,符合学生风格,但不过并非可读性为0,剥离了mbed,其实结构还是比较清晰简洁的,只是adc在TIM update中断软件触发,这个虽然在牺牲一些调制比的情况下问题不大,但确实比较难看。其它倒还是不错的。至于您说时钟初始化找不到在哪里,那我告诉您把,mbed这库已经初始化了时钟,在文件名为system_clock.c里,文件名命名也很清晰了,您坚持找不到,那也没办法。 前辈们的东西虽然不是完美,但能够成名,总有它的原因,也不应该扣一无是处的帽子。

出30入16汤圆

31
发表于 2021-9-8 15:05:10 来自手机 | 只看该作者
colinzhao 发表于 2021-9-8 13:23
也没你说那么神乎,做成熟需要积累、时间与产业链支持,国内做不好有多方面原因,不是单单是技术问题 ...

我说的还是比较靠谱的。
前几年热炒的万众创新现在声音都没了,我们是很缺真正的技术的。

出10入29汤圆

32
发表于 2021-9-8 15:10:29 | 只看该作者

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

33
发表于 2021-9-8 16:33:54 | 只看该作者
LaoZhu123 发表于 2021-9-8 13:50
用汇编加速浮点运算的代码还在移植&测试中,移植完成后可以快很多。虽然也赶不上F4的FPU,但是比编译器转 ...

也可以考虑用IQmath来处理浮点运算,M3内核有现成的IQmath库可用。

出30入16汤圆

34
发表于 2021-9-8 17:39:27 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-9 07:08 编辑
LaoZhu123 发表于 2021-9-8 13:50
用汇编加速浮点运算的代码还在移植&测试中,移植完成后可以快很多。虽然也赶不上F4的FPU,但是比编译器转 ...


看看汇编加速的效果咋样。

出20入62汤圆

35
发表于 2021-9-8 17:42:13 | 只看该作者
够厉害的了。还要追求成本。
我把foc电机驱动搞转了,都没整明白为啥转。。。

出615入1076汤圆

36
发表于 2021-9-8 17:56:15 | 只看该作者
本帖最后由 dukelec 于 2021-9-8 18:30 编辑
天下乌鸦一般黑 发表于 2021-9-8 17:42
够厉害的了。还要追求成本。
我把foc电机驱动搞转了,都没整明白为啥转。。。 ...


是的,樓主高二之前就會玩 stm32(看他 github 高二設計的 stm32 作品,自己畫板,板上有 tf 卡、攝像頭 和 tft lcd 等,搞不好人家小學就玩 51 了),
現在才大三,就有自己的團隊,貌似還開了公司,英文又好,人又靚仔,最重要是基於 linux 環境,已經超過絕大多數老人,我們這些老人應該向樓主學習才對

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出30入16汤圆

37
发表于 2021-9-8 18:36:46 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-9 06:45 编辑
dukelec 发表于 2021-9-8 17:56
是的,樓主高二之前就會玩 stm32(看他 github 高二設計的 stm32 作品,自己畫板,板上有 tf 卡、攝像頭  ...


搞得早不代表搞得精通吧?
大学生开公司很常见,但赚大钱的不常见吧?

出615入1076汤圆

38
发表于 2021-9-8 18:46:11 | 只看该作者
本帖最后由 dukelec 于 2021-9-8 18:50 编辑
洞洞幺 发表于 2021-9-8 18:36
搞得早不代表搞得精通吧?
大学生开公司很常见,但赚大钱的不常见吧?


搞的越早越有優勢,從小玩編程,長大編程會賊溜,見過太多例子了(天賦也是一方面,且小孩子要自己感興趣才行)

類似音樂,小孩子 3 到 9 歲之間可以培養出絕對音感,成年人再怎麼訓練都不行

人家起飛早,不代表 文化、理論 就一定會落後

赚錢更不用我們操心,我賭他很定能賺到大錢,只是時間上早或晚的問題而已

出0入0汤圆

39
 楼主| 发表于 2021-9-8 18:48:44 | 只看该作者
TINXPST 发表于 2021-9-8 16:33
也可以考虑用IQmath来处理浮点运算,M3内核有现成的IQmath库可用。

多谢大佬推荐!这就去看看这个库怎么用,如果可以的话会移植进项目中来。

出615入1076汤圆

40
发表于 2021-9-8 19:01:35 | 只看该作者
本帖最后由 dukelec 于 2021-9-8 19:12 编辑
LaoZhu123 发表于 2021-9-8 18:48
多谢大佬推荐!这就去看看这个库怎么用,如果可以的话会移植进项目中来。 ...


先看 cpu 使用情況,不缺的話就不用改,
畢竟改起來麻煩,未來芯片會越來越便宜,以後肯定會有便宜的帶 fpu 的片子可以用

cpu 資源如果不夠,先考慮把你的電流環頻率降低一些,我 foc 用的 stm32g431cbu6,帶 fpu,170 MHz 主頻,電流環也才 170000000 / 4096 / 2 ≈ 20.75 KHz

打個比方,用彙編效率更高,還有人願意把 c 代碼改成 asm 彙編嗎?是否改用定點也是同樣道理(定點庫貌似就是彙編寫的)
實在不夠再考慮定點運算

出0入4汤圆

41
发表于 2021-9-8 19:06:01 来自手机 | 只看该作者
已经很厉害??

出0入0汤圆

42
发表于 2021-9-8 19:19:58 | 只看该作者
希望能驱动3KW的电机

出0入0汤圆

43
 楼主| 发表于 2021-9-8 19:20:04 | 只看该作者
amigenius 发表于 2021-9-8 14:49
哥,您链接的是MIT的foc,之前在MIT Mini Cheetah项目的关节电机上重构出来的,与本杰明什么关系,本杰明 ...

报道:MIT Biomimetic Robotics Lab 以 MIT Cheetah 3, MIT Cheetah 2, MIT Cheetah Mini 闻名。
之前 lab 成员 Benjamin Katz 在他的硕士论文中开源了 MIT Cheetah Mini 电机驱动器, 连接12个电机与机载电脑的中心板(SPIne)的代码和硬件。
之前我们也有发邮件联系过本杰明咨询关于他们Upboard Linux内核实时性补丁及SPI2CAN有关的问题。不知道是不是我的消息有误。

不知道大佬从我的哪句话中看出来我说此类开源FOC项目一无是处了?还有您之前一直在说我在“吹嘘这个项目的颠覆性设计”是在哪里体现出来的,还请明说。另外对于您说的:

1. MIT代码剥离mbed后“清晰简洁”?:不仅是clang-format和clang-tidy没有做,而且注释不完全、该封装的部分不封装写得很长,不该封装的(比如读磁编码器,可以用宏实现)甚至还要用cpp去重载。当然有可能是因为大佬阅码无数,但是对于我个人而言这确实是我见过最没有可读性的代码。

2. 时钟很好找,是我睁眼说瞎话?:系统时钟当然好找,其它的外设时钟写得一团糟。我举个例子,它CAN的时钟初始化:
    main.c 43行,通过mbed初始化CAN为1000000
    can_api.c 93行,手动操作寄存器设CanHandle.Init.Prescaler = 3;
    can.cpp 60行,通过mbed函数重设CAN波特率:int ret = can_frequency(&_can, f);
    can_common.c 45行,通过mbed函数重设CAN波特率:can_init_freq(obj, rd, td, 100000);
    can_api.c 226行,通过操作寄存器重设CAN分频器:can->BTR &= ~(CAN_BTR_TS2 | CAN_BTR_TS1 | CAN_BTR_SJW | CAN_BTR_BRP);

3. 本项目的立项原因是基于我们在实际使用过程中遇到的问题并尝试解决,不知道何时被您上升了道德高度,从您的口中变成了要打倒其它项目了?

4. 请提出一些实质性的问题及解决方案,像dekelec和TINXPST大佬那样我非常欢迎。您要是来跟我争论我这个项目到底是不是个垃圾,您说的就是对的。

出0入0汤圆

44
 楼主| 发表于 2021-9-8 19:22:14 | 只看该作者
本帖最后由 LaoZhu123 于 2021-9-8 19:36 编辑
dukelec 发表于 2021-9-8 19:01
先看 cpu 使用情況,不缺的話就不用改,
畢竟改起來麻煩,未來芯片會越來越便宜,以後肯定會有便宜的帶 f ...


好的好的。汇编这个确实不好写,我其实用的不是很熟练。8051、8086、Thubm2和RISC-V指令集都看过还没能到顺手拈来的程度,要对着手册慢慢写 。就是想着如果能写出来的话一个是对我自己也是蛮大的一个提升,另外一方面Cortex-M3的内核都可以用来加速浮点运算了。

出30入16汤圆

45
发表于 2021-9-8 19:40:50 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-9 06:43 编辑
LaoZhu123 发表于 2021-9-8 13:30
不是很清楚为什么楼中有那么多对这个项目抱着嗤之以鼻态度的人。也许是我前面的描述没有写清楚,在这里重新 ...


哈哈,看看怎么用汇编加速

出30入16汤圆

46
发表于 2021-9-8 19:51:37 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-9 06:41 编辑
dukelec 发表于 2021-9-8 18:46
搞的越早越有優勢,從小玩編程,長大編程會賊溜,見過太多例子了(天賦也是一方面,且小孩子要自己感興趣 ...


编程搞得早应该算更早熟悉些,可以培养感觉,不一定代表解决问题更厉害。

出140入158汤圆

47
发表于 2021-9-8 19:56:31 | 只看该作者
LaoZhu123 发表于 2021-9-8 19:20
报道:MIT Biomimetic Robotics Lab 以 MIT Cheetah 3, MIT Cheetah 2, MIT Cheetah Mini 闻名。
之前 la ...

哈哈,后生可畏,我肤浅了,之前拜读MIT FOC和VESC,没想到本杰明除搞VESC外还参与MIT Mini Cheetah FOC,为之前认识不足和措辞不当向您道歉。

出50入0汤圆

48
发表于 2021-9-8 20:25:33 | 只看该作者

点赞,有空看看

出0入0汤圆

49
 楼主| 发表于 2021-9-8 20:26:58 | 只看该作者
dukelec 发表于 2021-9-8 17:56
是的,樓主高二之前就會玩 stm32(看他 github 高二設計的 stm32 作品,自己畫板,板上有 tf 卡、攝像頭  ...

使用Linux环境其实出于很多方面的考虑,当然最大方面的考虑就是开源,所以我全套采用的是linux+gcc+cmake+make等开源的工具链。
中间也确实出过一些问题,主要原因是这颗芯片冷门而且没人用gcc弄过,要重写ld链接文件、startup启动文件和openocd的配置文件,不过还好后来顺利解决了。
其次用Linux+gcc的好处就是我现在可以在Github Actions上做持续集成,每天定时编译固件以方便其他人调试和下载。
持续集成Github Page页面可以看一下,这是每晚23:50自动编译出的固件。
另外,我现在也在研究怎么在QEMU上做Cortex-M系列单片机的仿真,目前还没有什么头绪,不知道大佬有没有什么想法。
如果能在QEMU上实现Cortex-M系列单片机的仿真的话,可以顺理成章地实现单片机程序的单元测试和真正意义上的持续部署,我想这应该也是一个非常有趣的应用。

出615入1076汤圆

50
发表于 2021-9-8 20:56:08 | 只看该作者
本帖最后由 dukelec 于 2021-9-8 21:03 编辑
LaoZhu123 发表于 2021-9-8 20:26
使用Linux环境其实出于很多方面的考虑,当然最大方面的考虑就是开源,所以我全套采用的是linux+gcc+cmake ...


用 linux 做主力系統,日積月累是可以改變思維模式的,增加你解決問題的能力,而且可以順便給你增加豐富的 linux 經驗,會比 windows 經驗更有價值
海外同行們早已選擇 linux 做主力系統,而且這是未來的趨勢,不跟上肯定會落後於人

openocd 我很久很久沒用它了,它貌似沒有維護了
我平時開發 stm32 下載用 st-link v2,可以用第三方開源的燒錄工具,也可以用 st 官方的燒錄工具
調試用串口打印就行,單步調試平時用不到,自從入行 linux 內核開發,就再也沒用過單步調試,可以拋棄掉

很久以前搞 stm32 開發,也是自己寫 makefile,現在直接用 stm32cubemx 生成 makefile 工程,make 一下就行

mcu 的虛擬機仿真,我覺得必要性不大,因爲它的軟件和 mcu 片上外設 以及 外部芯片、硬件、用戶操作 等都有關聯,純軟件模擬不太可能
可以考慮做一個實體測試台,對真實硬件進行自動化燒錄、測試,照樣可以和線上的可持续部署系統做對接
然後這個測試台可以做通用一些,附加可以幫客戶做一些定製服務,也是一個市場,應該會有一些公司需要

順便一提,你畫板用 easyeda 而不是 kicad 有點出我意料

出0入4汤圆

51
发表于 2021-9-8 21:13:02 | 只看该作者
LaoZhu123 发表于 2021-9-8 13:50
用汇编加速浮点运算的代码还在移植&测试中,移植完成后可以快很多。虽然也赶不上F4的FPU,但是比编译器转 ...

用汇编加快也于事无补,要用整型数 才是根本解决办法

出0入0汤圆

52
发表于 2021-9-8 21:25:02 | 只看该作者
撑楼主!!
保持谦虚有屁用
做人,就需要有颠覆精神
不是什么时候都夹着尾巴做人

出0入0汤圆

53
 楼主| 发表于 2021-9-8 21:46:50 | 只看该作者
dukelec 发表于 2021-9-8 20:56
用 linux 做主力系統,日積月累是可以改變思維模式的,增加你解決問題的能力,而且可以順便給你增加豐富 ...


嗯嗯,在单片机这种软硬件结合的部分确实非常难做仿真。OpenOCD目前还是有在维护的,现在更新到了0.11.0版本。
Linux系统我是两年前才开始用的,之前主要是自己编译Linux主线然后在全志的那些高性价比芯片上跑着玩。
后来发现它的兼容性实在是太好了,我路由器MIPS架构跑的也是openwrt基于Linux的,就入坑搞Linux了。
至于为什么用了EasyEDA而不是KiCAD主要有两方面的原因吧。不过后续应该会再提供一版KiCAD的,EasyEDA的Layout操作还是太反人类了。
一是EasyEDA导出BOM还有PickAndPlace文件很方便,用它自带的库做SMT基本上不会出错。
二是之前想着顺便要参加嘉立创的那个电赛,索性就用它的EDA了。

出0入0汤圆

54
 楼主| 发表于 2021-9-8 21:49:21 | 只看该作者
carefree1986 发表于 2021-9-8 21:13
用汇编加快也于事无补,要用整型数 才是根本解决办法

目前的能力不足,没有想到如何用定点运算。还请您提供相关的代码以进行参考或者在Github上创建PR。啥都不提供就说要用这个用那个的一律当做打嘴炮处理哈

出0入4汤圆

55
发表于 2021-9-8 22:35:00 | 只看该作者
LaoZhu123 发表于 2021-9-8 21:49
目前的能力不足,没有想到如何用定点运算。还请您提供相关的代码以进行参考或者在Github上创建PR。啥都不 ...

我只是相对你提一个感觉对你有用的建议,你听不进去可以不采纳,没必要说我是嘴炮,你做的好不好跟我有屁关系啊

出0入0汤圆

56
 楼主| 发表于 2021-9-8 23:42:30 | 只看该作者
carefree1986 发表于 2021-9-8 22:35
我只是相对你提一个感觉对你有用的建议,你听不进去可以不采纳,没必要说我是嘴炮,你做的好不好跟我有屁 ...

我懂,我懂,“都是为了你好”

出30入16汤圆

57
发表于 2021-9-9 06:59:13 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-9 09:34 编辑
carefree1986 发表于 2021-9-8 22:35
我只是相对你提一个感觉对你有用的建议,你听不进去可以不采纳,没必要说我是嘴炮,你做的好不好跟我有屁 ...


要告诉他具体怎么做,最好是有源代码给他,这样就不会当做嘴炮了,空洞的建议,指点是没有用的。
我觉得你还是观棋不语做个看客就好了,这是个死局。

出0入0汤圆

58
发表于 2021-9-9 12:51:32 | 只看该作者
我大三时候还不知道什么是单片机

出0入0汤圆

59
发表于 2021-9-9 13:49:55 | 只看该作者
赞,期待

出10入29汤圆

60
发表于 2021-9-9 15:33:47 来自手机 | 只看该作者
洞洞幺 发表于 2021-9-9 06:59
要告诉他具体怎么做,最好是有源代码给他,这样就不会当做嘴炮了,空洞的建议,指点是没有用的。
我觉得 ...

复习一下32楼就好了。
老司机早已看穿一切。

出30入16汤圆

61
发表于 2021-9-9 16:59:18 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-9 17:42 编辑
LM5017 发表于 2021-9-9 15:33
复习一下32楼就好了。
老司机早已看穿一切。


是这么回事

出0入0汤圆

62
发表于 2021-9-9 22:02:03 | 只看该作者
LaoZhu123 发表于 2021-9-8 18:48
多谢大佬推荐!这就去看看这个库怎么用,如果可以的话会移植进项目中来。 ...

关于IQmath如何在FOC编程中使用,给你一些参考:

1. IQmath的User Guide,到这个帖子里找:https://www.amobbs.com/forum.php ... mp;highlight=iqmath

2、在STM32F103上使用IQmath实现了产品级的FOC应用代码,搜索EP100伺服驱动器源代码。下载下来研究学习一下吧。这个源代码本坛中就有,但你得仔细找才能发现。

出0入0汤圆

63
发表于 2021-9-9 22:24:10 来自手机 | 只看该作者
TINXPST 发表于 2021-9-9 22:02
关于IQmath如何在FOC编程中使用,给你一些参考:

1. IQmath的User Guide,到这个帖子里找:https://www. ...

劳烦楼上,发一下链接,刚才搜索关键字没有找到

出0入0汤圆

64
 楼主| 发表于 2021-9-9 23:49:43 | 只看该作者
TINXPST 发表于 2021-9-9 22:02
关于IQmath如何在FOC编程中使用,给你一些参考:

1. IQmath的User Guide,到这个帖子里找:https://www. ...

好的,IQmath已经在移植阶段了。现在的问题主要是编译工具链和芯片架构不配套,等我研究一整子先。

出0入0汤圆

65
 楼主| 发表于 2021-9-9 23:56:18 | 只看该作者
本帖最后由 LaoZhu123 于 2021-9-10 00:20 编辑
LM5017 发表于 2021-9-9 15:33
复习一下32楼就好了。
老司机早已看穿一切。


笑死我了,就您这样的还自称是老司机呢。
看了您发的帖子,全部都是灌水文,晚辈还想请问一下您有没有做过什么开源的方案发出来让大家开开眼界?
全都是人家玩烂了的东西,说不定keil用的还是破解版的吧?
不知道前辈对电机控制有何造诣,是玩透了无感低速FOC还是可以手推状态空间方程?
不好意思,差点忘了您可能连状态空间方程是什么都不知道,晚辈在这向您道歉了。
以及,虽然平时要上课,但是在我这里发这种无关东西的我都会一一回敬,所以发之前还请深思熟虑。

出10入29汤圆

66
发表于 2021-9-10 00:28:54 | 只看该作者
LaoZhu123 发表于 2021-9-9 23:56
笑死我了,就您这样的还自称是老司机呢。
看了您发的帖子,全部都是灌水文,晚辈还想请问一下您有没有做 ...

嗯,你说的都对。

出0入85汤圆

67
发表于 2021-9-16 15:57:50 | 只看该作者
洞洞幺 发表于 2021-9-8 12:37
高性能产品级电机控制器绝对不是小朋友可以轻易搞定的,就是华为天才智慧君也搞不定。 ...

所以要深挖,但往往市场是需要高性能的较少,当资本没有馋到高性能的诱惑永远不会投入大量人力财力去研发

出30入16汤圆

68
发表于 2021-9-16 16:40:26 来自手机 | 只看该作者
本帖最后由 洞洞幺 于 2021-9-16 18:30 编辑
CK345 发表于 2021-9-16 15:57
所以要深挖,但往往市场是需要高性能的较少,当资本没有馋到高性能的诱惑永远不会投入大量人力财力去研发 ...


我觉得不是这样,原因很简单就是搞不定高性能的。高技术这玩意不是钱可以堆出来的,也不是人多加班就行,但凡加班多的一般没什么真正的研发。搞不定就是搞不定,一窍难得。

出16170入6148汤圆

69
发表于 2021-9-17 15:40:00 | 只看该作者
LaoZhu123 发表于 2021-9-9 23:56
笑死我了,就您这样的还自称是老司机呢。
看了您发的帖子,全部都是灌水文,晚辈还想请问一下您有没有做 ...

对其它网友冷嘲热讽,封锁ID一星期

出0入0汤圆

70
发表于 2021-12-20 12:54:50 | 只看该作者
amigenius 发表于 2021-9-8 19:56
哈哈,后生可畏,我肤浅了,之前拜读MIT FOC和VESC,没想到本杰明除搞VESC外还参与MIT Mini Cheetah FOC ...

Benjamin是非常普通的英文名,开源FOC两大牛同名不同姓

VESC: Benjamin Vedder
MIT mini Cheetah: Benjamin Katz

出0入0汤圆

71
发表于 2021-12-20 12:57:32 | 只看该作者
后生可畏!加油~~~

出0入17汤圆

72
发表于 2021-12-20 14:25:22 | 只看该作者
不错,闲下来玩一下,MARK!

出30入16汤圆

73
发表于 2021-12-20 21:45:09 来自手机 | 只看该作者
感觉意料之中的烂尾了。

出305入0汤圆

74
发表于 2021-12-30 10:20:39 | 只看该作者
小伙子去哪里啦,还等着看结果呢

出0入8汤圆

75
发表于 2021-12-30 14:32:04 | 只看该作者
LaoZhu123 发表于 2021-9-9 23:56
笑死我了,就您这样的还自称是老司机呢。
看了您发的帖子,全部都是灌水文,晚辈还想请问一下您有没有做 ...

少年,国内懂状态空间方程的人多,就是没有一个开源出性能好点的FOC.再说现代控制理论都是老外搞出来的,你们就是用一下而已

出30入16汤圆

76
发表于 2021-12-30 15:31:26 来自手机 | 只看该作者
sandoz1cn 发表于 2021-12-30 14:32
少年,国内懂状态空间方程的人多,就是没有一个开源出性能好点的FOC.再说现代控制理论都是老外搞出来的,你 ...

越懂状态方程,还真的就越搞不定。

出0入0汤圆

77
发表于 2023-5-21 14:50:41 | 只看该作者
dukelec 发表于 2021-9-7 22:37
這個項目,foc 核心部分準確的說不是優化,而是簡化
順便一說,mcu 建議換成 stm32g0

(引用自9楼)

你的这个代码,是SPWM生成表达式。

用if else  是把SPWM转换为SVPWM。

据说可以提高15%的电压利用率。

出105入79汤圆

78
发表于 2023-5-21 15:04:34 | 只看该作者
simpleFOC全有了,SVPWM,快速三角函数,速度/位置/电流I/电流Q控制。

出0入0汤圆

79
发表于 2023-5-21 22:47:01 | 只看该作者
qwe2231695 发表于 2023-5-21 15:04
simpleFOC全有了,SVPWM,快速三角函数,速度/位置/电流I/电流Q控制。
(引用自78楼)

按simpleFOC的写法,转速稳态曲线会烂的一塌糊涂。

用168MHz的STM32F4,

simpleFOC 算完一个周期,150us起。

我现在优化后,算完2组电流环+各种变换+svpwm生成,只需要8us

出105入79汤圆

80
发表于 2023-5-21 23:36:26 | 只看该作者
sy8501 发表于 2023-5-21 22:47
按simpleFOC的写法,转速稳态曲线会烂的一塌糊涂。

用168MHz的STM32F4,
(引用自79楼)

没有实际运行调试simpleFOC,只看了代码,他的公式和代码过程都是符合ST,TI等大厂的框架的。

按你的经验,simpleFOC运行不稳定的问题是消耗时间过多?150us只有10K左右的确很慢。但是它没有无感电流估算,是编码器直接读取的位置,应该不需要什么运算时间?

出0入0汤圆

81
发表于 2023-5-21 23:45:57 | 只看该作者
qwe2231695 发表于 2023-5-21 23:36
没有实际运行调试simpleFOC,只看了代码,他的公式和代码过程都是符合ST,TI等大厂的框架的。

按你的经 ...
(引用自80楼)


上个月看过。

它虽然用了sin cos 数组查表,但并不是专门匹配某个对极精度,
所以中间又多了好多的浮点乘除法运算,来匹配这个数组。

然后就是母线电压提前标幺化,导致浮点运算满天飞,浪费一堆算力。

ST官方的也是这样的。可优化空间非常大。

出0入0汤圆

82
发表于 2023-5-21 23:49:38 | 只看该作者
qwe2231695 发表于 2023-5-21 23:36
没有实际运行调试simpleFOC,只看了代码,他的公式和代码过程都是符合ST,TI等大厂的框架的。

按你的经 ...
(引用自80楼)

150us做不了10kHz

只能6kHz

而且,如果它不用F4这种速度快的MCU,用了更慢的MCU,那就更糟糕了。可能1kHz都跑不到。

很容易产生速度谐波。

出105入79汤圆

83
发表于 2023-5-21 23:56:29 | 只看该作者
sy8501 发表于 2023-5-21 23:45
上个月看过。

它虽然用了sin cos 数组查表,但并不是专门匹配某个对极精度,
(引用自81楼)

是的,他们一般是在ESP32,STM32F4上运行,主要是0速度到100RPM低速场景,逐周期电流环应该是不需要的了。

出0入0汤圆

84
发表于 2023-5-22 00:11:12 | 只看该作者
qwe2231695 发表于 2023-5-21 23:56
是的,他们一般是在ESP32,STM32F4上运行,主要是0速度到100RPM低速场景,逐周期电流环应该是不需要的了 ...
(引用自83楼)

如果用绝对编码器或者每次上电重新锁定的增量式编码器,没有电流环实际上也没啥,电机温升会快那么一丢丢。

带了电流环,控制角会超前一些,不带电流环控制角会滞后一些。电流环最重要的作用,我觉得是用来修正不准确的电角度。

出105入79汤圆

85
发表于 2023-5-22 00:36:11 | 只看该作者
本帖最后由 qwe2231695 于 2023-5-22 04:46 编辑
sy8501 发表于 2023-5-22 00:11
如果用绝对编码器或者每次上电重新锁定的增量式编码器,没有电流环实际上也没啥,电机温升会快那么一丢丢 ...
(引用自84楼)


开始我也认为这样,现在略有点不同看法:

有绝对值编码器,电角度是可以直接从机械角度除以极对数减去电角度零点得到的,或者说认为误差很小。

实时输出的转动力矩是需要用Iq,Id进行计算(和磁链有关),这个计算需要精确电角度。保持Iq就能保持力矩,保持Id足够小就能优化效率。

电流环就是一个监控Iq,实时改变VqVd的过程,这个过程在观察中有低通滤波器,太快其实也用不到。

出0入0汤圆

86
发表于 2023-5-22 01:08:11 | 只看该作者
qwe2231695 发表于 2023-5-22 00:36
开始我也认为这样,现在略有点不同看法:

有绝对值编码器,电角度是可以直接从机械角度除以极对数减去电 ...
(引用自85楼)

电流环的计算确实是不需要精确的电角度,

当电角度不准确,Id会不为0,而电流环又要控制Id=0,这个时候就会输出不为0的Vd。

不为0的Vd代入反park变换后,会造成SVPWM相位偏移。

而这个相移,实际上就是纠正了电角度。

这个从SVPWM的python代码仿真中可以看的清清楚楚。

出105入79汤圆

87
发表于 2023-5-22 04:54:29 | 只看该作者
sy8501 发表于 2023-5-22 01:08
电流环的计算确实是不需要精确的电角度,

当电角度不准确,Id会不为0,而电流环又要控制Id=0,这个时候 ...
(引用自86楼)

你说的这个点我没有注意到,现在看起来是不符合直觉的:

“当电角度不准确,Id会不为0”: 而且还会减小测量到的 Iq,因为测到的电流总量就在那里,怎么变换都少不了的。

“而电流环又要控制Id=0,这个时候就会输出不为0的Vd,不为0的Vd代入反park变换后,会造成SVPWM相位偏移。”: 这个同意,测量出现了误差,控制量就会不正确。

”而这个相移,实际上就是纠正了电角度“: 这个不同意,因为“相移”是有不正确的测量量,存在的测量误差,导致了系统往正确方向走“纠正了电角度”,那这样的话系统就不需要反馈,甚至不需要测量电角度了,因为系统会自己稳定。

”SVPWM的python代码仿真“ SVPWM只是执行VqVd的手段,和你说的“纠正了电角度”关系不大呢?

出0入0汤圆

88
发表于 2023-5-22 14:16:18 | 只看该作者
qwe2231695 发表于 2023-5-22 04:54
你说的这个点我没有注意到,现在看起来是不符合直觉的:

“当电角度不准确,Id会不为0”: 而且还会减小 ...
(引用自87楼)

移相校正电角度是有限制的,超过一两个扇区就失效了。

出0入0汤圆

89
发表于 2023-5-22 14:36:17 | 只看该作者
qwe2231695 发表于 2023-5-22 04:54
你说的这个点我没有注意到,现在看起来是不符合直觉的:

“当电角度不准确,Id会不为0”: 而且还会减小 ...
(引用自87楼)

电机控制方面我是外行,不过你提到你用的芯片是GD32F130,我这颗芯片用了接近一万个,发现有少数芯片,AD转换结果偶尔出一个大很多的值,抗干扰能力不行,不知道你遇到没有,我打算换成STM32G0系列,很明显的一个好处是AD基准可以用外置的,价格也降到3元多了。AD部分抗干扰能力不行好像是国产ARM单片机的通病。

出0入0汤圆

90
发表于 2023-8-8 12:07:07 | 只看该作者
tclg 发表于 2023-5-22 14:36
电机控制方面我是外行,不过你提到你用的芯片是GD32F130,我这颗芯片用了接近一万个,发现有少数芯片,AD ...
(引用自89楼)

确定不是干扰的问题?5V或者是输入?

出0入0汤圆

91
发表于 2023-8-16 13:31:11 | 只看该作者
确定不是干扰的问题,就算是,也正说明它抗干扰能力不强
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 15:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表