王昱顺 发表于 2024-6-10 15:24:04

HUHUhuhu 发表于 2024-6-10 15:08
王工您好,十分感谢您的开源资料提供给我的学习机会。我将您的软件下载一下编译的时候出现了这个错误,请问 ...
这个是我使用了超过31号的中断,需要使用一个小插件来解决他,具体的下载链接在这里
深圳国芯人工智能有限公司-工具软件 (stcai.com)

HUHUhuhu 发表于 2024-6-10 15:35:54

原来是这样,十分感谢。我还是首次使用STC单片机,不太明白。

12fen 发表于 2024-6-13 18:28:22

感谢!typedef struct Moto_Save_Dat
{
    u8 dir;       // 方向u8应该改为char?
    u8 pp;      // 极对数
    u16 zero;   // 零点校准值
    u8 can_id;    // can通讯设置地址
    u8 save_ok;   // 是否保存过
    u8 buffer; // 写入/读出缓冲区
} Moto_Save_Dat;                        u8 dir应该改为char dir?

王昱顺 发表于 2024-6-13 22:00:04

12fen 发表于 2024-6-13 18:28
感谢!typedef struct Moto_Save_Dat
{
    u8 dir;       // 方向u8应该改为char?

这个参数的范围是0~1,是自动校准中使用的参数,并不需要关心。校准的时候会自动辨认的

12fen 发表于 2024-6-13 22:25:08

王昱顺 发表于 2024-6-13 22:00
这个参数的范围是0~1,是自动校准中使用的参数,并不需要关心。校准的时候会自动辨认的 ...

我看到程序里是1和-1

这里应该是有符号的定义

12fen 发表于 2024-6-14 11:12:49

                case 4:
                        if (_auto_diff > 0)
                                moto_save.dir = 1;
                        else
                                moto_save.dir = -1;
                        moto_save.pp = (u8)(fabs((float)Encode_bit_Max / (float)_auto_diff) + 0.5);
                        Task_This++; // 完成dir和pp参数读取,进行零点校准

王昱顺 发表于 2024-6-14 16:01:18

12fen 发表于 2024-6-14 11:12
case 4:
                        if (_auto_diff > 0)
                                moto_save.dir = 1;


是的,你说的对。这确实是一个bug
不过因为我取出的时候依旧是跟-1所比较的。所以实际数值应该是1和255了。

rzsnb 发表于 2024-6-19 07:40:43

本帖最后由 rzsnb 于 2024-6-19 08:38 编辑

老弟,能不能帮忙看一下怎么回事?按键松手后,电机转动了一些没半圈位置后停止,应该是正常的吧,我用usb转CAN分析仪发送数据,8个BYTE数据怎么发送,电机都无反应,8个BYTE数据,第一个数据,08,04,02,0A,01,02,04电机都无反应,两个USN转CAN分析仪互相发送、接收数据,正常,CAN我不懂,麻烦看一下,哪里错了?帧ID参数需要设置吗?多谢了

王昱顺 发表于 2024-6-20 11:50:23

本帖最后由 王昱顺 于 2024-6-20 12:02 编辑

rzsnb 发表于 2024-6-19 07:40
老弟,能不能帮忙看一下怎么回事?按键松手后,电机转动了一些没半圈位置后停止,应该是正常的吧,我用usb ...
发送的id是有限制的,具体请查看config.h里面的user_can_id定义,之后的数据才跟写的说明里定义的一样
还有一个问题,0x55的同步信号是多个电机通讯中才使用的,平常可以不使用sync标志位,只打开en标志位。
给你一些示例
这个作用是设定速度模式,电机运行,速度500
80 01 00 00 00 00 01 f4
这个作用是设定速度模式,电机运行,速度-500
80 01 00 00 ff ff fe 0c

以下是同步帧的用法:
假设有两个电机,id为1和2(id0默认为广播地址)
现设定id1电机速度500,id2电机速度400,设置速度同步生效
id1:c0 01 00 00 00 00 01 f4//设定电机1速度
id2:c0 01 00 00 00 00 01 90//设定电机2速度
id0:00 00 00 55 00 00 00 00//同步生效

rzsnb 发表于 2024-6-20 16:37:05

本帖最后由 rzsnb 于 2024-6-20 16:39 编辑

王昱顺 发表于 2024-6-20 11:50
发送的id是有限制的,具体请查看config.h里面的user_can_id定义,之后的数据才跟写的说明里定义的一样
还 ...
老弟,我上学没学过电脑、单片机有关课程,一些程序看不懂,麻烦你直接和说说就你这个原程序的ID具体数据吧,我先把电机转起来再说{:sad:},基础弱,50多了,新东西也学不了了
页: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14 15
查看完整版本: 高性能FOC | 32F12K54-FOC Lite V2 开源!经多天测试,稳定无异常==目前最高水平