你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
子曰好人 发布时间:2018-9-3 23:03
本帖最后由 子曰好人 于 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,今天的分享就到这里,欢迎大家留言讨论。





评分

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

查看全部评分

收藏 评论12 发布时间:2018-9-3 23:03

举报

12个回答
stm1024 回答时间:2018-9-3 23:34:08
你把电机带负载试一下,看看最低转速能降到多少?
子曰好人 回答时间:2018-9-4 09:04:55
本帖最后由 子曰好人 于 2018-9-4 09:06 编辑
stm1024 发表于 2018-9-3 23:34
你把电机带负载试一下,看看最低转速能降到多少?

目前没有合适的负载,只能靠电机转轴上的两颗螺钉增加一点负载
sulio 回答时间:2018-9-25 09:32:15
大神请教一下!!!STM32实现位置环是把位置的PID参数提供给FOC的哪个参数的
子曰好人 回答时间:2018-9-25 10:12:27
sulio 发表于 2018-9-25 09:32
大神请教一下!!!STM32实现位置环是把位置的PID参数提供给FOC的哪个参数的

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

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

评分

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

查看全部评分

sulio 回答时间:2018-9-25 10:22:33
子曰好人 发表于 2018-9-25 10:12
不太明白你提问的意思,闭环控制都是相同的构造,pid参数提供给pid函数,比如你写的增量式或位置式pid函 ...

不好意思描述的有问题,我现在写的是位置式的PID函数,最后PID计算出值是提供给速度环的Idq ref吗
子曰好人 回答时间: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

查看全部评分

sulio 回答时间:2018-9-25 15:23:28
子曰好人 发表于 2018-9-25 14:42
速度环输出才是Idq ref,位置环的输出应该是速度参考值,过程是这样的:角度参考值->位置环pid函数->速度 ...

好的,谢谢大神
gatsby32 回答时间:2019-4-18 09:06:00
哥 ,我想问下整个电机控制程序的云南行逻辑是什么?在主函数李米娜就只有一个初始化,像pid调节,foc控制函数他是怎末调用的?你可以给我说下整个程序的运行逻辑吗
子曰好人 回答时间:2019-4-18 09:10:20
gatsby32 发表于 2019-4-18 09:06
哥 ,我想问下整个电机控制程序的云南行逻辑是什么?在主函数李米娜就只有一个初始化,像pid调节,foc控制 ...

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

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版