test_sigmadelta.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "freertos/FreeRTOS.h"
  2. #include "freertos/task.h"
  3. #include "unity.h"
  4. #include "test_utils.h"
  5. #include "soc/soc_caps.h"
  6. #include "driver/sigmadelta.h"
  7. TEST_CASE("SigmaDelta config test", "[sigma_delta]")
  8. {
  9. sigmadelta_config_t sigmadelta_cfg = {
  10. .sigmadelta_prescale = 80,
  11. .sigmadelta_duty = 45,
  12. .sigmadelta_gpio = 4,
  13. };
  14. for (int i = 0; i < SOC_SIGMADELTA_CHANNEL_NUM; i++) {
  15. sigmadelta_cfg.channel = i;
  16. TEST_ESP_OK(sigmadelta_config(&sigmadelta_cfg));
  17. }
  18. sigmadelta_cfg.channel = SOC_SIGMADELTA_CHANNEL_NUM;
  19. TEST_ASSERT_EQUAL_MESSAGE(ESP_ERR_INVALID_ARG, sigmadelta_config(&sigmadelta_cfg), "wrong channel number should be inspected");
  20. }
  21. // connect GPIO4 with LED positive pin, and the GND pin connect LED negative pin
  22. // logic analyzer help also to see the wave form(more standard and accurate)
  23. TEST_CASE("SigmaDelta pin, duty, prescale set", "[sigma_delta][ignore]")
  24. {
  25. sigmadelta_config_t sigmadelta_cfg = {
  26. .channel = 0,
  27. .sigmadelta_prescale = 80,
  28. .sigmadelta_duty = 0,
  29. .sigmadelta_gpio = 4,
  30. };
  31. TEST_ESP_OK(sigmadelta_config(&sigmadelta_cfg));
  32. int8_t duty = 0;
  33. int inc = 1;
  34. for (int i = 0; i < 1000; i++) {
  35. sigmadelta_set_duty(0, duty);
  36. vTaskDelay(10 / portTICK_PERIOD_MS);
  37. duty += inc;
  38. if (duty == 127 || duty == -127) {
  39. inc = (-1) * inc;
  40. }
  41. }
  42. TEST_ESP_OK(sigmadelta_set_prescale(0, 200));
  43. for (int i = 0; i < 1000; i++) {
  44. sigmadelta_set_duty(0, duty);
  45. vTaskDelay(10 / portTICK_PERIOD_MS);
  46. duty += inc;
  47. if (duty == 127 || duty == -127) {
  48. inc = (-1) * inc;
  49. }
  50. }
  51. TEST_ESP_OK(sigmadelta_set_pin(0, 5));
  52. vTaskDelay(3000 / portTICK_PERIOD_MS);
  53. }