搜索
查看: 5120|回复: 12

[原创] N0.6 电机套件转矩控制任务&一些吐槽和疑问

[复制链接]

该用户从未签到

20

主题

1628

帖子

5

蝴蝶豆

论坛元老

最后登录
2022-6-7
发表于 2018-9-3 23:03:59 | 显示全部楼层 |阅读模式
本帖最后由 子曰好人 于 2018-9-3 23:06 编辑

转矩模式任务

电机库给我们提供了转矩控制的接口函数voidMC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms )。函数第一个参数是目标转矩,第二个参数是持续时间,也就是经过多少时间达到目标转矩。
转矩模式我就自定义为任务5了,代码如下:
  1. int16_t Torque_adc = 0;
  2. int16_t Torque_ref = 0;
  3. void task_5(void)
  4. {
  5.     Torque_adc = R3_1_F30X_ExecRegularConv(MC_SPEED_REF,ADC_CHANNEL_12);
  6.     Torque_ref = (5000*Torque_adc)>>16;
  7.     if(Torque_ref > 0)
  8.     {
  9.         MC_ProgramTorqueRampMotor1(Torque_ref+900, 1000);
  10.         MC_StartMotor1();
  11.     }
  12.     else
  13.     {
  14.         MC_StopMotor1();
  15.     }
  16.     HAL_Delay(100);
  17. }
复制代码
主函数代码:
  1. /* Infinite loop */
  2.   /* USER CODE BEGIN WHILE */
  3.   while (1)
  4.   {

  5.       if(GPIO_PIN_SET == HAL_GPIO_ReadPin(LED11_GPIO_Port,LED11_Pin))
  6.       {
  7.           task_5();
  8.       }
  9.       else
  10.       {
  11.           MC_ProgramTorqueRampMotor1(0, 0);
  12.           MC_StopMotor1();
  13.       }
  14.       realspeed = MC_GetMecSpeedAverageMotor1()*6;
  15.   /* USER CODE END WHILE */

  16.   /* USER CODE BEGIN 3 */

  17.   }
  18.   /* USER CODE END 3 */
复制代码
其中5000是通过任务4测试出来的,900是通过任务5测试出来的,维持最低转速需要转矩参考量给到900。


实验现象:
实验任务5转速记录.png
这个任务虽然完成了但是留下了一些疑问,还需要一段时间去深入了解代码所做的事情。


一些疑问和吐槽:
1.在做这个任务的时候,想吐槽一下电机库这个结构体,传指针是对于阅读代码来说不是很友好,另外就是有些结构体写得不够明白,比如存储dq轴电流、电压的这个结构体
  1. typedef struct
  2. {
  3.   int16_t qV_Component1;
  4.   int16_t qV_Component2;
  5. } Volt_Components;
复制代码
从结构体自身来看,结构体由组件1和组件2构成,但是这个在使用中并不能很好的明白组件1和组件2代表的意思,我看到电机库代码中结构体命名都是Vqd、Iqd这种形式,但是按照大家的习惯可能会把字母符号排在靠前的放前面,如Vdq、Idq这种。也许是我涉足代码不够深入,不了解ST工程师的想法,这里仅提出一点我自己的看法。


2.接口函数注释描述不是很清晰,比如这个转矩模式的接口函数,我不能知道转矩设定值的限制大小或者通过某种算法来获取转矩参考值。好在我仿真任务4的时候可以查看q轴电流设定值的大小。


3.转矩模式启动的时候速度会有一个过冲过程,通过仿真调试可以看到在启动的时候iq给定值非常大,过一会儿又降下来了,可能是满转矩启动造成的,后面要好好研究一下启动部分的代码了。

4.我遇到的关于编译器的问题,不知道是否是因为工程过于庞大,我用MDK5.25进行仿真的时候出现了编译器类似死机的现象,电机套件正常运行,watch窗口里的变量没有变化。我新建了IAR的工程,仿真的时候不会出现这个问题,不知道各位有遇到过没


ok,今天的分享就到这里,欢迎大家留言讨论。





评分

参与人数 1ST金币 +2 收起 理由
sulio + 2

查看全部评分

回复

使用道具 举报

  • TA的每日心情
    奋斗
    2021-4-15 11:47
  • 签到天数: 537 天

    [LV.9]

    29

    主题

    2176

    帖子

    127

    蝴蝶豆

    论坛元老

    最后登录
    2023-8-27
    发表于 2018-9-3 23:34:08 | 显示全部楼层
    你把电机带负载试一下,看看最低转速能降到多少?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20

    主题

    1628

    帖子

    5

    蝴蝶豆

    论坛元老

    最后登录
    2022-6-7
     楼主| 发表于 2018-9-4 09:04:55 | 显示全部楼层
    本帖最后由 子曰好人 于 2018-9-4 09:06 编辑
    stm1024 发表于 2018-9-3 23:34
    你把电机带负载试一下,看看最低转速能降到多少?

    目前没有合适的负载,只能靠电机转轴上的两颗螺钉增加一点负载
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2019-1-15
    发表于 2018-9-25 09:32:15 | 显示全部楼层
    大神请教一下!!!STM32实现位置环是把位置的PID参数提供给FOC的哪个参数的
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20

    主题

    1628

    帖子

    5

    蝴蝶豆

    论坛元老

    最后登录
    2022-6-7
     楼主| 发表于 2018-9-25 10:12:27 | 显示全部楼层
    sulio 发表于 2018-9-25 09:32
    大神请教一下!!!STM32实现位置环是把位置的PID参数提供给FOC的哪个参数的

    不太明白你提问的意思,闭环控制都是相同的构造,pid参数提供给pid函数,比如你写的增量式或位置式pid函数。要实现位置环控制只需要得到当前位置和目标位置,即可通过pid函数调节。

    有位置环的电机控制系统一般有三层控制环,最外是位置环,中间速度环,最里面是电流环,越是里面的是环调节速度应该越快

    评分

    参与人数 1ST金币 +2 收起 理由
    sulio + 2

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2019-1-15
    发表于 2018-9-25 10:22:33 | 显示全部楼层
    子曰好人 发表于 2018-9-25 10:12
    不太明白你提问的意思,闭环控制都是相同的构造,pid参数提供给pid函数,比如你写的增量式或位置式pid函 ...

    不好意思描述的有问题,我现在写的是位置式的PID函数,最后PID计算出值是提供给速度环的Idq ref吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20

    主题

    1628

    帖子

    5

    蝴蝶豆

    论坛元老

    最后登录
    2022-6-7
     楼主| 发表于 2018-9-25 14:42:17 | 显示全部楼层
    sulio 发表于 2018-9-25 10:22
    不好意思描述的有问题,我现在写的是位置式的PID函数,最后PID计算出值是提供给速度环的Idq ref吗 ...

    速度环输出才是Idq ref,位置环的输出应该是速度参考值,过程是这样的:角度参考值->位置环pid函数->速度参考值->速度环pid函数->电流参考值(Idq ref)->电流环PID函数->dq轴电压矢量->SVPWM

    评分

    参与人数 1ST金币 +2 收起 理由
    sulio + 2

    查看全部评分

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    3

    帖子

    0

    蝴蝶豆

    初级会员

    最后登录
    2019-1-15
    发表于 2018-9-25 15:23:28 | 显示全部楼层
    子曰好人 发表于 2018-9-25 14:42
    速度环输出才是Idq ref,位置环的输出应该是速度参考值,过程是这样的:角度参考值->位置环pid函数->速度 ...

    好的,谢谢大神
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    57

    帖子

    3

    蝴蝶豆

    中级会员

    最后登录
    2019-4-19
    发表于 2019-4-18 09:06:00 | 显示全部楼层
    哥 ,我想问下整个电机控制程序的云南行逻辑是什么?在主函数李米娜就只有一个初始化,像pid调节,foc控制函数他是怎末调用的?你可以给我说下整个程序的运行逻辑吗
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    20

    主题

    1628

    帖子

    5

    蝴蝶豆

    论坛元老

    最后登录
    2022-6-7
     楼主| 发表于 2019-4-18 09:10:20 | 显示全部楼层
    gatsby32 发表于 2019-4-18 09:06
    哥 ,我想问下整个电机控制程序的云南行逻辑是什么?在主函数李米娜就只有一个初始化,像pid调节,foc控制 ...

    你看ST的培训资料吧,我第三篇帖子就说了整个工程我们需要关心的内容,你没看?分析一下他的状态机画画图就明白了
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

    GMT+8, 2024-4-23 16:13 , Processed in 0.187786 second(s), 46 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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