sfun_wrapper.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #include "sfun_wrapper.h"
  2. #include "board.h"
  3. #include "api_rt.h"
  4. void McuInit(double ts)
  5. {
  6. BoardInit(ts);
  7. }
  8. int16_t cnt;
  9. void McuRun(const double *ain, const int32_t *din, const injection_dtype *ctrl, double *aout, int *dout, double *watchOut)
  10. {
  11. /* ADC模块输入 */
  12. adc.ChannelInput[0] = ain[5]; // 母线电压
  13. adc.ChannelInput[1] = 0; // 6V
  14. adc.ChannelInput[2] = 0; // 5V
  15. adc.ChannelInput[3] = 1.5; // PCB温度
  16. adc.ChannelInput[4] = 1.5; // 电机温度
  17. adc.ChannelInput[4] = 0; // 12V
  18. adc.ChannelInput[4] = 0; // 转把
  19. adc.ChannelInput[4] = 1.5; // 力矩传感器
  20. adc2.ChannelInput[0] = ain[4]; // A相电流
  21. adc2.ChannelInput[1] = ain[3]; // B相电流
  22. adc2.ChannelInput[2] = 0 - ain[4] - ain[3]; // C相电流
  23. adc2.ChannelInput[3] = ain[8]; // 母线电流
  24. // adc.ChannelInput[5] = ain[0]; // C相电压
  25. // adc.ChannelInput[6] = ain[1]; // B相电压
  26. // adc.ChannelInput[7] = ain[2]; // A相电压
  27. // adc.ChannelInput[4] = ain[5]; // 母线电压
  28. // adc.ChannelInput[1] = ain[6]; // 温度
  29. // adc.ChannelInput[7] = ain[7]; // AC电压
  30. /* Break 输入 */
  31. breakPin.IOIn = din[0];
  32. /* Cap 输入 */
  33. capPin.IOIn = din[1];
  34. inputCap.PWMIn = din[1];
  35. /* 注入变量 */
  36. for (int i = 0; i < 8; i++)
  37. {
  38. iRtProbe_ControlInjectionPoint(i, ctrl[i].enable);
  39. iRtProbe_TransInjectionData(i, ctrl[i].data);
  40. }
  41. /* 调度器运行 */
  42. scheduler.Schedule(&scheduler);
  43. /* PWM输出 */
  44. dout[0] = pwm.PwmOut[0];
  45. dout[1] = pwm.PwmOut[1];
  46. dout[2] = pwm.PwmOut[2];
  47. dout[3] = pwm.PwmOut[3];
  48. dout[4] = pwm.PwmOut[4];
  49. dout[5] = pwm.PwmOut[5];
  50. /* LED IO 输出 */
  51. dout[6] = ledPin.IOOut;
  52. /* 变量观测 */
  53. for (int i = 0; i < 32; i++)
  54. {
  55. watchOut[i] = iRtProbe_TransTestData(i);
  56. }
  57. }