我有一张18f87j50的照片。在我的一个数字I/O,假设是RH7,我想用它给我一个0-3,3V的信号。我将其配置为输出并产生PWM,因此我在示波器上读取2V。然后我试着“释放”这个端口,使它以这个2V电平浮动在那里。当“释放”时,我将端口作为输入,并确保实习生上拉被禁用。
但我真的没有成功,它看起来漂浮到3.3V非常快,几乎因为上拉仍将启用。我在港口没有装货。
下一步是在那里放置一个运算放大器,以产生0-10V信号。
我这样做对吗?->端口输出,脉宽调制信号到所需的电平,禁用内部上拉,使端口输入可以开始浮动。
发布于 2012-01-17 20:28:01
实际上,当我第一次写这个问题时,我忘了提到我有一个直接连接到端口输出的特殊电路。当pwm在哪里实现时,它包含该电路保持特定的电压水平几秒钟。
第一个电路设计不佳,导致它不能正常工作,并使电压电平在pwm被杀死后立即下降。
现在它起作用了。当pwming在1ms的循环中产生2个电压输出,释放,然后继续我的程序的其余部分时,电路将最后已知的电压保持几秒钟而不会下降。
这种特殊的电路是由一些电容和运算电路组成的。
所以..。这是硬件故障!很抱歉。
发布于 2011-04-16 06:40:06
如果您将引脚设置为输入,它将不会处于任何特定电压。这种方法不会起作用。
如果您想要一个可控的电压电平,您唯一的选择(不使用额外的硬件)是使用CVREF引脚,它可以按照数据手册的第24章中所述进行控制。
顺便说一句,我不确定你怎么能在数字输出上看到2V (假设你的电源是3.3V)。
发布于 2011-04-16 07:01:30
如果你想保持PWM产生的2V电平,你不能关闭PWM。
我不确定您试图通过“释放”端口来实现什么。
在硬件方面我帮不了太多忙。
在评论后更新:
如果可以,请使用具有PWM硬件支持的引脚来执行您想要的操作。如果你不能改变布局,你可能需要继续在软件中这样做。我不知道你有什么硬件支持RH7在你的芯片上做到这一点,分配给脉宽调制的处理器引脚数不同。
这是我用来在基于PIC18F87J60的产品中配置脉宽调制的一些代码。一旦设置好了,就不再需要软件了。
/*
* Configure the powersupply to the external serial port. To do this,
* we configure a PWM to control the isolated 3V power supply.
*/
TRISC1 = 1;
TRISC2 = 1;
PR2 = 0xFF;
CCP1CON = 0x0c; /* PWM mode, active high, single output */
CCP2CON = 0x0e; /* PWM mode, active low, single output */
CCPR1L = 0x80; /* 50% duty cycle */
CCPR2L = 0x80; /* 50% duty cycle */
ECCP1AS = 0; /* auto shutdown off */
ECCP2AS = 0; /* auto shutdown off */
PIR1bits.TMR2IF = 0;
T2CON = 0x04; /* Enable T2 timer, prescale and postscale 1:1 */
while (!PIR1bits.TMR2IF)
;
TRISC1 = 0;
TRISC2 = 0;https://stackoverflow.com/questions/5683007
复制相似问题