main.lua 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. local set_4V375 = 0x70 --4.375V
  36. local set_4V4 = 0x80 --4.4V
  37. local set_4V425 = 0x90 --4.425V
  38. local set_4V45 = 0xA0 --4.45V
  39. local set_4V475 = 0xB0 --4.475V
  40. local set_4V5 = 0xC0 --4.5V
  41. local set_4V525 = 0xD0 --4.525V
  42. --充电电流常用参数,默认充电电流为250mA,即0.5倍*500=250mA
  43. local set_0I2 = 0x22 --0.2倍,0.2*500=100mA
  44. local set_0I5 = 0x02 --0.5倍,0.5*500=250mA
  45. local set_0I7 = 0x42 --0.7倍,0.7*500=350mA
  46. local set_0I9 = 0x62 --0.9倍,0.9*500=450mA
  47. local set_I = 0x82 -- 1倍,1.0*500=500mA
  48. local set_1I5 = 0xA2 --1.5倍,1.5*500=750mA
  49. local set_2I = 0xC2 -- 2倍,2.0*500=1000mA
  50. local set_3I = 0xE2 -- 3倍,3.0*500=1500mA
  51. local V_table={
  52. ["14"] = "4.0V",
  53. ["15"] = "4.1V",
  54. ["0"] = "4.2V",
  55. ["1"] = "4.225V",
  56. ["2"] = "4.25V",
  57. ["3"] = "4.275V",
  58. ["4"] = "4.3V",
  59. ["5"] = "4.325V",
  60. ["6"] = "4.35V",
  61. ["7"] = "4.375V",
  62. ["8"] = "4.4V",
  63. ["9"] = "4.425V",
  64. ["10"] = "4.45V",
  65. ["11"] = "4.475V",
  66. ["12"] = "4.5V",
  67. ["13"] = "4.525V",
  68. }
  69. local I_table={
  70. ["1"] = "100mA",
  71. ["0"] = "250mA",
  72. ["2"] = "350mA",
  73. ["3"] = "450mA",
  74. ["4"] = "500mA",
  75. ["5"] = "750mA",
  76. ["6"] = "1000mA",
  77. ["7"] = "1500mA",
  78. }
  79. local charge_status_table={
  80. ["0"] = "放电模式",
  81. ["1"] = "预充电模式",
  82. ["2"] = "涓流充电",
  83. ["3"] = "恒流快速充电",
  84. ["4"] = "恒压快速充电",
  85. ["5"] = "恒压快速充电",
  86. ["6"] = "恒压快速充电",
  87. ["7"] = "充电完成",
  88. }
  89. sys.taskInit(function()
  90. sys.wait(1000)
  91. local result, data = yhm27xx.cmd(gpio_pin, sensor_addr, id_register)
  92. sys.wait(200)
  93. --设置充电电压为4V
  94. result,data = yhm27xx.cmd(gpio_pin, sensor_addr, V_ctrl_register, set_4V)
  95. if result == true then
  96. log.info("yhm27xxx 设置电压成功")
  97. else
  98. log.info("yhm27xxx 设置电压失败")
  99. end
  100. sys.wait(200)
  101. --充电电流设置为1倍
  102. result,data = yhm27xx.cmd(gpio_pin, sensor_addr, I_ctrl_register, set_0I7)
  103. if result == true then
  104. log.info("yhm27xxx 设置电流成功")
  105. else
  106. log.info("yhm27xxx 设置电流失败")
  107. end
  108. log.info("读寄存器的值...")
  109. adc.open(adc.CH_VBAT)
  110. while true do
  111. sys.wait(3000)
  112. yhm27xx.reqinfo(gpio_pin, sensor_addr)
  113. local result, data = sys.waitUntil("YHM27XX_REG", 500)
  114. local Data_reg={}
  115. -- log.info("result", result, "data", data)
  116. if result then
  117. for i=1,9 do
  118. Data_reg[i] = data:byte(i)
  119. end
  120. log.info("当前电池电压", "VBAT", adc.get(adc.CH_VBAT))
  121. log.info("yhm27xxx 寄存器0x00 功能:设置充电电压, 读取数据为:", V_table[tostring((Data_reg[1] & 0xF0)>>4)])
  122. log.info("yhm27xxx 寄存器0x01 功能:设置充电电流, 读取数据为:", I_table[tostring((Data_reg[2] & 0xE0)>>5)])
  123. log.info("yhm27xxx 寄存器0x05 功能:充电状态寄存器(只读),充电状态为:" , charge_status_table[tostring((Data_reg[6] & 0xE0)>>5)])
  124. end
  125. end
  126. end)
  127. sys.run()