news 2026/7/1 15:34:11

龙贝格观测器Pll的C代码(iqmath数学运算加速 定点计算)已做好了接口 调用调试即可 对...

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
龙贝格观测器Pll的C代码(iqmath数学运算加速 定点计算)已做好了接口 调用调试即可 对...

龙贝格观测器Pll的C代码(iqmath数学运算加速 定点计算)已做好了接口 调用调试即可 对应开发板可出出售 演示是stm32f1平台

龙贝格观测器PLL的C代码最近整利索了,直接上干货。这套算法用iqmath数学库做了定点数加速,实测在STM32F103这类M3核的芯片上跑得飞起。先扔个初始化函数镇楼:

#define PLL_KP _IQ(0.6) //这参数别瞎改,调废了别找我 #define PLL_KI _IQ(0.02) #define PLL_FREQ _IQ(50.0) void PLL_Init(PLL_Obj *obj){ obj->theta = _IQ(0.0); obj->cosVal = _IQ(1.0); obj->sinVal = _IQ(0.0); obj->err = _IQ(0.0); obj->intgrl = _IQ(0.0); }

注意IQ这个宏,直接把浮点数转成Q格式定点数。STM32F1没硬件浮点单元,用Q15格式省资源得很。比如IQ(0.6)实际是0.6乘以32768再取整,占2字节但能表示±1之间的数。

核心算法在中断服务例程里跑,5个乘法搞定一次迭代:

void PLL_ISR_Handler(PLL_Obj *obj){ _iq adc_sample = ADC_GetValue() >> 4; //12位AD取高8位转Q7格式 _iq err = _IQmpy(adc_sample, obj->sinVal); //PI环节 obj->intgrl += _IQmpy(PLL_KI, err); _iq delta = _IQmpy(PLL_KP, err) + obj->intgrl; //更新角度 obj->theta += delta + PLL_FREQ; obj->theta = _IQfrac(obj->theta); //取小数部分相当于模运算 //更新正余弦 obj->cosVal = _IQcos(obj->theta); obj->sinVal = _IQsin(obj->theta); }

这里有个骚操作——直接把PI调节器输出叠加到额定频率上,相当于自动补偿频偏。IQfrac这个函数处理角度溢出比用if判断快三倍,实测在72MHz主频下整个PLL运算耗时<20μs。

调试时记得把iqmath库的全局Q格式设为Q15,在头文件里改这句:

#define GLOBAL_Q 15 //Q15精度足够,改大了溢出别哭

配套开发板留了六路信号检测口,板上带硬件滤波电路。要测试的话,用信号发生器给个50Hz正弦波,接上板子跑起来,LED灯变绿就是锁定了。代码仓库里有个骚气的调试模式,把下面这行取消注释就能看实时波形:

//#define DEBUG_PLL //取消注释后通过USART1输出内部变量

实测波形捕获效果比某国外芯片方案还稳,关键是能省下8块钱成本。有兄弟问能不能跑在F4上,当然可以,把IQmath换成ARM的DSP库直接起飞,不过杀鸡用牛刀了属于是。

最后说下硬件兼容性,这套代码对AD采样率要求不高,1kHz以上就能用。GPIO口配置成TIM触发模式,和PWM同步触发采样,抗干扰能力直接提升一个档次。有需要开发板的私,带光耦隔离的版本加30块,做电机控制的老铁们懂的都懂。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 8:55:36

基于SpringBoot + Vue的健康管理后台系统

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2026/6/30 15:32:37

基于SpringBoot + Vue的医院管理系统

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华
网站建设 2026/7/1 8:55:42

PyTorch-CUDA-v2.7镜像中绑定‘yolov11’目标检测新版本造势

PyTorch-CUDA-v2.7 镜像集成 yolov11&#xff1a;目标检测新范式的工程实践 在智能安防摄像头实时识别行人、工业质检系统毫秒级发现缺陷、自动驾驶车辆精准感知周围物体的今天&#xff0c;一个共同的技术挑战浮现出来&#xff1a;如何让前沿的目标检测模型快速从论文走向产线&…

作者头像 李华
网站建设 2026/7/1 8:57:07

PyTorch-CUDA-v2.7镜像中使用tmux保持长任务运行

在 PyTorch-CUDA-v2.7 镜像中使用 tmux 保持长任务运行 你有没有经历过这样的场景&#xff1a;深夜启动一个深度学习训练任务&#xff0c;满怀期待地跑着模型&#xff0c;结果第二天早上发现 SSH 断了、本地电脑休眠了&#xff0c;或者网络抖动了一下——训练进程直接终止&…

作者头像 李华
网站建设 2026/7/1 8:55:41

【课程设计/毕业设计】基于SpringBoot+vue的球赛购票系统基于vue的球赛购票系统设计【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/7/1 8:56:32

Java计算机毕设之基于vue的球赛购票系统设计赛事信息查询、座位选择(完整前后端代码+说明文档+LW,调试定制等)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华