找回密码
 立即注册
楼主: 神农鼎

最便宜的 车规-FOC,24万转@STC32G12K128-24A车规,STC-FOC 新算法库,9/8

  [复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:27
  • 最近打卡:2025-10-22 09:18:06
已绑定手机

0

主题

6

回帖

128

积分

注册会员

积分
128
发表于 6 天前 | 显示全部楼层
王*** 发表于 2025-9-8 12:45
2025年10月15日 新 更新 STC-FOC库,提供完整的项目程序

王工,STC32G12K128,如何实现正弦、余弦等浮点运算阿?
我在尝试跟着DENGfoc开源代码,复刻效果。但目前浮点运算结果很奇怪,没得到正常的结果,然后目前单独Debug测试,发觉出不了正确的结果。但想到你们既然能实现FOC控制,那理应STC32G12K128应该是可以实现浮点运算。能给个实现浮点运算的示例代码?或者给个实现步骤,需要引用哪些?定义什么?设置什么?才能使用浮点的加减乘除、正弦余弦等。

目前我根据手册35.8 示例代码,debug单步运算,没看到正确值【有可能是我设置不对,但没找到原因】。

#include "intrins.h"
#include <math.h>   // 引入数学库

float cf1 = 3.9f;
float cf2 = 5.1f;
float cf3 = 0;

void test() {   
    // 基本算术运算
    cf3 = cf1 * cf2;
    cf3 = cf1 * 0.0f;
    cf3 = (cf1 / cf2) - cf3;
    cf3 = (cf1 * cf2) + cf3;

    // 使用数学函数库的运算
    // 注意:sin, cos, tan等函数的参数是弧度
    cf3 = (cf1 / cf2) * sin(cf3);
    cf3 = (cf1 / cf2) * cos(cf3);
    cf3 = (cf1 / cf2) * tan(cf3);
    cf3 = (cf1 / cf2) * sqrt(cf3);  
    cf3 = (cf1 / cf2) * atan(cf3);
}

点评

我的库中使用的是纯整数定点计算,没有用到浮点 32g12k128没有浮点加速单元,所以浮点只能模拟运算,比较慢 至于你仿真看到的结果不对,大概是你用了模拟仿真,而非真实的硬件仿真,这部分请查看论坛里面的仿真教程  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:597
  • 最近打卡:2025-10-22 09:04:34
已绑定手机
已实名认证

120

主题

2919

回帖

7512

积分

版主

积分
7512
发表于 5 天前 | 显示全部楼层
曾*** 发表于 2025-10-17 22:18
王工,STC32G12K128,如何实现正弦、余弦等浮点运算阿?
我在尝试跟着DENGfoc开源代码,复刻效果。但目前 ...

我的库中使用的是纯整数定点计算,没有用到浮点
32g12k128没有浮点加速单元,所以浮点只能模拟运算,比较慢
至于你仿真看到的结果不对,大概是你用了模拟仿真,而非真实的硬件仿真,这部分请查看论坛里面的仿真教程
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-10-21 11:52:39
已绑定手机

1

主题

6

回帖

45

积分

新手上路

积分
45
发表于 5 天前 | 显示全部楼层
王工,你好!代码中Zero_Angle_Start对齐零点这个数据引用不了,报错 ERROR L128:
另外用了这个电机驱动库串口就用不了,能不把串口功能也调好?

点评

请更新最新版本的FOC库,FOC例程中的程序编译是没问题的 [attachimg]117955[/attachimg] 程序中对于串口没有操作,是不影响其他串口程序的  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:10
  • 最近打卡:2025-10-21 08:32:24

0

主题

13

回帖

88

积分

注册会员

积分
88
发表于 5 天前 | 显示全部楼层
王*** 发表于 2025-9-12 16:07
可以的,用phasetime的数据即可,
单位是0.5us,使用60除以当前的换向时间,就是每分钟的转速的,
这是如 ...

1500us是怎么算出的?具体指点一下

点评

是这样的,应该是变量为3000的时候,换向时间为1500us 是之前写错了,单位仍然是0.5us 已经将之前的内容更改过来了,感谢您的指正  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:107
  • 最近打卡:2025-10-18 15:28:50

9

主题

142

回帖

527

积分

高级会员

积分
527
发表于 5 天前 | 显示全部楼层
王工你好,我在自己添加程序的过程中发现调用26号中断,就会出现错误,请问是怎么回事?这是输入捕获中断
截图202510181527526794.jpg

点评

PWMB的中断号是27,26是PWMA的中断,已经被FOC程序占用了  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-18 15:54:05
已绑定手机

0

主题

12

回帖

156

积分

注册会员

积分
156
发表于 5 天前 来自手机 | 显示全部楼层
王工,我测试了油烟机电机310V在不带扇叶的时候转动声音很安静,在装上扇叶后,感觉转动起来声音很响,抖动厉害,有卡顿感觉,在哪里设置参数吗,我用其他FOC驱动板测试很安静,

点评

可能是由于转动惯量太大导致的,增加一些占空比试试  详情 回复 发表于 5 天前
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:597
  • 最近打卡:2025-10-22 09:04:34
已绑定手机
已实名认证

120

主题

2919

回帖

7512

积分

版主

积分
7512
发表于 5 天前 | 显示全部楼层
HUHU*** 发表于 2025-10-18 15:28
王工你好,我在自己添加程序的过程中发现调用26号中断,就会出现错误,请问是怎么回事?这是输入捕获中断 ...

PWMB的中断号是27,26是PWMA的中断,已经被FOC程序占用了
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:597
  • 最近打卡:2025-10-22 09:04:34
已绑定手机
已实名认证

120

主题

2919

回帖

7512

积分

版主

积分
7512
发表于 5 天前 | 显示全部楼层
ct1*** 发表于 2025-10-18 15:54
王工,我测试了油烟机电机310V在不带扇叶的时候转动声音很安静,在装上扇叶后,感觉转动起来声音很响,抖动 ...

可能是由于转动惯量太大导致的,增加一些占空比试试
低速时会反复重同步,所以会有一些噪声
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:597
  • 最近打卡:2025-10-22 09:04:34
已绑定手机
已实名认证

120

主题

2919

回帖

7512

积分

版主

积分
7512
发表于 5 天前 | 显示全部楼层
jun4*** 发表于 2025-10-18 10:27
王工,你好!代码中Zero_Angle_Start对齐零点这个数据引用不了,报错 ERROR L128:
另外用了这个电机驱动库 ...

请更新最新版本的FOC库,FOC例程中的程序编译是没问题的
截图202510181621457270.jpg
程序中对于串口没有操作,是不影响其他串口程序的
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:597
  • 最近打卡:2025-10-22 09:04:34
已绑定手机
已实名认证

120

主题

2919

回帖

7512

积分

版主

积分
7512
发表于 5 天前 | 显示全部楼层
yf_*** 发表于 2025-10-18 15:08
1500us是怎么算出的?具体指点一下

是这样的,应该是变量为3000的时候,换向时间为1500us
是之前写错了,单位仍然是0.5us
已经将之前的内容更改过来了,感谢您的指正
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-23 08:33 , Processed in 0.130343 second(s), 115 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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