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