MustafaMulla29/rp2040-bldc-motor-controller-new
A USB‑C PD–powered RP2040 BLDC motor controller PCB with 3.3 V logic, MCT8329A sensorless commutation, three MOSFET half-bridges, protected power switching, USB data, controls, and motor connectors.
- Version
- 0.3.82
- License
- unset
- Stars
- 0
firmware/test_power_policy.py
import unittest
from power_policy import fixed_sink_pdo, valid_motor_contract, motor_permitted
class MotorPowerTests(unittest.TestCase):
rdo = (2 << 28) | (200 << 10) | 200
def test_valid_9v_only(self):
for mv in [8550,9000,9450]:
self.assertTrue(valid_motor_contract(mv,self.rdo,0x18,True))
for mv in [0,5000,8549,9451,12000,15000,20000]:
self.assertFalse(valid_motor_contract(mv,self.rdo,0x18,True))
with self.assertRaises(ValueError): fixed_sink_pdo(12000,2000)
def test_contract_loss_mismatch_and_insufficient_current(self):
self.assertFalse(valid_motor_contract(9000,self.rdo,0x18,False))
self.assertFalse(valid_motor_contract(9000,self.rdo,0x17,True))
for rdo in [0,self.rdo|(1<<26),(2<<28)|(150<<10)|150,(2<<28)|(300<<10)|300]:
self.assertFalse(valid_motor_contract(9000,rdo,0x18,True))
def test_off_fault_overcurrent_and_restart_require_arm(self):
args=[9000,8300,1000,self.rdo,0x18,True,True,True]
self.assertTrue(motor_permitted(*args))
for index,value in [(1,0),(1,10000),(2,1800),(5,False),(6,False),(7,False)]:
bad=args.copy();bad[index]=value
self.assertFalse(motor_permitted(*bad))
if __name__=='__main__': unittest.main()