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
2.7 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
  1. #include "ozone_pwm_control.h"
  2. uint32_t s_hardware_frequency; //��λms���������ڵ�PWMƵ��
  3. uint32_t s_hardware_duty; //��λms���������ڵ�PWMռ�ձ�
  4. uint32_t s_large_period; //��λms���������ڵĶ�ʱ����
  5. uint32_t s_large_duty = 100; //��λms���������ڵĶ�ʱռ�ձ�
  6. uint32_t begin_ticket;
  7. bool ozone_pwm_control_enable_falg = false;
  8. void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty);
  9. void HOOK_pwm_stop(void);
  10. bool HOOK_pwm_is_enable(void);
  11. static void prv_update_begin_ticket(void) {
  12. begin_ticket = get_sys_ticket(); //���´����ڵĿ�ʼʱ�䣨��Ъʱ���Ŀ�ʼ��ʱ�䣩
  13. }
  14. void ozone_pwm_control_enable(void) { ozone_pwm_control_enable_falg = true; }
  15. void ozone_pwm_control_disable(void) { ozone_pwm_control_enable_falg = false; }
  16. bool ozone_pwm_control_is_enable(void) { return ozone_pwm_control_enable_falg; }
  17. /**
  18. * @brief һֱʱʱռձΪ100
  19. * Ъʱ300000
  20. * @param freq
  21. * @param duty
  22. */
  23. void ozone_pwm_control_module_set_pwm_output_1(uint32_t large_period, uint8_t large_duty) {
  24. s_large_period = large_period;
  25. s_large_duty = large_duty;
  26. prv_update_begin_ticket();
  27. ozone_pwm_control_enable();
  28. if (large_duty == 100) {
  29. ozone_pwm_control_disable();
  30. }
  31. }
  32. /**
  33. * @brief ʱPWM
  34. *
  35. * @param hardware_period pwmƵ
  36. * @param hardware_duty pwmռձ
  37. * @param large_period ʱ
  38. * @param large_duty ʱռձ
  39. */
  40. void ozone_pwm_control_module_set_pwm_output_2(uint32_t hardware_period, uint8_t hardware_duty, uint32_t large_period,
  41. uint8_t large_duty) {
  42. s_hardware_frequency = hardware_period;
  43. s_hardware_duty = hardware_duty;
  44. s_large_period = large_period;
  45. s_large_duty = large_duty;
  46. prv_update_begin_ticket();
  47. ozone_pwm_control_enable();
  48. HOOK_pwm_module_set_pwm_duty(hardware_period, hardware_duty);
  49. if (large_duty == 100) {
  50. ozone_pwm_control_disable();
  51. }
  52. }
  53. void ozone_pwm_control_module_stop_pwm(void) {}
  54. void ozone_pwm_control_module_loop(void) {
  55. static uint32_t hardware_frequency;
  56. static uint32_t hardware_duty;
  57. if (ozone_pwm_control_is_enable() == false) { //û��ʹ��ֱ���˳�
  58. HOOK_pwm_stop();
  59. return;
  60. }
  61. if (port_haspassedms(begin_ticket) % s_large_period <= s_large_period * s_large_duty / 100) {
  62. if (!HOOK_pwm_is_enable()) {
  63. printf("set work\r\n");
  64. HOOK_pwm_module_set_pwm_duty(hardware_frequency, hardware_duty);
  65. }
  66. } else {
  67. if (HOOK_pwm_is_enable()) {
  68. printf("set rest\r\n");
  69. hardware_frequency = s_hardware_frequency; //���ر�֮ǰ��Ƶ�ʽ��б���
  70. hardware_duty = s_hardware_duty; //���ر�֮ǰ��ռ�ձȽ��б���
  71. HOOK_pwm_stop();
  72. }
  73. }
  74. }