var_pulse_output.lua 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. --[[
  2. @module test_ioqueue
  3. @summary IO队列功能测试
  4. @version 1.0
  5. @date 2025.10.18
  6. @author 孟伟
  7. @usage
  8. 本功能模块演示的内容为:
  9. 高精度可变间隔脉冲输出
  10. 输出脉冲信息:
  11. 输出可变间隔非对称脉冲
  12. - 10次完整序列
  13. - 输出波形:低电平20us → 高电平30us → 低电平40us → 高电平50us→ 低电平60us → 高电平70us
  14. - 使用ioqueue.setdelay 单次模式,每个延时独立配置
  15. 本文件没有对外接口,直接在main.lua中require "fix_pulse_output"就可以加载运行;
  16. ]]
  17. --[[
  18. @module test_ioqueue
  19. @summary IO队列功能测试
  20. @version 1.0
  21. @date 2025.10.18
  22. @author 孟伟
  23. @usage
  24. 本功能模块演示的内容为:
  25. 高精度可变间隔脉冲输出功能
  26. 本文件没有对外接口,直接在main.lua中require "var_pulse_output"就可以加载运行;
  27. ]]
  28. -- 选好硬件定时器和输出引脚,这里使用硬件定时器0,输出引脚2
  29. local hw_timer_id, out_pin = 0, 2
  30. function var_pulse_output_fun()
  31. local _, tick_us = mcu.tick64()
  32. --确保为GPIO功能
  33. gpio.setup(out_pin, nil, nil)
  34. log.info('output 2 start')
  35. --测试高精度可变间隔定时输出
  36. ioqueue.init(hw_timer_id, 100, 10)
  37. --设置成输出口,电平1
  38. ioqueue.setgpio(hw_timer_id, out_pin, false, 0, 1)
  39. --单次延迟20us,如果不准,对time_tick微调
  40. ioqueue.setdelay(hw_timer_id, 20, tick_us - 3)
  41. --低电平
  42. ioqueue.output(hw_timer_id, out_pin, 0)
  43. --单次延迟30us
  44. ioqueue.setdelay(hw_timer_id, 30, tick_us - 3)
  45. --高电平
  46. ioqueue.output(hw_timer_id, out_pin, 1)
  47. --单次延迟40us
  48. ioqueue.setdelay(hw_timer_id, 40, tick_us - 3)
  49. --低电平
  50. ioqueue.output(hw_timer_id, out_pin, 0)
  51. --单次延迟50us
  52. ioqueue.setdelay(hw_timer_id, 50, tick_us - 3)
  53. --高电平
  54. ioqueue.output(hw_timer_id, out_pin, 1)
  55. --单次延迟60us
  56. ioqueue.setdelay(hw_timer_id, 60, tick_us - 3)
  57. --低电平
  58. ioqueue.output(hw_timer_id, out_pin, 0)
  59. --单次延迟70us
  60. ioqueue.setdelay(hw_timer_id, 70, tick_us - 3)
  61. --高电平
  62. ioqueue.output(hw_timer_id, out_pin, 1)
  63. ioqueue.start(hw_timer_id)
  64. sys.waitUntil("IO_QUEUE_DONE_" .. hw_timer_id)
  65. log.info('output 2 done')
  66. ioqueue.stop(hw_timer_id)
  67. ioqueue.release(hw_timer_id)
  68. sys.wait(500)
  69. end
  70. sys.taskInit(var_pulse_output_fun)