文章目录[隐藏]
一、双电阻采样电流法
采样时机
原理说明
在U相和V相的下桥分别串联一个功率电阻,通过一个运放电路连接至A/D。
采样时机放在PWM的下溢中断进行,U V两相电阻上的电流即为电机U V相的线电流。
在软件设计的时候,采用下溢中断(处于第7段和第1段零矢量区域中),将电流采样的任务安排在一个PWM周期的开始处,在比较匹配到来之前的期间,U、V两相的上桥臂都是关断的,也就是说下桥臂是导通的,这样就可以在每个PWM周期顺利采样一次两个相电流值。
关于电流采样请参考: https://wenku.baidu.com/view/cc3f81fa10a6f524cdbf85bd.html
二、FOC的软件架构
用定时器产生PWM波形,在计数器的下溢事件时触发AD转换,当AD转化完成时产生EOS中断,在这个中断中放入FOC的算法。
运行FOC开环程序发现JSCOPE采集的电流如下,正弦度很差。
用示波器观察GPIO口和控制器输出的U相和W相波形,得到的如下图
图中黄色的线表示TIMx中断程序中的GPIO反转输出的波形。
图中蓝色的线表示U相输出的驱动波形
图中紫色的线表示V相输出的驱动波形
将反转的拐点用红线连接,它代表的就是TIMx定时器的计数值。从图上可以看到一个周期中产生了两个拐点,进行了两次AD转换,运行了两次FOC算法。所以构建出来的电流不是在开关管为000的状态下采集的,所以正弦度不好,此时不能用作FOC的计算。
三、问题出在哪里呢
查找TIM的手册:
In center-aligned mode, the counter counts from 0 to the auto-reload value (content of the TIMx_ARR register) – 1, generates a counter overflow event, then counts from the autoreload value down to 1 and generates a counter underflow event. Then it restarts counting from 0.
在中心对齐模式下,计数器从0计数到自动重新加载值(TIMx_ARR寄存器的内容)–1,生成计数器溢出事件,然后从自动加载值计数到1,并生成计数器下溢事件。然后从0开始重新开始计数.
就是说:定时器每个周期都会生成一次上溢中断和一次下溢中断。哪如何正确得到采样的时间点呢
用cubeMX生成的TIMx的初始化函数中(下图)
图中画圈的位置表示:当上溢和下溢次数的和等于该值时才产生中断。等于0表示每次都产生中断。将该值设置成( htim1.Init.RepetitionCounter = 1;)表示为当溢出事件计数为1的时候产生一次中断。重复以上实验:得到的电流波形如下
得到的反转GPIO和U/W相的时序如下图
将反转的拐点用红线连接,它代表的就是TIMx定时器的计数值。从图上可以看到一个周期中产生了一个拐点,并且拐点的位置都出现在下桥关闭的点。此时采样的电流重建出一个正弦的电流图。
版权声明:本文为CSDN博主「郭石头的学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35597202/article/details/120160474
一、双电阻采样电流法
采样时机
原理说明
在U相和V相的下桥分别串联一个功率电阻,通过一个运放电路连接至A/D。
采样时机放在PWM的下溢中断进行,U V两相电阻上的电流即为电机U V相的线电流。
在软件设计的时候,采用下溢中断(处于第7段和第1段零矢量区域中),将电流采样的任务安排在一个PWM周期的开始处,在比较匹配到来之前的期间,U、V两相的上桥臂都是关断的,也就是说下桥臂是导通的,这样就可以在每个PWM周期顺利采样一次两个相电流值。
关于电流采样请参考: https://wenku.baidu.com/view/cc3f81fa10a6f524cdbf85bd.html
二、FOC的软件架构
用定时器产生PWM波形,在计数器的下溢事件时触发AD转换,当AD转化完成时产生EOS中断,在这个中断中放入FOC的算法。
运行FOC开环程序发现JSCOPE采集的电流如下,正弦度很差。
用示波器观察GPIO口和控制器输出的U相和W相波形,得到的如下图
图中黄色的线表示TIMx中断程序中的GPIO反转输出的波形。
图中蓝色的线表示U相输出的驱动波形
图中紫色的线表示V相输出的驱动波形
将反转的拐点用红线连接,它代表的就是TIMx定时器的计数值。从图上可以看到一个周期中产生了两个拐点,进行了两次AD转换,运行了两次FOC算法。所以构建出来的电流不是在开关管为000的状态下采集的,所以正弦度不好,此时不能用作FOC的计算。
三、问题出在哪里呢
查找TIM的手册:
In center-aligned mode, the counter counts from 0 to the auto-reload value (content of the TIMx_ARR register) – 1, generates a counter overflow event, then counts from the autoreload value down to 1 and generates a counter underflow event. Then it restarts counting from 0.
在中心对齐模式下,计数器从0计数到自动重新加载值(TIMx_ARR寄存器的内容)–1,生成计数器溢出事件,然后从自动加载值计数到1,并生成计数器下溢事件。然后从0开始重新开始计数.
就是说:定时器每个周期都会生成一次上溢中断和一次下溢中断。哪如何正确得到采样的时间点呢
用cubeMX生成的TIMx的初始化函数中(下图)
图中画圈的位置表示:当上溢和下溢次数的和等于该值时才产生中断。等于0表示每次都产生中断。将该值设置成( htim1.Init.RepetitionCounter = 1;)表示为当溢出事件计数为1的时候产生一次中断。重复以上实验:得到的电流波形如下
得到的反转GPIO和U/W相的时序如下图
将反转的拐点用红线连接,它代表的就是TIMx定时器的计数值。从图上可以看到一个周期中产生了一个拐点,并且拐点的位置都出现在下桥关闭的点。此时采样的电流重建出一个正弦的电流图。
版权声明:本文为CSDN博主「郭石头的学习」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35597202/article/details/120160474
暂无评论