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()