main.lua 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. -- LuaTools需要PROJECT和VERSION这两个信息
  2. PROJECT = "charge"
  3. VERSION = "1.0.0"
  4. sys = require("sys")
  5. log.info("main", PROJECT, VERSION)
  6. local gpio_pin = 152
  7. -- gpio.setup(gpio_pin, 1, gpio.PULLUP)
  8. --yhm2712芯片地址
  9. local sensor_addr = 0x04
  10. --电压控制寄存器地址
  11. local V_ctrl_register = 0x00
  12. --电流控制寄存器地址
  13. local I_ctrl_register = 0x01
  14. --模式寄存器地址
  15. local mode_register = 0x02
  16. --配置寄存器,默认为0x00
  17. local config_register = 0x03
  18. -------------------注意:0x04寄存器无含义
  19. --状态寄存器
  20. local status1_register = 0x05 --只读
  21. local status2_register = 0x06 --只读
  22. local status3_register = 0x07 --只读
  23. --id寄存器
  24. local id_register = 0x08 --只读
  25. --充电电压常用参数,默认门限电压为4.35V
  26. local set_4V = 0xE0 --4V
  27. local set_4V1 = 0xF0 --4.1V
  28. local set_4V2 = 0x00 --4.2V
  29. local set_4V225 = 0x10 --4.225V
  30. local set_4V25 = 0x20 --4.25V
  31. local set_4V275 = 0x30 --4.275V
  32. local set_4V3 = 0x40 --4.3V
  33. local set_4V325 = 0x50 --4.325V
  34. local set_4V35 = 0x60 --4.35V
  35. --充电电流常用参数,默认充电电流为250mA,即0.5倍*500=250mA
  36. local set_0I2 = 0x22 --0.2倍,0.2*500=100mA
  37. local set_0I5 = 0x02 --0.5倍,0.5*500=250mA
  38. local set_0I7 = 0x42 --0.7倍,0.7*500=350mA
  39. local set_0I9 = 0x62 --0.9倍,0.9*500=450mA
  40. local set_I = 0x82 -- 1倍,1.0*500=500mA
  41. local set_1I5 = 0xA2 --1.5倍,1.5*500=750mA
  42. local V_table={
  43. ["14"] = "4.0V",
  44. ["15"] = "4.1V",
  45. ["0"] = "4.2V",
  46. ["1"] = "4.225V",
  47. ["2"] = "4.25V",
  48. ["3"] = "4.275V",
  49. ["4"] = "4.3V",
  50. ["5"] = "4.325V",
  51. ["6"] = "4.35V",
  52. ["7"] = "4.375V",
  53. ["8"] = "4.4V",
  54. ["9"] = "4.425V",
  55. ["10"] = "4.45V",
  56. ["11"] = "4.475V",
  57. ["12"] = "4.5V",
  58. ["13"] = "4.525V",
  59. }
  60. local I_table={
  61. ["1"] = "100mA",
  62. ["0"] = "250mA",
  63. ["2"] = "350mA",
  64. ["3"] = "450mA",
  65. ["4"] = "500mA",
  66. ["5"] = "750mA",
  67. ["6"] = "1000mA",
  68. ["7"] = "1500mA",
  69. }
  70. local charge_status_table={
  71. ["0"] = "放电模式",
  72. ["1"] = "预充电模式",
  73. ["2"] = "涓流充电",
  74. ["3"] = "恒流快速充电",
  75. ["4"] = "恒压快速充电",
  76. ["5"] = "恒压快速充电",
  77. ["6"] = "恒压快速充电",
  78. ["7"] = "充电完成",
  79. }
  80. sys.taskInit(function()
  81. sys.wait(1000)
  82. local result, data = yhm27xx.cmd(gpio_pin, sensor_addr, id_register)
  83. sys.wait(200)
  84. --设置充电电压为4V
  85. result,data = yhm27xx.cmd(gpio_pin, sensor_addr, V_ctrl_register, set_4V)
  86. if result == true then
  87. log.info("yhm27xxx 设置电压成功")
  88. else
  89. log.info("yhm27xxx 设置电压失败")
  90. end
  91. sys.wait(200)
  92. --充电电流设置为1倍
  93. result,data = yhm27xx.cmd(gpio_pin, sensor_addr, I_ctrl_register, set_0I7)
  94. if result == true then
  95. log.info("yhm27xxx 设置电流成功")
  96. else
  97. log.info("yhm27xxx 设置电流失败")
  98. end
  99. log.info("读寄存器的值...")
  100. adc.open(adc.CH_VBAT)
  101. while true do
  102. sys.wait(3000)
  103. yhm27xx.reqinfo(gpio_pin, sensor_addr)
  104. local result, data = sys.waitUntil("YHM27XX_REG", 500)
  105. local Data_reg={}
  106. -- log.info("result", result, "data", data)
  107. if result then
  108. for i=1,9 do
  109. Data_reg[i] = data:byte(i)
  110. end
  111. log.info("当前电池电压", "VBAT", adc.get(adc.CH_VBAT))
  112. log.info("yhm27xxx 寄存器0x00 功能:设置充电电压, 读取数据为:", V_table[tostring((Data_reg[1] & 0xF0)>>4)])
  113. log.info("yhm27xxx 寄存器0x01 功能:设置充电电流, 读取数据为:", I_table[tostring((Data_reg[2] & 0xE0)>>5)])
  114. log.info("yhm27xxx 寄存器0x05 功能:充电状态寄存器(只读),充电状态为:" , charge_status_table[tostring((Data_reg[6] & 0xE0)>>5)])
  115. end
  116. end
  117. end)
  118. sys.run()