#include "sfun_wrapper.h" #include "board.h" #include "api_rt.h" void McuInit(double ts) { BoardInit(ts); } int16_t cnt; void McuRun(const double *ain, const int32_t *din, const injection_dtype *ctrl, double *aout, int *dout, double *watchOut) { /* ADC模块输入 */ adc.ChannelInput[0] = ain[5]; // 母线电压 adc.ChannelInput[1] = 0; // 6V adc.ChannelInput[2] = 0; // 5V adc.ChannelInput[3] = 1.5; // PCB温度 adc.ChannelInput[4] = 1.5; // 电机温度 adc.ChannelInput[4] = 0; // 12V adc.ChannelInput[4] = 0; // 转把 adc.ChannelInput[4] = 1.5; // 力矩传感器 adc2.ChannelInput[0] = ain[4]; // A相电流 adc2.ChannelInput[1] = ain[3]; // B相电流 adc2.ChannelInput[2] = 0 - ain[4] - ain[3]; // C相电流 adc2.ChannelInput[3] = ain[8]; // 母线电流 // adc.ChannelInput[5] = ain[0]; // C相电压 // adc.ChannelInput[6] = ain[1]; // B相电压 // adc.ChannelInput[7] = ain[2]; // A相电压 // adc.ChannelInput[4] = ain[5]; // 母线电压 // adc.ChannelInput[1] = ain[6]; // 温度 // adc.ChannelInput[7] = ain[7]; // AC电压 /* Break 输入 */ breakPin.IOIn = din[0]; /* Cap 输入 */ capPin.IOIn = din[1]; inputCap.PWMIn = din[1]; /* 注入变量 */ for (int i = 0; i < 8; i++) { iRtProbe_ControlInjectionPoint(i, ctrl[i].enable); iRtProbe_TransInjectionData(i, ctrl[i].data); } /* 调度器运行 */ scheduler.Schedule(&scheduler); /* PWM输出 */ dout[0] = pwm.PwmOut[0]; dout[1] = pwm.PwmOut[1]; dout[2] = pwm.PwmOut[2]; dout[3] = pwm.PwmOut[3]; dout[4] = pwm.PwmOut[4]; dout[5] = pwm.PwmOut[5]; /* LED IO 输出 */ dout[6] = ledPin.IOOut; /* 变量观测 */ for (int i = 0; i < 32; i++) { watchOut[i] = iRtProbe_TransTestData(i); } }