news 2026/10/7 2:30:41

基于TMS控制技术的电流信号输入输出板与风电光伏控制解决方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于TMS控制技术的电流信号输入输出板与风电光伏控制解决方案

电流信号输入输出板,风电控制器控制板,光伏PID抑制器,逆变器总控板,公司DSP项目,如下: 1)4通道-10mA~10mA电流信号采集,4路-40mA~40mA电流信号采集,1路-40mA~40mA电流信号输出。 采用TMS320F28035控制,CAN通讯,提供原理图,PCB,元器件明细表。 2)风力发电控制板,主要涉及电压电流信号采集,PWM波输出,风速测量,超转硬件保护,RS485通讯,刹车控制等电路。 采用TMS320F2812控制,提供原理图以及PCB。 3)光伏PID抑制器:主要功能为抑制光伏电池板PID效应。 采用TMS320F2812控制,提供原理图,PCB以及元器件明细表。 4)逆变器总控板,主要功能为电压电流信号采样,RS485通讯,CAN通讯,IO控制等。 采用TMS320F28335控制,提供原理,PCB以及元器件明细表。

最近在搞几个工业级控制板卡项目,顺手整理些硬件设计和DSP代码的实战经验。咱们先看电流信号采集板这个硬菜——用TMS320F28035搞8通道电流采集,遇到±40mA大动态范围的时候,ADC前端调理电路必须得讲究。

老规矩先上电路设计要点:输入端用INA188做差分放大,配合精密电阻网络把±40mA转为0-3V信号。特别注意TVS管阵列布局,工业现场浪涌可不是开玩笑的。代码层面得这么配置ADC:

void InitAdc(void) { AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; // 采样窗后触发中断 AdcRegs.ADCSOC0CTL.bit.CHSEL = 0; // 通道0采样 AdcRegs.ADCSOC0CTL.bit.ACQPS = 15; // 16个周期采样保持 AdcRegs.ADCINTSEL1N2.bit.INT1SEL = 0; // EOC0触发INT1 AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; // 清中断标志 }

这段代码干了两件事:设置ADC触发时机和配置硬件过采样。注意ACQPS参数要根据信号源阻抗调整,上次在光伏电站现场调试发现阻抗突变导致采样值漂移,就是这参数没调好。

风电控制板用F2812做核心,最刺激的是超速保护电路设计。硬件上搞了个三重冗余:比较器硬保护+DSP软件保护+机械刹车三路互锁。PWM输出配置有个坑要注意——死区时间生成:

void InitEPwm(void) { EPwm1Regs.DBRED = 500; // 上升沿延迟 EPwm1Regs.DBFED = 500; // 下降沿延迟 EPwm1Regs.DBCTL.bit.POLSEL = 2; // 低有效互补模式 EPwm1Regs.CMPA.half.CMPA = 750; // 占空比25% }

调试时用示波器抓波形发现高频振荡,最后发现是死区时间单位设置错误——寄存器值对应的是系统时钟周期数,不是微秒!

光伏PID抑制器这项目最有意思,算法层面搞了个动态电势补偿策略。核心代码用Q格式处理浮点运算:

int32 PID_Compute(int32 setpoint, int32 input) { static int32 errSum = 0, lastErr = 0; int32 error = setpoint - input; errSum += error; // Kp=0.5, Ki=0.1, Kd=0.2 转换为Q15格式 int32 dTerm = (error - lastErr) * 6554; // 0.1*65536 int32 output = (error * 32768) + (errSum * 655) - dTerm; lastErr = error; return output >> 16; // 转回实际电压值 }

这个定点数实现方案省了浮点协处理器,实测在F2812上运行周期从120us降到35us。不过要注意Q值的溢出问题,上次现场调试就遇到过累计误差爆int32的情况。

总控板用28335玩多协议通讯才是真挑战,CAN和485同时跑的时候,中断冲突处理是重点。分享个DMA搬运技巧:

void ConfigDmaForCan(void) { DmaRegs.CH1.MODE.bit.PERINTE = 1; // 每帧中断 DmaRegs.CH1.MODE.bit.CONTINUOUS = 1; // 循环模式 DmaRegs.CH1.DST_BEG_ADDR_SHADOW = (Uint32)&CanRegs.CANTH; DmaRegs.CH1.SRC_BEG_ADDR_SHADOW = (Uint32)CanBuffer; DmaRegs.CH1.BURST_SIZE.bit.BURST_SIZE = 8; // 8字突发 }

这样配置后CAN总线数据直接DMA搬运,实测500kbps速率下CPU占用从18%降到3.7%。不过要注意内存对齐问题,之前因为结构体没加attribute((aligned(4)))导致数据错位,排查了整晚。

这些项目有个共同经验:工业级产品必须吃透芯片勘误表。像F28035的ADC线性度补偿,手册第三十页那个校准步骤,少做一步精度直接掉1%。下次聊聊怎么用Python脚本自动生成元器件坐标文件,比手动摆件效率提升十倍不止。

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

雷达原理 魏青 使用的是第三版教材 21.P21 雷达接收机(一) 雷达接收机的组成和主要质量指标

我们这节课开始讲雷达这个装备的第三个组成部分叫雷达接收机。先看三点一小节。雷达接收机的组成和主要质量指标。在说它的组成之前,我们先看一下雷达接收机的任务。雷达接收机主要是接收目标的回波信号。你得把目标的回波信号接收回来,你才能够对目标回波信号进行处理,来使…

作者头像 李华
网站建设 2026/10/5 18:40:47

VisionPro二开之相机传图到ToolBlock

VisionPro二开之相机传图到ToolBlock//采集图像// 获取采集状态myAcqFifo.GetFifoState(out var numPending, out var numReady, out var busy);if (numPending 0 && !busy){// 软触发取图myAcqFifo.StartAcquire();ICogImage cogImage myAcqFifo.CompleteAcquireEx(…

作者头像 李华
网站建设 2026/10/5 18:40:47

**手机剧本杀制作工具推荐2025指南,零基础也能打造沉浸式

手机剧本杀制作工具推荐2025指南,零基础也能打造沉浸式体验据《2025中国沉浸式娱乐产业发展报告》显示,2025年剧本杀线上创作工具用户规模预计突破800万,但其中能提供“从灵感到完整剧本”全流程辅助的工具占比不足15%。与此同时,…

作者头像 李华
网站建设 2026/10/5 18:41:00

当Ada记录类型含有可变长数组分量时的逆向分析

请看IDA生成的以下伪代码:char *a7;//函数的输入参数int v31; // ecxint v32; // ecxint v33; // edxint v34; // ebxint v35; // ecxint v36; // ecxint v37; // edxint v38; // eaxint v39; // edxv31 *a7;if ( v31 > 99 )v31 99;v32 (~(532 * v31 532) &g…

作者头像 李华
网站建设 2026/10/4 21:51:50

刀客doc:小米是时候切断和粉丝的脐带了

文/刀客doc(头条精选作者)刚刚,小米就“大熊事件”给出了一份相对完整的处理结果。公司发言人通过官微回应,公布了内部调查结论,文中称:“因为米粉,所以小米。米粉的信任和支持,是小米不断前行的基石。我们…

作者头像 李华