You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.2 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. #include "ozone_control_service.h"
  2. #include "frequency_sweep_service.h"
  3. #if 0
  4. float get_ozone_power() {
  5. float powersum = 0;
  6. for (size_t i = 0; i < 20; i++) {
  7. powersum += port_adc_get_ozone_generator_power();
  8. }
  9. return powersum / 20;
  10. }
  11. static float mf_set_pwm_and_get_power(uint32_t freq, uint32_t dutyns) {
  12. port_ozone_pwm_set_duty(freq, dutyns);
  13. systicket_delay_ms(2);
  14. float power1 = get_ozone_power();
  15. return power1;
  16. }
  17. void frequency_sweep(uint32_t startfreq, uint32_t step, uint32_t endfreq, uint16_t dutyns) {
  18. /**
  19. * @brief
  20. */
  21. s_power_table_startfreq = startfreq;
  22. s_frequency_sweep_step = step;
  23. s_power_table_endfreq = endfreq;
  24. uint16_t nowfreq = startfreq;
  25. bool firstloop = true;
  26. KFP KFPConfig = {0.02, 0, 0, 0, 0.03, 0.543};
  27. port_ozone_pwm_set_duty(startfreq, dutyns);
  28. port_ozone_pwm_start();
  29. systicket_delay_ms(3);
  30. printf("frequency_sweep:startfreq:%d, step:%d, endfreq:%d, dutyns:%d\n", startfreq, step, endfreq, dutyns);
  31. for (size_t i = 0; i < ARRAY_SIZE(s_power_table); i++) {
  32. nowfreq = startfreq + i * s_frequency_sweep_step;
  33. float power = mf_set_pwm_and_get_power(nowfreq, dutyns);
  34. if (firstloop) {
  35. firstloop = false;
  36. KFPConfig.LastP = power;
  37. }
  38. float afterfileter = kalmanFilter(&KFPConfig, power);
  39. setpower(nowfreq, power);
  40. /**
  41. * @brief dumptable
  42. */
  43. printf("%d,%f,%f\n", nowfreq, s_power_table[i], afterfileter);
  44. if (nowfreq >= s_power_table_endfreq) {
  45. break;
  46. }
  47. }
  48. port_ozone_pwm_stop();
  49. }
  50. float find_resonant_frequency(uint32_t startfreq, uint32_t endfreq) {
  51. /**
  52. * @brief
  53. */
  54. float minpower = 0;
  55. }
  56. #endif
  57. static struct { bool working; } this;
  58. void ozone_control_init(ozone_control_config_t* config) {
  59. /**
  60. * @brief
  61. */
  62. while (!frequency_sweep_is_finished()) {
  63. }
  64. }
  65. void ozone_control_set_level(level_t level);
  66. void ozone_control_start() {
  67. frequency_sweep_start(
  68. /*startfreq:*/ 20000, //
  69. /*step :*/ 100, //
  70. /*endfreq :*/ 40000, //
  71. /*dutyns :*/ 5000 //
  72. );
  73. this.working = true;
  74. }
  75. void ozone_control_stop() {}
  76. void ozone_control_schedule() {
  77. //
  78. frequency_sweep_schedule();
  79. //
  80. }