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.

81 lines
3.0 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
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
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. #if 0
  2. #include "ozone_pwm_control.h"
  3. #include "pwm.h"
  4. static bool s_ozone_pwm_control_enable_falg = false;
  5. static bool s_pwm_modble_hardware_control_flag; //硬件pwm使能标志位
  6. static uint32_t s_hardware_frequency; // hz
  7. static uint32_t s_hardware_duty; //单位ms,保存现在的PWM占空比
  8. static uint32_t s_large_period; //单位ms,保存现在的定时周期
  9. static uint32_t s_large_duty = 100; //单位ms,保存现在的定时占空比
  10. static uint32_t begin_ticket;
  11. static void prv_pwm_module_set_pwm_duty(uint32_t frequencyhz, uint32_t duty) {
  12. set_pwm_modbul_freq_duty(frequencyhz, duty);
  13. s_pwm_modble_hardware_control_flag = true;
  14. }
  15. static void prv_pwm_stop(void) {
  16. set_pwm_modbul_freq_duty(s_hardware_frequency, 0); //关闭PWM输出
  17. s_pwm_modble_hardware_control_flag = false;
  18. }
  19. static bool prv_pwm_is_enable(void) { return s_pwm_modble_hardware_control_flag; }
  20. static void prv_update_begin_ticket(void) {
  21. begin_ticket = get_sys_ticket(); //更新大周期的开始时间(间歇时间的开始的时间)
  22. }
  23. bool ozone_pwm_control_is_enable(void) { return s_ozone_pwm_control_enable_falg; }
  24. bool ozone_pwm_control_hardware_is_enable(void) { return s_pwm_modble_hardware_control_flag; }
  25. /**
  26. * @brief 100
  27. * 300000
  28. * @param freq
  29. * @param duty
  30. */
  31. void ozone_pwm_control_module_set_pwm_output_1(uint32_t freqhz, uint8_t hardware_duty) {
  32. ozone_pwm_control_module_set_pwm_output_2(freqhz, hardware_duty, 100 * 1000, 100);
  33. }
  34. /**
  35. * @brief PWM
  36. *
  37. * @param hardware_period pwm频率
  38. * @param hardware_duty pwm占空比
  39. * @param large_period
  40. * @param large_duty
  41. */
  42. void ozone_pwm_control_module_set_pwm_output_2(uint32_t freqhz, uint8_t hardware_duty, uint32_t large_period, uint8_t large_duty) {
  43. s_hardware_frequency = freqhz;
  44. s_hardware_duty = hardware_duty;
  45. s_large_period = large_period;
  46. s_large_duty = large_duty;
  47. prv_update_begin_ticket();
  48. s_ozone_pwm_control_enable_falg = true;
  49. prv_pwm_module_set_pwm_duty(freqhz, hardware_duty);
  50. }
  51. void ozone_pwm_control_module_stop_pwm(void) { s_ozone_pwm_control_enable_falg = false; }
  52. void ozone_pwm_control_module_loop(void) {
  53. static uint32_t hardware_frequency;
  54. static uint32_t hardware_duty;
  55. if (ozone_pwm_control_is_enable() == false) { //没有使能直接退出
  56. if (prv_pwm_is_enable()) {
  57. prv_pwm_stop();
  58. }
  59. return;
  60. }
  61. if (port_haspassedms(begin_ticket) % s_large_period <= s_large_period * s_large_duty / 100) {
  62. if (!prv_pwm_is_enable()) {
  63. printf("set work\r\n");
  64. prv_pwm_module_set_pwm_duty(hardware_frequency, hardware_duty);
  65. }
  66. } else {
  67. if (prv_pwm_is_enable()) {
  68. printf("set rest\r\n");
  69. hardware_frequency = s_hardware_frequency; //将关闭之前的频率进行保存
  70. hardware_duty = s_hardware_duty; //将关闭之前的占空比进行保存
  71. prv_pwm_stop();
  72. }
  73. }
  74. }
  75. #endif