在嵌入式开发的路上经常会遇到一些奇怪的问题。记录下慢慢积累。
有一次在做一个电机堵转保护的功能,是用AD采样来实时采集 电机驱动芯片的电流,超过5A时将电机强行关闭并限制相应功能,采样电阻为0.05欧。
程序设定是电流超过5A并且连续超过4s时停止工作。但是在这4s内会出现很多0的值,导致不管你电流值多大,都不能达到堵转的条件(无法满足连续4s的条件),从而没有保护功能。
奇怪的是在另一个厂家的芯片都可以实现,并且是同样的程序设定。百思不得其解。后面用示波器抓去了采样口的电流,发现是PWM波,如果你的电机用了PWM调速,就会有0的出现,如果直接用高低电平驱动,那就没事。原来这个AD采样是采样实时的电压值,当PWM为低电平时,采集到的数据就是0。另一个厂家的AD采样不会是因为这个采样采集到的是类似于有效值,就像万用表一样,量PWM口是一个稳定电压,而不是高低电平。
应该是不用芯片的内部AD采样电路不同,所以才有这样一个奇怪的问题。