DRV8711总是报Pre-driver fault错误原因与处理方法

本文详细介绍了DRV8711预驱动器故障的检测原理,探讨了Vgs电压异常的原因,并提供了多种解决方案,包括优化PCB布局、调整驱动参数等。

一、DRV8711 Pre-driver fault检测原理

        DRV8711的内部有一个模拟比较器,当驱动外部FET进行开关时会把Vgs电压与1V进行比较,从而判断Pre-driver fault与否。

        当驱动FET打开后,会进行2.2us的延时,延时结束后,会采集Vgs(栅极到源极)的电压,然后与1V进行比较,如果高于1V说明驱动正常,如果低于1V,则会报Pre-driver fault。

        当驱动FET关闭后,会进行2.2us的延时,延时结束后,会采集Vgs(栅极到源极)的电压,然后与1V进行比较,如果低于1V说明关闭正常,如果高于1V,则会报Pre-driver fault。

二、Vgs电压过高的原因

MOS管等效模型如上,MOS管可以进一步简化为:

当上管进行开关动作时,比如上管由关断到开通,下管的漏极电压会迅速上升,则Vgd就会增大,给Cgd电容充电,从而形成电流Ic,因为DRV8711的栅极是关断的,Ic只能通过Cgs到S极形成回路。Ic电流流动的同时,也会通过栅极驱动线上寄生电感注入少量电流到芯片端,寄生电感和电容会产生LC震荡,容易使DRV8711误检测。

三、处理方法

1、优化PCB layout,使得芯片驱动回路尽量短减小寄生电感Lleak的大小。

2、减小芯片Ic的值。因为MOS管的Cgd无法改变,可以通过改变上管的打开和关闭速度来降低dv/dt实现Ic的减小,具体通过修改0x6h寄存器的IDRIVEN和IDRIVEP来实现。Ic计算公式为:

3、加大Cgs来改善,Cgs变大以后,同样的电流Ic产生的Vgs电压变化变小。

4、加电阻Rdriver 来抑制Lleak造成的振荡,从而降低芯片端的监测电压。

四、解决过程

先把IDRIVEN和IDRIVEP设置为最低,看问题能不能解决。如果不行就给四个下管的栅极前串联限流电阻,一般47欧姆到100欧姆,同时要把死区改大,防止贯通。一般这样就可以解决了。

 

参考来源:

https://e2echina.ti.com/question_answer/analog/other_analog/f/60/t/91771

http://e2echina.ti.com/blogs_/b/motordrivecontrol/archive/2017/08/07/drv8711

http://e2e.ti.com/support/motor-drivers/f/38/t/396386?tisearch=e2e-sitesearch&keymatch=DRV8711%20PDF

[784481.292714] Call Trace: [784481.292719] multi_cpu_stop+0x8e/0xf0 [784481.321468] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:135> [CX_TEST] pre ssid: 14, now ssid:14 [784481.348419] ? stop_machine_yield+0x10/0x10 [784481.348422] cpu_stopper_thread+0xa8/0x110 [784481.348427] smpboot_thread_fn+0xb8/0x150 [784481.378152] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:135> [CX_TEST] pre ssid: 14, now ssid:14 [784481.404291] ? smpboot_register_percpu_thread+0xf0/0xf0 [784481.404294] kthread+0x118/0x130 [784481.404296] ? __kthread_bind_mask+0x60/0x60 [784481.404301] ret_from_fork+0x1f/0x30 [784481.433074] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:135> [CX_TEST] pre ssid: 14, now ssid:14 [784504.920361] watchdog: BUG: soft lockup - CPU#164 stuck for 23s! [migration/164:836] [784504.951110] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:103> [CX_TEST] pre ssid: 14, now ssid:14 [784504.972928] Modules linked in: nfsv3(E) nfs_acl(E) 8021q(E) garp(E) mrp(E) bridge(E) stp(E) llc(E) nfs(E) lockd(E) grace(E) nfs_ssc(E) fscache(E) ip_set(E) nf_tables(E) libcrc32c(E) veth(E) dummy(E) cls_bpf(E) sch_ingress(E) nfnetlink(E) binfmt_misc(E) xprtrdma(OE) ib_isert(OE) ib_iser(OE) ib_srpt(OE) ib_srp(OE) ib_ipoib(OE) [784505.002557] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:80> [CX_TEST] pre ssid: 14, now ssid:14 [784505.028706] rdma_ucm(OE) ib_ucm(OE) ib_umad(OE) rdma_cm(OE) ib_cm(OE) iw_cm(OE) bonding(E) isofs(E) cdrom(E) khotfix_gso_panic_on_frag_list_20250418134918(OEK) overlay(E) mlx5_ib(OE) ib_uverbs(OE) ib_core(OE) sunrpc(E) dm_mod(E) intel_rapl_msr(E) iTCO_wdt(E) iTCO_vendor_support(E) ascend_xsmem(OE) drv_dp_proc_mng_host(OE) ts_debug(OE) drv_pcie_vnic_host(OE) drv_dvpp_cmdlist(OE) drv_soft_fault(OE) dbl_algorithm(OE) dbl_dev_identity(OE) ts_agent(OE) ascend_trs_shrid(OE) ascend_queu
11-08
[784457.740487] Call Trace: [784457.740494] multi_cpu_stop+0xac/0xf0 [784457.740500] ? stop_machine_yield+0x10/0x10 [784457.770279] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:103> [CX_TEST] pre ssid: 14, now ssid:14 [784457.796346] cpu_stopper_thread+0xa8/0x110 [784457.796351] smpboot_thread_fn+0xb8/0x150 [784457.796352] ? smpboot_register_percpu_thread+0xf0/0xf0 [784457.796356] kthread+0x118/0x130 [784457.796360] ? __kthread_bind_mask+0x60/0x60 [784457.824952] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:103> [CX_TEST] pre ssid: 14, now ssid:14 [784457.852030] ret_from_fork+0x1f/0x30 [784480.918474] watchdog: BUG: soft lockup - CPU#67 stuck for 22s! [migration/67:348] [784480.933078] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:39> [CX_TEST] pre ssid: 14, now ssid:14 [784480.957767] Modules linked in: nfsv3(E) nfs_acl(E) 8021q(E) garp(E) mrp(E) bridge(E) stp(E) llc(E) nfs(E) lockd(E) grace(E) nfs_ssc(E) fscache(E) ip_set(E) nf_tables(E) libcrc32c(E) veth(E) dummy(E) cls_bpf(E) sch_ingress(E) nfnetlink(E) binfmt_misc(E) xprtrdma(OE) ib_isert(OE) ib_iser(OE) ib_srpt(OE) ib_srp(OE) ib_ipoib(OE) rdma_ucm(OE) ib_ucm(OE) ib_umad(OE) rdma_cm(OE) ib_cm(OE) iw_cm(OE) bonding(E) isofs(E) cdrom(E) khotfix_gso_panic_on_frag_list_20250418134918(OEK) overlay(E) mlx5_ib(OE) ib_uverbs(OE) ib_core(OE) sunrpc(E) dm_mod(E) intel_rapl_msr(E) iTCO_wdt(E) iTCO_vendor_support(E) ascend_xsmem(OE) drv_dp_proc_mng_host(OE) ts_debug(OE) drv_pcie_vnic_host(OE) drv_dvpp_cmdlist(OE) drv_soft_fault(OE) dbl_algorithm(OE) dbl_dev_identity(OE) ts_agent(OE) ascend_trs_shrid(OE) ascend_queue(OE) ascend_trs_sec_eh_agent(OE) ascend_trs_pm_adapt(OE) ascend_trs_core(OE) ascend_trs_sub_stars(OE) intel_rapl_common(E) ascend_soc_platform(OE) drv_pcie_hdc_host(OE) debug_switch(OE) [784480.957804] ascend_event_sched_host(OE) ascend_trs_nvme_chan(OE) ascend_trs_id_allocator(OE) drv_devmm_host_agent(OE) drv_devmm_host(OE) drv_devmng_host(OE) drv_virtmng_host(OE) ascend_soc_resmng(OE) ascend_dms_smf(OE) ascend_dms_dtm(OE) ascend_urd(OE) i10nm_edac(E) nfit(E) x86_pkg_temp_thermal(E) coretemp(E) mlx5_core(OE) drv_pcie_host(OE) drv_vpc_host(OE) kvm_intel(E) mlxfw(OE) ascend_uda(OE) crct10dif_pclmul(E) vfat(E) drv_davinci_intf_host(OE) mlxdevm(OE) crc32_pclmul(E) ascend_logdrv(OE) ascend_kernel_adapt(OE) dbl_runenv_config(OE) ghash_clmulni_intel(E) drv_vascend(OE) drv_seclib_host(OE) fat(E) drv_vascend_stub(OE) aesni_intel(E) vfio_virqfd(E) [784480.987204] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:135> [CX_TEST] pre ssid: 14, now ssid:14 [784481.013663] glue_helper(E) mdev(E) rapl(E) vfio_iommu_type1(E) auxiliary(OE) psample(E) vfio(E) mlx_compat(OE) ipmi_si(E) nvme(E) i2c_i801(E) ipmi_devintf(E) [784481.044024] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:135> [CX_TEST] pre ssid: 14, now ssid:14 [784481.069547] isst_if_mmio(E) isst_if_mbox_pci(E) intel_uncore(E) intel_pmt(E) mei_me(E) idxd(E) i2c_ismt(E) i2c_smbus(E) ses(E) pcspkr(E) ipmi_msghandler(E) [784481.098275] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:135> [CX_TEST] pre ssid: 14, now ssid:14 [784481.125260] isst_if_common(E) kvm(E) mfd_core(E) idxd_bus(E) tls(E) enclosure(E) nvme_core(E) irqbypass(E) sg(E) mei(E) i2c_core(E) wmi(E) acpi_power_meter(E) ip_tables(E) sd_mod(E) t10_pi(E) crc32c_intel(E) mpt3sas(E) raid_class(E) [784481.155319] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:135> [CX_TEST] pre ssid: 14, now ssid:14 [784481.181140] ahci(E) scsi_transport_sas(E) libahci(E) libata(E) fuse(E) [784481.181146] CPU: 67 PID: 348 Comm: migration/67 Kdump: loaded Tainted: G S W OELK 5.10.112-100.alios7.x86_64 #1 [784481.181148] Hardware name: KunLun KunLun G8600/BC15MBSE, BIOS 21.02.00.02 04/17/2024 [784481.209970] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:135> [CX_TEST] pre ssid: 14, now ssid:14 [784481.236839] RIP: 0010:stop_machine_yield+0x2/0x10 [784481.236841] Code: 25 28 00 00 00 75 0d 48 83 c4 60 5d c3 b8 fe ff ff ff eb e3 e8 1f a8 8c 00 66 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 f3 90 <c3> 66 66 2e 0f 1f 84 00 00 00 00 00 66 90 0f 1f 44 00 00 41 57 41 [784481.236842] RSP: 0000:ffffa9eb59f93e68 EFLAGS: 00000202 [784481.236843] RAX: ffff8c073eaf4a80 RBX: ffffa9ecbc96fbd0 RCX: 0000000000000000 [784481.236843] RDX: 0000000000000002 RSI: ffffa9ecbc96fb50 RDI: ffffffffa0015978 [784481.236846] RBP: ffffa9ecbc96fbf4 R08: ffff8c073eae70d0 R09: 0000000000000004 [784481.268085] [ascend] [trs_drv] [ERROR] [trs_hw_alloc_chan 453] <VLLM::Worker_DP:464471:464471:135> [CX_TEST] pre ssid: 14, now ssid:14 [784481.292708] R10: 0000000000000069 R11: 0000000000000000 R12: 0000000000000001 [784481.292709] R13: ffffffffa0015978 R14: 0000000000000000 R15: 0000000000000001 [784481.292710] FS: 0000000000000000(0000) GS:ffff8c073eac0000(0000) knlGS:0000000000000000 [784481.292711] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [784481.292712] CR2: 000000c003602800 CR3: 0000011594af6004 CR4: 0000000002770ee0 [784481.292712] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [784481.292713] DR3: 0000000000000000 DR6: 00000000fffe07f0 DR7: 0000000000000400 [784481.292713] PKRU: 55555554 是啥异常导致
最新发布
11-08
### DRV8701 电流环驱动电路设计应用 DRV8701 是一款专为小型直流电机设计的双路驱动芯片,广泛应用于全国大学生智能车竞赛和其他嵌入式控制系统中。其核心特性之一是对电机电流的有效管理,这通常通过 **电流环控制** 实现。 #### 1. 电流环的作用 在电机驱动系统中,电流环的主要目的是精确控制流入电机绕组的电流大小,从而实现对速度和扭矩的精准调节。对于 DRV8701 来说,它可以通过内置的 PWM 控制机制配合外部采样电阻来形成闭环反馈回路[^3]。这种设计不仅提高了系统的稳定性,还能有效防止因过载而导致的损坏。 #### 2. 外围电路设计要点 为了实现高效的电流环控制,需要特别注意以下几个方面: - **采样电阻的选择** 在实际应用中,通常会在电机的地线上串联一个小阻值的精密电阻作为电流检测元件。这个电阻上的压降会被放大器转换成电压信号送至 MCU 的 ADC 输入端口进行处理[^5]。推荐选用低阻抗高精度类型的金属膜电阻以减少功率损耗并提升测量准确性。 - **滤波网络的设计** 由于开关动作会产生高频噪声干扰,因此有必要加入 RC 或 LC 滤波环节来净化采集到的数据。合理的参数设置有助于降低误判率同时保持响应速度[^1]。 - **保护措施** 鉴于异常情况下的安全考虑,建议增加 TVS 管或者肖特基二极管等瞬态抑制组件以防反向电动势造成损害。此外还需关注 PCB 布局合理性以便更好地散发热量避免温升过高影响长期工作表现[^3]。 #### 3. 软件算法支持 除了硬件层面的努力之外,软件方面的优化同样重要。一般会采用 PID 控制策略调整目标设定值实时监测值得差值直至满足预期效果为止。具体流程如下所示: ```c float pid_control(float setpoint, float feedback_value){ static float error_sum = 0; static float last_error = 0; const float Kp = 1.2; //比例系数 const float Ki = 0.05;//积分系数 const float Kd = 0.5 ;//微分系数 float error = setpoint - feedback_value; error_sum += error; float Pout = Kp * error ; float Iout = Ki * error_sum ; float Dout = Kd * (error - last_error); last_error = error ; return Pout + Iout + Dout; } ``` 以上函数实现了基本的比例-积分-微分运算逻辑,可根据项目需求灵活修改各增益参数获得最佳动态性能[^5]。 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值