sfun_wrapper.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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[5] = 0; // 12V
  18. adc.ChannelInput[6] = 0; // 转把
  19. adc.ChannelInput[7] = ain[9]; // 力矩传感器
  20. adc2.ChannelInput[0] = ain[4]; // A相电流
  21. adc2.ChannelInput[1] = ain[3]; // B相电流
  22. adc2.ChannelInput[2] = 1.65*3 - 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. cadenceCap.PWMIn = din[2];
  35. bikeSpdCap.PWMIn = din[3];
  36. /* BikeBrake 输入 */
  37. bikeBrakePin.IOIn = din[4];
  38. /* 注入变量 */
  39. for (int i = 0; i < 8; i++)
  40. {
  41. iRtProbe_ControlInjectionPoint(i, ctrl[i].enable);
  42. iRtProbe_TransInjectionData(i, ctrl[i].data);
  43. }
  44. /* 调度器运行 */
  45. scheduler.Schedule(&scheduler);
  46. /* PWM输出 */
  47. dout[0] = pwm.PwmOut[0];
  48. dout[1] = pwm.PwmOut[1];
  49. dout[2] = pwm.PwmOut[2];
  50. dout[3] = pwm.PwmOut[3];
  51. dout[4] = pwm.PwmOut[4];
  52. dout[5] = pwm.PwmOut[5];
  53. /* LED IO 输出 */
  54. dout[6] = ledPin.IOOut;
  55. /* 变量观测 */
  56. for (int i = 0; i < 32; i++)
  57. {
  58. watchOut[i] = iRtProbe_TransTestData(i);
  59. }
  60. }