由于pwm管脚驱动蜂鸣器,但是由于电路设计为低电平导通蜂鸣器,所以要使得pwm管脚一上电就配置为高电平。
Hi Wu,
不清楚你使用的那个CPU,我以I.MX6Q为例,PWM1可以从三个CPU pad复用出来:DISP0_DAT8,GPIO_9,SD1_DAT3。那么,假设你使用GPIO_9复用出来。
(1)GPIO_9引脚在Power on reset时的状态。
通过查datasheet,POR时,此引脚是 INPUT , 100K拉高。那么,意味着此引脚并不是LOW电平。
(2)您电路中的300K拉低问题。
我查看了一下您的电路,这个300K拉低,我没太看懂在这里的必要性。而且即使要拉低的话,10K比较好,300K太大了吧。建议把R103去掉吧。不用这个电阻了。
(3)上拉
既然您需要的是PWM低电平时控制,且初始电平希望是HIGH,那么这个PWM1脚,应该有一个10K的上来电阻才对吧。
请您考虑一下我的建议!
Have a nice day!
TIC weidong sun
Hi Wigros Sun,
我使用的是IMX6Q,是SD1_DAT3,硬件是由于一点几伏特就可以导通蜂鸣器。
Hello wu,
SD1_DAT3,POR之后,也是100K拉高的。 你原问题是:要一上电就需要PWM脚输出HIGH。那么,您说的“硬件是由于一点几伏特就可以导通蜂鸣器。” 与 “电路设计为低电平导通蜂鸣器”,这是矛盾的。
Have a nice day!
Weidong Sun
Hi Wigros Sun,
由于一点几伏特就可以导通MOS控制蜂鸣器响,所以硬件才修改为取反电路的,对了,你说“SD1_DAT3,POR之后,也是100K拉高的”,但是实际上一上电内核启动蜂鸣器就一直响,pwm1一直输出低电平而不是高电平。从i.MX 6Dual/6Quad ApplicationsProcessor Reference Manual手册哪个章节可以看到管脚POR之后的状态啊?以下是pwm在设备树中的设置。
pwm-beed {
pwms = <&pwm1 0 1000000000>;
pwm-names = "pwm-beed";
};
&pwm1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_pwm1>;
status = "okay";
};
pinctrl_pwm1: pwm1grp {
fsl,pins = <
MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1
>;
};