江苏省网站建设_网站建设公司_页面加载速度_seo优化
2026/1/7 19:03:20 网站建设 项目流程

电流信号输入输出板,风电控制器控制板,光伏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脚本自动生成元器件坐标文件,比手动摆件效率提升十倍不止。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询